GKE Identity Service の証明書をフォーマットする

このドキュメントでは、GKE Identity Service の構成時に証明書をフォーマットする方法について説明します。このガイダンスは、サービスを使用する際の ID プロバイダ証明書に関する問題の回避とトラブルシューティングに役立ちます。

概要

GKE Identity Service は、OIDC や LDAP などの ID プロバイダを使用して GKE クラスタにログインできる認証サービスです。TLS 接続を確立しながら、GKE Identity Service はプロバイダのサーバー証明書を検証し、プロバイダの証明書の issuer が構成済みの認証局(CA)証明書の 1 つかどうかを確認します。

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 に 1 行で含めます。これは、ldaps 接続と startTLS 接続に対してのみ指定する必要があります。

OIDC の例

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

CERTIFICATE_AUTHORITY_DATA には、ID プロバイダ用に base64 でエンコードされた PEM 形式の証明書の文字列が含まれています。結果の文字列は certificateAuthorityData に 1 行で含めます。

base64 でエンコードされた証明書の値

RFC 4864 で定義されている標準 base64 エンコードでは、文字 AZaz09+/ を使用します。データは = を使用してパディングされます。

GKE Identity Service の CA 証明書をエンコードする

SSL 証明書には、DER、PEM、PFX などの形式があります。PFX ファイルは通常、パスワードで暗号化されます。

GKE Identity Service を ID プロバイダで構成する場合、証明書はパスワードで保護しないでください。これは、復号のパスワードの指定に使用できるワークフローがないためです。そのため、任意の Linux または Unix システムで openssl コマンドライン ツールを使用して、証明書を他の形式から PEM でエンコードされたファイルに変換してください。証明書が複数ある場合は、証明書を連結して 1 つの 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. PEM ファイルを RFC 4864 に従って base64 でエンコードします。次の base64 でエンコードされた PEM ファイルの例のように、出力が改行のない長い単一文字列であることを確認します。
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. この証明書の値を ClientConfig の certificateAuthorityData フィールドに指定します。

中間証明書の CA 証明書

中間証明書は、エンド エンティティ証明書とルート証明書の間の「信頼チェーン」の役割を果たします。この証明書の値は、ClientConfig で使用する場合は base64 でエンコードされた文字列としてフォーマットする必要があります。1 つの文字列を作成するには、完全な PEM でエンコードされた証明書を 1 つの文字列に連結し、base64 エンコードします。

ルート証明書から始まる連続した信頼チェーンの例を次に示します。

ServerCert -> IntermediateCA -> DeptCA -> RootCA

この例では、RootCA によって発行された DeptCA が発行する IntermediateCA によって ServerCert が発行されます。

部分的な信頼チェーンは 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 ファイルを 1 つのファイルに連結します。出力は次のようになります。

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. 連結されたファイルを base64 でエンコードします。ファイルに base64 でエンコードされたテキストが 1 行含まれていることを確認します。

  4. この証明書の値を ClientConfig の certificateAuthorityData フィールドに指定します。