Basic Configure CloudHub

https://seversky.atlassian.net/wiki/spaces/CSHD/pages/217022681 를 통해 CH Server가 설치되었다고 가정합니다.

Quick start options

익숙하지 않은 사용자를 위해, Quick Start를 하기 위한 필수 옵션들만 사용합니다.

Main Option 수정

아래 Environment필드에서 Bind IP, Listenning Port, DB 파일 저장 위치 등을 변경할 수 있습니다.
일반적으로 8888 포트를 사용하며 다른 포트를 사용해야 하는 경우는 Nginx의 Config의 apps 포트를 같이 수정 후 Nginx를 reload해야 합니다. TLS_CERTIFICATE 옵션으로 default로 제공되는 self-signed cert파일을 Trusted Signed Cerificates으로 대체할 수 있습니다.

BOLT_PATH는 CloudHub가 사용하는 메타데이터(User/Group/Data source 정보, Dashboard 좌표 정보 등 시계열 수집 데이터가 아닌 관리용 데이터) DB의 데이터 저장 경로입니다.

ETCD_ENDPOINTSBOLT_PATH의 클러스터 용도로 사용하기 위한 Key-value 스토어이며, 아래 예제와 같이 ','로 구분하여 나열합니다.
차후, IP가 변경될 때를 위하여, Domain(/etc/hosts 파일에 등록 등)으로 등록하기를 권장합니다.

그밖에 CANNED_PATH, PROTOBOARDS_PATH에 대해서는 https://seversky.atlassian.net/wiki/spaces/CSHD/pages/254116120 를 참조합니다.

$ sudo vim /etc/systemd/system/multi-user.target.wants/cloudhub.service [Unit] After=network-online.target [Service] User=root Group=root Environment="HOST=0.0.0.0" Environment="PORT=8888" Environment="TLS_CERTIFICATE=/usr/lib/cloudhub/key/cloudhub_self_signed.pem" #Environment="TLS_PRIVATE_KEY=my.key" Environment="BOLT_PATH=/var/lib/cloudhub/cloudhub-v1.db" #Environment="ETCD_ENDPOINTS={ETCD_HOSTNAME01}:2379,{ETCD_HOSTNAME02}:2379,{ETCD_HOSTNAME03}:2379" Environment="CANNED_PATH=/usr/share/cloudhub/cloudhub-canned" Environment="PROTOBOARDS_PATH=/usr/share/cloudhub/cloudhub-protoboards" EnvironmentFile=-/etc/default/cloudhub ExecStart=/usr/bin/cloudhub $CLOUDHUB_OPTS KillMode=control-group Restart=on-failure [Install] WantedBy=multi-user.target

TLS 설정

위 예제에서 TLS_CERTIFICATETLS_PRIVATE_KEY에 공인된 인증서 및 private key 파일의 경로를 지정합니다.

TLS 인증서와 키가 모두 동일한 파일에있는 경우 TLS_CERTIFICATE 환경 변수만 사용하여 지정합니다.

Self-signed 인증서 사용

도메인이 없이 IP로만 사용할 경우는 공인된 인증서 발급이 되지 않으므로, 아래와 같이 self-signed 인증서-키 파일을 생성/사용하도록 합니다.(유효 기간 즉, -days옵션은 사용 환경에 따라 적절한 값으로 설정하도록 하며, openssl 버전에 의존성이 있으므로 리눅스 서버 즉, CH 서버가 설치된 호스트에서 실행하는 편이 좋습니다.)

$ cd /usr/lib/cloudhub/key/ $ openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout cloudhub_self_signed.pem -out cloudhub_self_signed.pem -subj "/CN=localhost" -days 365 $ openssl rsa -in cloudhub_self_signed.pem -text > cloudhub_self_signed.key $ openssl x509 -inform PEM -in cloudhub_self_signed.pem -out cloudhub_self_signed.crt

위 명령으로 생성된 파일을 위 TLS_CERTIFICATE의 경로에 복사한 후, Cloudhub를 [재]실행합니다.

실행 방법은 아래 Start CloudHub Service 섹션 참고합니다.

Option 파일 수정

CloudHub는 user 인증 및 Role base access control을 위해, OAuth 2.0(RFC 6749)을 지원하는 Provider들과의 연계 및 JWT(RFC 7519) 인증 방법을 사용합니다.

아래는 구체적 예시이며, 사용 환경에 따라 적절히 변경하여야 합니다.

$sudo vim /etc/default/cloudhub CLOUDHUB_OPTS="-l=debug \ --auth-duration=0 \ --inactivity-duration=10m \ -t=74c1e9e2450886060b5bf736b935cd0bf960837f \ -i=<client-id> \ -s=<client-secret> \ --public-url=https://localhost \ --auth0-domain=https://cloudhub.auth0.com \ --auth0-client-id=<client-id> \ --auth0-client-secret=<client-secret> \ -u=salt:http://{salt-master-ip}:8000/run \ -k=salt:<salt_token> \ -u=swan:https://{swan-IP}/api/v1/graphql \ -k=swan:<swan_token> \ -u=oncue:<port> \ -u=vsphere:on \ -u=aws:on \ -u=k8s:on \ -u=osp:on \ -u=salt-env-path:/opt/miniconda3/envs/saltenv \ --login-auth-type=basic \ --password-policy='(?=.*[0-9]{1,50})(?=.*[~`!@#$%\\^&*()-+=]{1,50})(?=.*[a-zA-Z]{2,50}).{8,50}$' \ --password-policy-message='Enter at least 8 digits using at least 1 number and at least 1 special sentence, and at least 2 English characters.' \ --mail-subject='[Notifiy] $user_id Password is reset' \ --mail-body-message='Reset OTP for $user_id is '$user_pw'.<br>Do not forget this!<br>This OTP will use just once when login into cloudhub.<br>Then you must set up the new password' \ --kapacitor-url=http://{Kapacitor_IP}:9094 \ --external-exec=/usr/bin/python \ --external-exec-args=/basic/call.py \ --influxdb-url=http://{InfluxDB_IP}:8086 \ --retry-policy=count:3 \ --retry-policy=delaytime:5 \ --retry-policy=type:delay"

옵션 설명

Option

Description

Option

Description

-l, --log-level [debug|info|error]

생략시 info, 최초 사용 시에는 오류 검출을 위해 debug 모드 사용 권장.

--auth-duration

  • 인증을 위한 총 쿠키(토큰) 수명(Lifespan), 단위: h(시간).

  • 만료 시, 세션 time out 후, 로그인 창 redirect.

  • Default:"720h(30d)",

    • ”0”은 browser 종료 시 만료.

--inactivity-duration

  • 세션 쿠키(토큰) 유효 기간.

  • 세션 유지를 위해서는 설정된 기간 이내에 쿠키(토큰)을 갱신해야 함.

  • 만료 시, 세션 time out 후, 로그인 창 redirect.

  • Default:"5m".

-t, --token-secret

Access token 발급용 JWT Signature를 생성하기 위한 secret key.

간단히, 아래와 같은 openssl 명령어로 생성할 수 있습니다.

이외에 생성 방법은 Goolge, github 등의 공식 사이트에서 토큰 발급을 지원합니다.

--public-url

CloudHub portal의 도메인 혹은 IP로 대체합니다.

--auth0-domain

위 예시의 토근들을 사용하면, OAuth 2.0 인증 방식의
미리 준비된 https://cloudhub.auth0.com으로 인증 요청을 하게 되며,
이후, auth0에 간단 sign up(회원 가입)하거나, 보유하고 있는 google 계정으로 로그인할 수 있습니다.

만일, 별도의 토큰을 발급받아 사용하고자 한다면, (혹은 다른 종류의 즉, github, google등의 인증 서비스를 사용하고자 한다면)https://seversky.atlassian.net/wiki/spaces/CSHD/pages/260014130 를 참조합니다.

만일 어떠한 종류의 인증 관련도 설정하지 않으면,
No-Auth 모드로 동작 합니다.
(로그인 없이, 계정 관리 및 Agent 관리 기능 제외 모드.)

--auth0-client-id

--auth0-client-secret

-i, --github-client-id

-s, --github-client-secret

OAuth 인증을 위한 GitHub Client ID 값입니다.

OAuth 인증을 위한 GitHub Client Secret 값입니다.

-u, --addon-url [salt|swan]

CloudHub가 지원하는 특정 기능을 위한 모듈과의 연동을 위한 API URL.

  • salt: Salt Mater의 도메인 혹은 IP를 사용합니다.

  • swan: SWAN Contuctor의 도메인 혹은 IP를 사용

    • oncue: oncue service를 이용할 경우 oncue의 port 입력

기타 CloudHub Server Option 으로 사용

  • oncue port : -u=oncue:<port>

  • vsphere 사용 : -u=vsphere:<on/off>

  • Kubernetes 사용 : -u=k8s:<on/off>

  • Infrastructure의 AWS 사용

    • -u=aws:<on/off>

-k, --addon-tokens [salt|swan]

위 API에 대한 Accessable Token.

  • salt: Snetsystems CloudHub 담당 영업에 문의.
    (CloudHub 라이센스 기한/조건 등, 협의 필요)

  • swan: Snetsystems SWAN 담당 영업에 문의.

--login-auth-type

CloucHub Portal의 Login Type을 지정합니다. (default : oauth)

  • mix : oauth와 basic 둘 다 지원

  • oauth : oauth만 지원

  • basic : basic(ID/PWD)만 지원

--password-policy

비밀번호 정규식

  • Login Type이 mix와 basic 경우에 사용하며 아래 옵션도 동일합니다.

--password-policy-message

비밀번호 정규식 메세지

--mail-subject

비밀번호 Reset Mail 제목

--mail-body-message

비밀번호 Reset Mail 내용

--kapacitor-url

비밀번호 Reset Mail 발신 서버

(Kapacitor Alert Endpoint에 SMTP가 설정되어 있어야 합니다.)

--external-exec

--external-exec-args

비밀번호 Reset 알림을 위한 외부 프로그램 경로

비밀번호 Reset 알림을 위한 외부 프로그램 실행 파일 경로

--influxdb-url

Acitivity Logging을 위한 Influxdb 서버 URL

--retry-policy

Login 차단 정책

  • count : Login 실패 횟 수

  • delaytime : Login이 차단되는 시간 (분, min)

  • type : lock or delay

    • lock : 비밀번호 실패가 count 이상이면 Login 차단. 관리자만 Unlock 가능합니다.

      • delay : 비밀번호 실패가 count 이상이면 delaytime 설정 시간이내에 Login 할 수 없습니다. delaytime이 지나면 Login 요청 가능합니다.

kapacitor mail과 external program 옵션 모두 설정되었을 때 처리 순서
(상호 배타적으로 실행됨)

  1. external program(--external-exec, --external-exec-args)

  2. kapacitor mail(--kapacitor-url)

두 옵션 중에 사용할 1개만 설정하기 바라며,

만일, 관리자에 의한 password reset만 사용 시, 위 두 개 옵션 모두 적용하지 않습니다.

Start CloudHub Service

CloudHub Service 시작

아래와 같이 정상 실행되었는지 확인할 수 있습니다.