구성 보안

Driverless AI는 config.toml 파일에 보안 설정을 일반 텍스트로 유지하는 대신 암호화된 keystore에 민감한 구성 정보 또는 보안 구성 정보를 저장하는 옵션을 제공합니다.

config 오버라이드 체인 업데이트

일반 텍스트 config.toml 파일에서 설정을 읽은 후 암호화된 keystore에서 설정을 로딩하도록 config 오버라이드 체인이 업데이트되었습니다. 환경 변수는 여전히 keystore의 값을 오버라이드할 수 있습니다.

1. h2oai/config/config.toml
[Internal, not visible to users]

2. config.toml
[Place file in a folder/mount file in docker container and provide path
in "DRIVERLESS_AI_CONFIG_FILE" environment variable]

3. Keystore file
[Set keystore_file parameter in config.toml or environment variable
"DRIVERLESS_AI_KEYSTORE_FILE" to point to a valid DAI keystore file
generated using the h2oai.keystore tool. If env variable is set, the value
in the config.toml for keystore_file path is overridden]

4. Environment variable
[Configuration variables can also be provided as environment
variables. They must have the prefix "DRIVERLESS_AI_" followed
by the variable name in caps. For example, "authentication_method"
can be provided as "DRIVERLESS_AI_AUTHENTICATION_METHOD"]

Keystore 설정 워크플로우

Creating the keystore

Keystore 파일은 config.toml에 의해 지원되는 모든 구성 매개변수를 포함할 수 있지만 보안/민감한 정보를 포함하는 구성 매개변수만 Keystore 파일에 저장하고 기타 구성 매개변수는 일반 config.toml 파일을 사용하는 것이 권장됩니다.

Step 1: Create a cleartext config subset

시작하려면 일반 config.toml 파일의 TOML 구문을 따르고 안전하게 저장하고자 하는 config 매개변수를 포함하는 config.clear 파일을 생성하십시오. 예:

vagrant@ubuntu-bionic:~$ cat /home/vagrant/config.clear
# ldap connection details
ldap_bind_password = "somepassword"
# Snowflake Connector credentials
snowflake_url = "https://sampleurl"
snowflake_user = "sampleuser"
snowflake_password = "samplepass"
snowflake_account = "sampleaccount"
vagrant@ubuntu-bionic:~$

Step 2: Using the h2oai.keystore tool to create keystore

Keystore는 루트 또는 Driverless AI 프로세스가 실행되는 사용자 ID로 액세스할 수 있도록 배치되어야 합니다. 기타 모든 Driverless 구성 파일과 함께 keystore를 /etc/dai/config.keystore 로 저장하는 것이 권장됩니다.

config.clear 파일에서 keystore를 생성하려면 h2oai.keystore 도구를 사용하십시오.

  • keystore 도구는 root``로 실행되어야 하고 ``dai-env.sh 스크립트에서 제공하는 Driverless AI Python 환경의 컨텍스트 내에서 실행되어야 합니다.

  • add-keys 명령은 첫 번째 인자로 keystore 경로를, 두 번째 인자로 일반 텍스트 config.toml 하위 집합을 수용합니다.

  • keystore가 존재하지 않는 경우 keystore가 생성됩니다.

  • Config.clear 의 모든 키는 keystore에 삽입되거나 업데이트됩니다. keystore에 키가 이미 있는 경우에는 업데이트됩니다. keystore에는 config.clear 에 없는 키가 포함되어 있으면 변경되지 않습니다.

  • 일단 keystore 파일이 생성되면 다음을 확인하는 것을 권장합니다.

    • 소유권은 읽기 및 쓰기 권한이 있는 루트 사용자에게 있습니다.

    • 그룹 소유권을 읽기 전용 권한을 가진 Driverless 그룹(또는 Driverless 프로세스가 시스템에서 실행되는 그룹 ID와 일치하는 적절한 ID)으로 변경하십시오. 다른 사용자 또는 그룹이 해당 파일에 대한 읽기 액세스 권한을 가지고 있어서는 안 됩니다.

  • 소유권 권한과 함께 config.keystore 파일이 생성됩니다.

(user1) $ sudo /bin/bash    # this will get a shell as root. If root access shell is available; this step can be skipped
(root) # /opt/h2oai/dai/dai-env.sh python -m h2oai.keystore add-keys /etc/dai/config.keystore /home/vagrant/config.clear
....some output here
======================================================================
Key: ldap_bind_password; Action: Inserted
Key: snowflake_url; Action: Inserted
Key: snowflake_user; Action: Inserted
Key: snowflake_password; Action: Inserted
Key: snowflake_account; Action: Inserted

(root) # ls -l /etc/dai
total 240
-rw-rw-r-- 1 root root    353 Jul 14 03:28 EnvironmentFile.conf
-rw-r--r-- 1 root root    210 Jul 20 06:57 Group.conf
-rw-r--r-- 1 root root    209 Jul 20 06:57 User.conf
-rw-r----- 1 root dai     236 Jul 20 07:09 config.keystore
-rw-r--r-- 1 root root 157135 Jul 20 07:17 config.toml
-rw-rw-r-- 1 root root    347 Jul 14 03:28 jaas.conf
-rw-r--r-- 1 root root  62206 Jul 20 06:57 redis.conf

(root) # chown root:dai /etc/dai/config.keystore
(root) # chmod 640 /etc/dai/config.keystore

Step 3: Using h2oai.keystore tool to manage keystore

h2oai.keystore 도구는 keystore 관리를 위해 세 가지 명령을 제공합니다.

  • add-keys: config를 사용하여 Driverless AI 비밀 keystore를 추가하거나 업데이트합니다.

  • list-keys: Driverless AI keystore에 저장된 키를 나열합니다. 해당 값은 표시되지 않습니다.

  • delete-keys keystore에서 지정된 키를 제거합니다.

(root) # /opt/h2oai/dai/dai-env.sh python -m h2oai.keystore --help

======================================================================
Usage: python -m h2oai.keystore [OPTIONS] COMMAND [ARGS]...

Options:
 --help  Show this message and exit.

Commands:
 add-keys     Adds/Update DAI secrets keystore (KEYSTORE_PATH) with config...
 delete-keys  Deleted keys provided as -k key1 -k key2 from the keystore...
 list-keys    Lists keys stored in Driverless AI KEYSTORE.
root@ubuntu-bionic:/etc/dai#


(root) # /opt/h2oai/dai/dai-env.sh python -m h2oai.keystore list-keys /etc/dai/config.keystore
======================================================================
ldap_bind_password = ******
snowflake_url = ******
snowflake_user = ******
snowflake_password = ******
snowflake_account = ******
root@ubuntu-bionic:/etc/dai#

-------- Deleting keys ------------

(root) # /opt/h2oai/dai/dai-env.sh python -m h2oai.keystore delete-keys /etc/dai/config.keystore  -k snowflake_url -k snowflake_account
======================================================================
snowflake_url = Deleted
snowflake_account = Deleted

(root) # /opt/h2oai/dai/dai-env.sh python -m h2oai.keystore list-keys /etc/dai/config.keystore
======================================================================
ldap_bind_password = ******
snowflake_user = ******
snowflake_password = ******
root@ubuntu-bionic:/etc/dai#