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 エンコードでは、文字 A
~Z
、a
~z
、0
~9
、+
、/
を使用します。データは =
を使用してパディングされます。
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 で証明書の値を指定するには、次の操作を行います。
- CA 証明書の PEM エンコード形式を特定します。
- PEM ファイルを RFC 4864 に従って base64 でエンコードします。次の base64 でエンコードされた PEM ファイルの例のように、出力が改行のない長い単一文字列であることを確認します。
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
- この証明書の値を 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 で証明書信頼チェーンを指定するには、次の操作を行います。
- 証明書チェーンに含める CA 証明書の PEM エンコード形式を特定します。
ルート証明書がファイルの最後に配置されるように、PEM ファイルを 1 つのファイルに連結します。出力は次のようになります。
-----BEGIN CERTIFICATE----- IntermediateCA -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- DeptCA -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- RootCA certificate -----END CERTIFICATE-----
連結されたファイルを base64 でエンコードします。ファイルに base64 でエンコードされたテキストが 1 行含まれていることを確認します。
この証明書の値を ClientConfig の
certificateAuthorityData
フィールドに指定します。