클라이언트 인증서 인증 예제

본 섹션에서는 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_filessl_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_fieldauth_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