클라이언트 인증서 인증 예제¶
본 섹션에서는 Driverless AI에서 client certificate 인증을 구성하는 방법에 관해 설명합니다.
클라이언트 인증서 및 SSL 구성 옵션¶
클라이언트 인증서 인증 구성 시, 다음 옵션을 지정할 수 있습니다.
SSL 구성 옵션¶
클라이언트 인증서 인증을 활성화하기 위해서는 상호 TLS 인증(mTLS)을 활성화해야 합니다. 다음 구성 옵션을 사용하여 mTLS를 구성합니다. mTLS 활성화하는 방법에 관한 자세한 내용은 mTLS Authentication topic 을 참조하십시오.
ssl_client_verify_mode
: 클라이언트 검증 모드를 설정하십시오. 다음 검증 모드 중에서 선택합니다.
CERT_NONE
: 클라이언트는 인증서를 제공하지 않아도 됩니다. 인증서 제공 시, 그에 따른 검증 오류는 무시됩니다.
CERT_OPTIONAL
: 클라이언트는 인증서를 제공하지 않아도 됩니다. 인증서 제공 시, 구성된 CA 체인에 대해 확인됩니다.
CERT_REQUIRED
: 검증을 위해 클라이언트는 인증서를 제공해야 합니다. Driverless가 자체 콜백 요청을 검증할 수 있도록 해당 모드를 선택한 경우ssl_client_key_file
및ssl_client_crt_file
옵션을 구성하십시오.
ssl_ca_file
: certification authority (CA) 인증서 파일의 경로를 지정합니다. 해당 인증서는 클라이언트 인증이 활성화된 경우에 클라이언트 인증서의 확인에 사용됩니다. 지정되지 않으면 클라이언트는 기본 시스템 인증서를 사용하여 검증됩니다.ssl_client_key_file
:ssl_client_verify_mode = "CERT_REQUIRED"
인 경우 필수입니다. Driverless AI가 스스로의 인증에 사용하는 private key 에 대한 HTTPS 설정 경로를 지정합니다.Ssl_client_crt_file
:ssl_client_verify_mode = "CERT_REQUIRED"
인 경우 필수입니다. Driverless AI가 스스로의 인증에 사용할 client certificate 에 대한 HTTPS 설정 경로를 지정합니다.
클라이언트 인증서 옵션¶
auth_tls_crl_file
: 클라이언트 인증서 확인에 사용되는 certificate revocation list (CRL) 파일의 경로.auth_tls_user_lookup
: 사용자 ID 획득 방법을 지정합니다. 다음 중에서 선택합니다.REGEXP_ONLY
:auth_tls_subject_field
및auth_tls_field_parse_regexp
를 사용하여 클라이언트 인증서에서 사용자 이름을 추출합니다.LDAP_LOOKUP
: LDAP 서버를 이용하여 사용자 이름을 획득합니다.(추가 LDAP 인증 구성 옵션에 관한 정보는 LDAP 인증 예제 섹션을 참조하십시오.)
Used with LDAP_LOOKUP
:
auth_tls_ldap_server
: LDAP 서버 호스트 이름 또는 IP 주소를 지정합니다.auth_tls_ldap_port
: LDAP 서버 포트 번호를 지정합니다. 기본값은 389입니다.auth_tls_ldap_use_ssl
: LDAP 서버 연결 시, SSL을 활성화(True) 또는 비활성화(False)할지 여부를 지정합니다.auth_tls_ldap_tls_file
: SSL 인증서 경로를 지정합니다.auth_tls_ldap_bind_dn
: LDAP bind 사용자의 전체 DN을 지정합니다.auth_tls_ldap_bind_password
: LDAP bind 비밀번호를 지정합니다.auth_tls_subject_field
: 사용자 이름 또는 추가 검증을 제공하는 기타 값의 소스로 사용되는 제목 필드입니다.auth_tls_field_parse_regexp
: 추가 검증을 제공하는 사용자 이름 또는 기타 값을 획득하기 위해 제목 필드의 구문 분석에 사용되는 정규 표현식입니다.auth_tls_ldap_search_base
: 검색을 시작할 디렉터리 정보 트리(DIT)의 위치를 지정합니다.auth_tls_ldap_search_filter
:tls_certificate
인증 방법 사용 시,LDAP_LOOKUP
으로 특정 사용자를 찾는 데 사용하는 LDAP 검색 필터를 지정합니다. 대체를 위해auth_tls_field_parse_regexp
에서 named capturing group을 사용하여 동적 빌드가 가능합니다.auth_tls_field_parse_regexp = "\w+ (?P<id>\d+)" auth_tls_ldap_search_filter = "(&(objectClass=person)(id={{id}}))
auth_tls_ldap_username_attribute
: 사용자 이름으로 사용되는 LDAP 레코드 속성을 지정합니다.auth_tls_ldap_authorization_lookup_filter
: (옵션) 사용자가 발견된 후, 수행되는 추가 검색 필터를 지정합니다. 이것은 사용자가 개별 사용자 항목이 아닌 그룹 항목 내에서 그룹 구성원이 정의된 LDAP 스키마에서 특정 그룹의 구성원인지의 여부 확인에 유용합니다(해당 옵션의 사용 방법에 관한 예제를 확인하려면 다음 Lookup 필터 예제 섹션을 참조하십시오).auth_tls_ldap_authorization_search_base
: 인증 lookup을 시작할 기본 식별 이름(DN)을 지정합니다.Auth_tls_ldap_authorization_lookup_filter
가 지정된 경우에 필요합니다.
Lookup 필터 예제¶
다음 예제에서는 auth_tls_ldap_authorization_lookup_filter
옵션을 사용하여 그룹(조직 단위) membership이 그룹 항목 내에 정의된 LDAP 스키마에서 개별 사용자가 chemists
그룹의 구성원인지 여부를 확인합니다.
# Specify to use email as username
auth_tls_ldap_username_attribute = "mail"
# Specify search string
auth_tls_ldap_search_filter = "(&(objectClass=inetOrgPerson)(uid={{username}}))"
# Specify the base DN to start the search from
auth_tls_ldap_authorization_search_base="dc=example,dc=com"
# Filter the results of the search to determine which users are members of a specific group
auth_tls_ldap_authorization_lookup_filter = "(&(objectClass=groupOfUniqueNames)(uniqueMember=uid={{uid}},dc=example,dc=com)(ou=chemists))"
클라이언트 인증서 인증 활성화¶
Docker 이미지에서 클라이언트 인증서 인증을 사용하기 위해서는 사용하고자 하는 인증 환경 변수를 지정합니다. 각각의 변수는 DRIVERLESS_AI_로 시작해야 합니다. 다음 예제에서는 클라이언트 인증서 인증을 활성화하고 TLS 사용자 lookup 방법으로 LDAP_LOOKUP
을 사용합니다.
nvidia-docker run \
--pid=host \
--rm \
--shm-size=256m \
-p 12345:12345 \
-u `id -u`:`id -g` \
-e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="file,s3,hdfs" \
-e DRIVERLESS_AI_ENABLE_HTTPS="true" \
-e DRIVERLESS_AI_SSL_KEY_FILE="/etc/pki/dai-server.key" \
-e DRIVERLESS_AI_SSL_CRT_FILE="/etc/pki/dai-server.crt" \
-e DRIVERLESS_AI_SSL_CA_FILE="/etc/pki/ca.crt" \
-e DRIVERLESS_AI_SSL_CLIENT_VERIFY_MODE="CERT_REQUIRED" \
-e DRIVERLESS_AI_SSL_CLIENT_KEY_FILE="/etc/pki/dai-self.key" \
-e DRIVERLESS_AI_SSL_CLIENT_CRT_FILE="/etc/pki/dai-self.cert" \
-e DRIVERLESS_AI_AUTHENTICATION_METHOD="tls_certificate" \
-e DRIVERLESS_AI_AUTH_TLS_SUBJECT_FIELD="CN" \
-e DRIVERLESS_AI_AUTH_TLS_CRL_FILE="/etc/pki/crl.pem" \
-e DRIVERLESS_AI_AUTH_TLS_FIELD_PARS_REGEXP="(?P<di>.*)" \
-e DRIVERLESS_AI_AUTH_TLS_USER_LOOKUP="LDAP_LOOKUP" \
-e DRIVERLESS_AI_LDAP_SERVER="ldap.forumsys.com" \
-e DRIVERLESS_AI_LDAP_BIND_DN="cn=read-only-admin,dc=example,dc=com" \
-e DRIVERLESS_AI_LDAP_BIND_PASSWORD="password" \
-e DRIVERLESS_AI_LDAP_SEARCH_BASE="dc=example,dc=com" \
-e DRIVERLESS_AI_LDAP_USER_NAME_ATTRIBUTE="uid" \
-e DRIVERLESS_AI_LDAP_SEARCH_FILTER="(&(objectClass=inetOrgPerson)(uid={{id}}))" \
-e DRIVERLESS_AI_AUTH_TLS_LDAP_AUTHORIZATION_SEARCH_BASE="dc=example,dc=com" \
-e DRIVERLESS_AI_AUTH_TLS_LDAP_AUTHORIZATION_LOOKUP_FILTER="(&(objectClass=groupOfUniqueNames)(uniqueMember=uid={{uid}},dc=example,dc=com)(ou=chemists))" \
-v `pwd`/data:/data \
-v `pwd`/log:/log \
-v `pwd`/license:/license \
-v `pwd`/tmp:/tmp \
h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx
Native 설치에는 DEB, RPM 및 TAR SH 설치가 포함됩니다. 다음 예제에서는 config.toml 파일의 편집을 통해 클라이언트 수료 인증을 활성화하고 TLS 사용자 조회 방법으로 LDAP_LOOKUP
을 사용하는 방법에 관해 설명합니다.
Driverless AI config.toml 파일을 내보내거나 ~/.bashrc에 추가합니다. 아래 예를 참조하십시오.
# DEB and RPM export DRIVERLESS_AI_CONFIG_FILE="/etc/dai/config.toml" # TAR SH export DRIVERLESS_AI_CONFIG_FILE="/path/to/your/unpacked/dai/directory/config.toml"
config.toml 파일을 열고 다음 인증 변수를 편집합니다. config.toml 파일은 Driverless AI 설치 후 etc/dai 폴더에서 사용이 가능합니다.
# https settings enable_https = true # https settings # Path to the SSL key file # ssl_key_file = "/etc/pki/dai-server.key" # https settings # Path to the SSL certificate file # ssl_crt_file = "/etc/pki/dai-server.crt" # https settings # Path to the Certification Authority certificate file. This certificate will be # used when to verify client certificate when client authentication is turned on. # If this is not set, clients are verified using default system certificates. # ssl_ca_file = "/etc/pki/ca.crt" # https settings # Sets the client verification mode. # CERT_NONE: Client does not need to provide the certificate and if it does any # verification errors are ignored. # CERT_OPTIONAL: Client does not need to provide the certificate and if it does # certificate is verified agains set up CA chains. # CERT_REQUIRED: Client needs to provide a certificate and certificate is # verified. # You'll need to set 'ssl_client_key_file' and 'ssl_client_crt_file' # When this mode is selected for Driverless to be able to verify # it's own callback requests. # ssl_client_verify_mode = "CERT_REQUIRED" # https settings # Path to the private key that Driverless will use to authenticate itself when # CERT_REQUIRED mode is set. # ssl_client_key_file = "/etc/pki/dai-self.key" # https settings # Path to the client certificate that Driverless will use to authenticate itself # when CERT_REQUIRED mode is set. # ssl_client_crt_file = "/etc/pki/dai-self.crt" # Enable client certificate authentication authentication_method = "tls_certificate" # Subject field that is used as a source for a username or other values that provide further validation auth_tls_subject_field = "CN" # Path to the CRL file that will be used to verify client certificate. auth_tls_crl_file = "/etc/pki/crl.pem" # Sets up the way how user identity would be obtained # REGEXP_ONLY: Will use 'auth_tls_subject_field' and 'auth_tls_field_parse_regexp' # to extract the username from the client certificate. # LDAP_LOOKUP: Will use LDAP server to lookup for the username. # 'ldap_server', 'ldap_use_ssl', 'ldap_tls_file', 'ldap_bind_dn', # 'ldap_bind_password' options are used to establish # the connection with the LDAP server. # 'auth_tls_subject_field' and 'auth_tls_field_parse_regexp' # options are used to parse the certificate. # 'ldap_search_base', 'ldap_search_filter', and # 'ldap_username_attribute' options are used to do the lookup. # 'ldap_search_filter' can be built dynamically using the named # capturing groups from the 'auth_tls_field_parse_regexp' for # substitution. # Example: # auth_tls_field_parse_regexp = "\w+ (?P<id>\d+)" # ldap_search_filter = "(&(objectClass=person)(id={{id}}))" auth_tls_user_lookup = "LDAP_LOOKUP" # Regular expression that is used to parse the subject field in order to # obtain the username or other values that provide further validation auth_tls_field_parse_regexp = "\w+ (?P<id>\d+)" # ldap server domain or ip ldap_server = "ldap.forumsys.com" # Complete DN of the LDAP bind user ldap_bind_dn = "cn=read-only-admin,dc=example,dc=com" # Password for the LDAP bind ldap_bind_password = "password" # the location in the DIT where the search will start ldap_search_base = "dc=example,dc=com" # specify key to find user name ldap_user_name_attribute = "uid" # A string that describes what you are searching for. You can use Python # substitution to have this constructed dynamically. # (only {{DAI_USERNAME}} is supported) ldap_search_filter = "(&(objectClass=inetOrgPerson)(uid={{id}}))" # Base DN where to start the Authorization lookup. Used when # 'auth_tls_ldap_authorization_lookup_filter' is set. auth_tls_ldap_authorization_search_base="dc=example,dc=com" # Sets optional additional lookup filter that is performed after the # user is found. This can be used for example to check whether the is member of # particular group. # Filter can be built dynamically from the attributes returned by the lookup. # Authorization fails when search does not return any entry. If one ore more # entries are returned authorization succeeds. # Example: # auth_tls_field_parse_regexp = "\w+ (?P<id>\d+)" # ldap_search_filter = "(&(objectClass=person)(id={{id}}))" # auth_tls_ldap_authorization_lookup_filter = "(&(objectClass=group)(member=uid={{uid}},dc=example,dc=com))" # If this option is empty no additional lookup is done and just a successful user # lookup is enough to authorize the user. # auth_tls_ldap_authorization_lookup_filter = "(&(objectClass=groupOfUniqueNames)(uniqueMember=uid={{uid}},dc=example,dc=com)(ou=chemists))"
Driverless AI 시작(또는 재시작).