SSL(Secure Sockets Layer)을 사용하여 LDAP(Lightweight Directory Access Protocol) 연결의 보안을 설정할 수 있습니다.
클러스터에서 LDAPS(LDAP over SSL)를 자동으로 구성할 수 없는 경우에는 다음 단계를 완료하여 LDAPS 연결을 수동으로 구성하십시오.
LDAPS 디렉토리와의 연결을 위해 IBM Cloud Private 클러스터를 준비해야 합니다.
시작하기 전에 LDAPS 디렉토리를 설정하는 데 사용한 공용 또는 개인용 SSL 인증서를 가져와야 합니다.
LDAP 서버의 SSL 인증서가 있는 경우 SSL 인증서 인코딩을 진행하십시오.
LDAP 서버의 SSL 인증서가 없는 경우 다음 단계를 완료하여 SSL 인증서를 검색하십시오.
참고: 이러한 명령을 실행하려면 ldapsearch 프로그램이 필요합니다. Ubuntu에서는 apt install ldap-utils를 실행하고 Red Hat Enterprise Linux(RHEL)에서는 yum install openldap-clients를 실행하여 이 프로그램을 설치할 수 있습니다.
/etc/openldap/cacerts 디렉토리에 SSL 인증서가 없는지 확인하십시오.
다음 ldapsearch 명령을 실행하여 인증서 이름을 검색하십시오.
ldapsearch -H <LDAP server URL> -d 1 -b <searchbase> -D "" -s base "(<filter>)"
여기서,
ldaps://<LDAP server domain name or IP address>:<port>(objectClass=*)입니다.다음은 예제 명령 및 출력입니다.
$ ldapsearch -H ldaps://corp.example.com:636 -d 1 -b o=example.com -D "" -s base "(objectclass=*)"
ldap_url_parse_ext(ldaps://corp.example.com:636)
ldap_create
ldap_url_parse_ext(ldaps://corp.example.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP corp.example.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 9.17.186.253:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect:
connect success
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
인증서 정보는 출력의 TLS: certificate [CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user.. 섹션에 있습니다.
웹 브라우저에서 인증서를 찾아서 PEM 형식의 파일로 내보낸 후 해당 PEM 파일을 .crt 확장자로 저장하십시오.
참고: 복수의 인증서를 보유한 경우 각각의 인증서를 PEM 형식의 파일로 내보낸 후 해당 PEM 파일을 .crt 확장자로 저장하십시오.
.crt 파일을 IBM Cloud Private 클러스터의 마스터 노드로 복사하십시오.단일 LDAPS 연결을 구성하는 경우, SSL 인증서 인코딩 절의 단계를 완료하십시오.
인증서를 base64로 인코딩하려면 다음 단계를 완료하십시오.
openssl x509 -in <cert>.cer -outform PEM -out <convertedCert>.pem
LDAP 서버에서 체인 인증서(루트 CA 및 중간 인증서)를 사용하는 경우, 각 인증서를 PEM 형식으로 변환하십시오. 그런 다음 한 파일에 결합하십시오. 다음 명령을 실행하여 변환된 인증서를 결합하십시오. cat <convertedFirstCert.pem> <convertedSecondCert.pem> ..<converted_n_Cert.pem> > <convertedCombinedCert>.pem
인증서를 base64로 인코딩하십시오.
cat <LDAPS SSL certificate name>.pem | base64 -w 0
출력은 다음 코드와 유사합니다.
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdDRENDQS9DZ
0F3SUJBZ0lRS3k1dTZ0bDFObXdVaW03Ym8zeU1CekFOQmdrcWhraUc5
...
lDOHg0OU9oZ1E9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KDQo=
그런 다음 클러스터 준비를 계속하십시오.
다중 LDAPS 연결을 구성하는 경우, 먼저 platform-auth-ldaps-ca-cert의 "데이터" > "인증서" 절에 인증서가 있는지 확인하십시오. 인증서가 있으면 다음 절의 단계를 완료하십시오.
인증서가 없으면 SSL 인증서 인코딩의 단계를 완료하십시오.
관리 콘솔을 사용하거나 명령행 인터페이스(CLI)를 사용하여 인증서를 검색할 수 있습니다.
관리 콘솔을 사용 중인 경우 다음 단계를 따르십시오.
platform-auth-ldaps-ca-cert를 찾고 조치 > 편집을 클릭하십시오. 시크릿 편집 창이 표시됩니다."데이터" > "인증서" 절에서 base64 인코딩 인증서 값을 복사하십시오.
“data”: {
“certificate”: “LS0tLS1...ASDFASDo=”
},
기존 인코딩 인증서를 변환하고 파일에 저장하십시오.
echo "<copied_cert_value>" | base64 --decode > existing_cert.pem
CLI를 사용 중인 경우 다음 단계를 따르십시오.
kubectl이 필요합니다. kubectl 설치에 대한 자세한 정보는 Kubernetes CLI(kubectl) 설치를 참조하십시오. kubectl -n kube-system get secret platform-auth-ldaps-ca-cert -o “jsonpath={.data[‘certificate’]}” | base64 --decode > existing_cert.pem
다음으로 SSL 인증서 인코딩을 진행하십시오.
인증서를 base64로 인코딩하려면 다음 단계를 완료하십시오.
새 인증서를 PEM 형식으로 변환하십시오.
openssl x509 -in <cert>.cer -outform PEM -out <convertedCert>.pem
LDAP 서버에서 체인 인증서(루트 CA 및 중간 인증서)를 사용하는 경우, 각 인증서를 PEM 형식으로 변환하십시오. 그런 다음 한 파일에 결합하십시오. 다음 명령을 실행하여 변환된 인증서를 결합하십시오.
cat <convertedFirstCert.pem> <convertedSecondCert.pem> ..<converted_n_Cert.pem> > <convertedCombinedCert>.pem
기존 인증서를 새 인증서(체인 인증서를 사용하는 경우, 결합된 인증서)에 추가하십시오.
cat existing_cert.pem <new_cert.pem or convertedCombinedCert.pem> > final_combined_cert.pem
인증서를 base64로 인코딩하십시오.
cat <LDAPS SSL certificate name>.pem | base64 -w 0
출력은 다음 코드와 유사합니다.
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdDRENDQS9DZ
0F3SUJBZ0lRS3k1dTZ0bDFObXdVaW03Ym8zeU1CekFOQmdrcWhraUc5
...
lDOHg0OU9oZ1E9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KDQo=
다음으로 클러스터 준비 절의 단계를 완료하십시오.
관리 콘솔을 사용하거나 CLI를 사용하여 클러스터를 준비할 수 있습니다.
관리 콘솔을 사용 중인 경우 다음 단계를 따르십시오.
platform-auth-ldaps-ca-cert를 찾고 조치 > 편집을 클릭하십시오. 시크릿 편집 창이 표시됩니다.base64 인증서를 다음 섹션에 붙여넣으십시오.
"data": {
"certificate": ""
},
업데이트된 섹션은 다음 텍스트와 유사합니다.
"data": {
"certificate": "LS0tLS1<very_long_base64_string>ASDFASDo="
},
auth-idp를 찾고 조치 > 편집을 클릭하십시오. DaemonSet 편집 창이 표시됩니다.auth-idp 팟(Pod)을 다시 로드하는 것입니다.일 분에서 이 분 정도 기다린 다음 인증서가 팟(Pod)에 마운트되었는지 확인하십시오.
auth-idp 팟(Pod)을 가져오십시오.
kubectl -n kube-system get pods | grep auth-idp
인증서가 팟(Pod)에 마운트되었는지 확인하십시오.
kubectl -n kube-system exec -it auth-idp-<pod-id> -c platform-auth-service cat /opt/ibm/ldaps/ldaps-ca.crt
CLI를 사용 중인 경우 다음 단계를 따르십시오.
kubectl이 필요합니다. kubectl 설치에 대한 자세한 정보는 Kubernetes CLI(kubectl) 설치를 참조하십시오.LDAPS CA 인증서 시크릿을 파일에 복사하십시오.
kubectl get secret platform-auth-ldaps-ca-cert -o yaml -n kube-system > platform-auth-ldaps-ca-cert-secret.yaml
base64 인증서를 복사하여 platform-auth-ldaps-ca-cert-secret.yaml 파일에 붙여넣으십시오.
보안 서비스 DaemonSet YAML 파일을 가져오십시오.
kubectl -n kube-system get ds auth-idp -o yaml > auth-idp.yaml
변경사항을 적용하십시오.
kubectl apply -f platform-auth-ldaps-ca-cert-secret.yaml
kubectl apply -f auth-idp.yaml
다음으로 LDAP 디렉토리에 연결 절의 단계를 완료하십시오.