GKE Identity Service 인증서 형식 지정

이 문서에서는 GKE Identity Service를 구성할 때 인증서 형식을 지정하는 방법을 설명합니다. 이 안내에 따라 서비스를 사용할 때 ID 공급업체 인증서 관련 문제를 방지하고 문제 해결할 수 있습니다.

개요

GKE Identity Service는 OIDC 및 LDAP와 같은 ID 공급업체를 통해 GKE 클러스터에 로그인할 수 있게 해주는 인증 서비스입니다. TLS 연결을 설정할 때 GKE Identity Service는 공급업체의 서버 인증서 유효성을 검사하고 제공업체 인증서의 issuer가 구성된 인증 기관(CA) 인증서 중 하나인지 확인합니다.

ClientConfig의 certificateAuthorityData 문자열

공급업체 ID를 확인하는 데 사용되는 CA 인증서는 다음 예시에 표시된 것처럼 ClientConfig의 certificateAuthorityData 필드에 구성됩니다.

LDAP 예시

...
ldap:
  host: HOST_NAME
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
  connectionType: CONNECTION_TYPE
...

여기서 CERTIFICATE_AUTHORITY_DATA에는 LDAP 서버에 대해 base64로 인코딩된 PEM 형식의 CA 인증서가 포함됩니다. certificateAuthorityData에 결과 문자열을 단일 줄로 포함합니다. ldapsstartTLS 연결에만 제공되어야 합니다.

OIDC 예시

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

여기에서 CERTIFICATE_AUTHORITY_DATA에는 ID 공급업체에 대해 base64로 인코딩된 PEM 형식의 인증서 문자열이 포함됩니다. certificateAuthorityData에 결과 문자열을 단일 줄로 포함합니다.

Base64로 인코딩된 인증서 값

RFC 4864에 정의된 표준 base64 인코딩에는 A~Z, a~z, 0~9, +/ 문자가 사용됩니다. 데이터에는 =을 사용한 패딩이 적용됩니다.

GKE Identity Service CA 인증서 인코딩

SSL 인증서에는 DER, PEM, PFX와 같은 형식이 사용됩니다. PFX 파일은 일반적으로 비밀번호를 사용해서 암호화됩니다.

ID 공급업체로 GKE Identity Service를 구성할 때는 비밀번호로 인증서를 보호하면 안 됩니다. 복호화를 위해 비밀번호를 지정할 수 있는 워크플로가 없기 때문입니다. 따라서 Linux 또는 Unix 시스템에서 openssl 명령줄 도구를 사용해서 다른 형식의 인증서를 PEM 인코딩 파일로 변환해야 합니다. 인증서가 여러 개 있으면 인증서를 연결하고 이를 단일 PEM 파일로 가져옵니다.

PEM 형식 예시

다음은 PEM 인코딩 인증서의 예시입니다.

-----BEGIN CERTIFICATE-----
MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v
MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x
ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV
BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv
bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB
OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP
xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P
+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB
BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen
v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS
pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND
-----END CERTIFICATE-----

예시에서 다음 세부정보를 확인하세요.

  • 인증서 구분 기호는 BEGIN CERTIFICATE로 시작하고 END CERTIFICATE로 끝납니다.
  • 구분 기호에 사용되는 하이픈 수는 고정되어 있습니다.
  • 인증서 값에는 줄바꿈(64자 이후)이 포함된 표준 base64(RFC 4864) 인코딩이 사용됩니다.
  • 줄바꿈(\n)은 표시되지 않습니다. 줄바꿈 문자를 이스케이프하지 마세요.

ClientConfig에 인증서 값 지정

ClientConfig에 인증서 값을 지정하려면 다음을 수행합니다.

  1. CA 인증서의 PEM 인코딩 형식을 확인합니다.
  2. RFC 4864별로 PEM 파일을 Base64로 인코딩합니다. base64로 인코딩된 PEM 파일의 다음 예시와 같이 줄바꿈 없이 출력이 긴 단일 문자열인지 확인합니다.
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. ClientConfig에서 certificateAuthorityData 필드에 이 인증서 값을 제공합니다.

중간 인증서의 CA 인증서

중간 인증서는 종단 개체 인증서와 루트 인증서 사이의 "신뢰 체인" 역할을 수행합니다. 이 인증서 값은 ClientConfig에서 사용될 때 base64 인코딩 문자열로 형식이 지정됩니다. 단일 문자열을 만들려면 전체 PEM 인코딩 인증서를 단일 문자열에 연결합니다. 그러면 base64가 이를 인코딩합니다.

다음은 루트 인증서로 시작하는 연속적인 신뢰 체인의 예시입니다.

ServerCert -> IntermediateCA -> DeptCA -> RootCA

이 예시에서 ServerCertDeptCA에 의해 발급되는 IntermediateCA에 의해 발급되며, 이는 다시 RootCA에 의해 발급됩니다.

GKE Identity Service에서는 부분 신뢰 체인이 지원됩니다. 즉, 체인에 다음과 같은 일부 인증서만 제공할 수 있습니다.

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

GKE Identity Service가 부분 체인으로만 구성된 경우 부분 체인의 인증서를 서버에서 제공한 ID와 일치시키려고 시도하여 서버의 ID를 확인합니다.

Google Distributed Cloud 1.28.200 이전 버전과 같은 이전 버전의 GKE Identity Service는 서버를 확인하기 위해 루트 인증서에서 시작하는 연속적인 신뢰 체인이 필요합니다. 이전 버전의 GKE Identity Service에서 지원하는 부분 체인의 예시:

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

인증서 확인 문제가 발생하고 사용 중인 GKE Identity Service 버전을 모르는 경우 루트 인증서가 없으면 이것이 문제의 원인인지 확인해 보기 위해 신뢰 체인에 루트 인증서를 추가해 봅니다.

ClientConfig에서 인증서 신뢰 체인 지정

ClientConfig에서 인증서 신뢰 체인을 지정하려면 다음을 수행합니다.

  1. 인증서 체인에 포함할 CA 인증서에 대한 PEM 인코딩 형식을 확인합니다.
  2. 루트 인증서가 파일 끝에 오도록 PEM 파일을 단일 파일에 연결합니다. 출력은 다음과 같습니다.

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. 연결된 파일을 Base64로 인코딩합니다. 파일에 base64로 인코딩된 텍스트의 단일 줄이 포함되는지 확인합니다.

  4. ClientConfig에서 certificateAuthorityData 필드에 이 인증서 값을 제공합니다.