このページでは、Certificate Authority Service を使用して証明書をリクエストする手順について説明します。
Google Distributed Cloud(GDC)のエアギャップ内で信頼を確立し、通信を保護するには、Certificate Authority Service から ACME 対応または ACME 非対応の証明書をリクエストします。
始める前に
証明書をリクエストする前に、必要な権限と kubeconfig ファイルがあることを確認してください。
必要な権限
証明書をリクエストするために必要な権限を取得するには、組織の IAM 管理者に CA Service 証明書リクエスト元(certificate-authority-service-certificate-requester)ロールの付与を依頼してください。ロールの詳細については、ロールの定義をご覧ください。
kubeconfig ファイルを取得する
Management API サーバーに対してコマンドを実行するには、次の操作を行います。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して
MANAGEMENT_API_SERVER_KUBECONFIGを置き換えます。
ACME モードが有効になっている CA を使用して証明書をリクエストする
認証局が ACME モードでホストされている場合、準備が完了すると、ステータスに ACME サーバー URL が出力されます。
Distributed Cloud 環境から CA ACME サーバーの URL を収集します。
kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'
次のように置き換えます。
CA_NAME: CA の名前。ルート CA またはサブ CA を指定できます。USER_PROJECT_NAMESPACE: ユーザー プロジェクトが存在する名前空間の名前。
ACME モードが無効になっている CA を使用して証明書をリクエストする
ACME モードを無効にして証明書リクエストを作成するには、CertificateRequest リソースを作成して、Distributed Cloud のエアギャップ インスタンスに適用する必要があります。これには次の 2 つの方法があります。
CertificateResourceを作成し、リソースに CSR を含めます。- GDC 自動生成の秘密鍵を使用して
CertificateResourceを作成し、証明書構成をカスタム値として指定します。
CSR を使用して証明書をリクエストする
CertificateRequestリソースを作成し、cert-request.yamlという名前の YAML ファイルとして保存します。秘密鍵を使用して証明書署名リクエスト(CSR)を作成し、リソースに追加します。必要に応じて、テンプレートの名前を
certificateTemplateフィールドに入力して、事前構成された X.509 パラメータのセットで証明書を発行できます。apiVersion: pki.security.gdc.goog/v1 kind: CertificateRequest metadata: name: CERT_REQ_NAME namespace: USER_PROJECT_NAMESPACE spec: certificateAuthorityRef: name: CA_NAME namespace: USER_PROJECT_NAMESPACE csr: CSR certificateTemplate: TEMPLATE_NAME signedCertificateSecret: SECRET_NAME notBefore: VALIDITY_START_TIME notAfter: VALIDITY_END_TIME subjectOverride: SUBJECT_OVERRIDE次の変数を置き換えます。
変数 説明 CERT_REQ_NAME 証明書の名前。 USER_PROJECT_NAMESPACE ユーザー プロジェクトが存在する Namespace の名前。 CA_NAME CA の名前(ルート CA またはサブ CA)。 CSR CA を使用して署名する証明書署名リクエスト。 SECRET_NAME 秘密鍵と署名付き CA 証明書を保持する Kubernetes Secret の名前。 次の省略可能な変数を置き換えます。
変数 説明 TEMPLATE_NAME 使用する事前定義済み証明書テンプレートの名前。使用可能なテンプレートのリストと競合に関する詳細については、事前定義された証明書テンプレートをご覧ください。 VALIDITY_START_TIME 証明書が有効とみなされる時間。この値は、 YYYY-MM-DDTHH:MM:SSZ形式(例:2025-10-19T21:45:30Z)にする必要があります。設定しない場合、証明書は発行後すぐに有効になります。VALIDITY_END_TIME 証明書の有効期限が切れる時刻。この値は、 YYYY-MM-DDTHH:MM:SSZ形式(例:2026-01-17T18:25:40Z)にする必要があります。設定しない場合、証明書は開始時刻から 90 日後に期限切れになります。SUBJECT_OVERRIDE 発行済み証明書で使用するカスタム サブジェクト。CSR のサブジェクト情報をオーバーライドします。この値を、ASN.1 DER エンコードされた X.509 サブジェクトの未加工データとして指定します。 カスタム リソースを Distributed Cloud インスタンスに適用します。
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGMANAGEMENT_API_SERVER_KUBECONFIGは、Management API サーバーの kubeconfig ファイルへのパスに置き換えます。証明書リクエストの準備状況を確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'出力は次のようになります。
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }証明書の Secret 名を取得します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'出力には、署名付き証明書を含む
SECRET_NAMEが表示されます。test-jwk-1
自動生成された鍵を使用して証明書をリクエストする
CertificateRequestリソースを作成し、cert-request.yamlという名前の YAML ファイルとして保存します。選択した証明書の値を入力します。必要に応じて、テンプレートの名前を
certificateTemplateフィールドに入力して、事前構成された X.509 パラメータのセットで証明書を発行できます。apiVersion: pki.security.gdc.goog/v1 kind: CertificateRequest metadata: name: CERT_REQ_NAME namespace: USER_PROJECT_NAMESPACE spec: certificateAuthorityRef: name: CA_NAME namespace: USER_PROJECT_NAMESPACE certificateConfig: subjectConfig: commonName: COMMON_NAME organization: ORGANIZATION locality: LOCALITY state: STATE country: COUNTRY dnsNames: - DNS_NAMES ipAddresses: - IP_ADDRESSES rfc822Names: - RFC822NAMES uris: - URIS certificateTemplate: TEMPLATE_NAME signedCertificateSecret: SECRET_NAME notBefore: VALIDITY_START_TIME notAfter: VALIDITY_END_TIME subjectOverride: SUBJECT_OVERRIDE次の変数を置き換えます。
変数 説明 CERT_REQ_NAME 証明書の名前。 USER_PROJECT_NAMESPACE ユーザー プロジェクトが存在する Namespace の名前。 CA_NAME CA の名前(ルート CA またはサブ CA)。 SECRET_NAME 秘密鍵と署名付き CA 証明書を保持する Kubernetes Secret の名前。 次の省略可能な変数を置き換えます。
CertificateRequestリソースのspec.certificateConfig.subjectConfigブロックのフィールドを 1 つ以上含める必要があります。変数 説明 COMMON_NAME 証明書の共通名。 ORGANIZATION 証明書で使用される組織。 LOCALITY 証明書の地域。 STATE 証明書で使用する都道府県。 COUNTRY 証明書の国。 DNS_NAMES DNSNamesは、証明書に設定するdNSName subjectAltNamesのリストです。IP_ADDRESS 証明書に設定する ipAddress subjectAltNamesのリスト。RFC822_NAMES 証明書に設定する rfc822Name subjectAltNamesのリスト。URIS 証明書に設定する uniformResourceIdentifier subjectAltNamesのリスト。TEMPLATE_NAME 使用する事前定義済み証明書テンプレートの名前。使用可能なテンプレートのリストと競合に関する詳細については、事前定義された証明書テンプレートをご覧ください。 VALIDITY_START_TIME 証明書が有効とみなされる時間。この値は、 YYYY-MM-DDTHH:MM:SSZ形式(例:2025-10-19T21:45:30Z)にする必要があります。設定しない場合、証明書は発行後すぐに有効になります。VALIDITY_END_TIME 証明書の有効期限が切れる時刻。この値は、 YYYY-MM-DDTHH:MM:SSZ形式(例:2026-01-17T18:25:40Z)にする必要があります。設定しない場合、証明書は開始時刻から 90 日後に期限切れになります。SUBJECT_OVERRIDE 発行済み証明書で使用するカスタム サブジェクト。CSR のサブジェクト情報をオーバーライドします。この値を、ASN.1 DER エンコードされた X.509 サブジェクトの未加工データとして指定します。 カスタム リソースを Distributed Cloud インスタンスに適用します。
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG証明書リクエストの準備状況を確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'出力は次のようになります。
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }証明書の Secret 名を取得します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'出力には、署名付き証明書を含む
SECRET_NAMEが表示されます。test-jwk-1
証明書リクエストを一覧表示する
certificaterequests パラメータを使用して、すべての CertificateRequest リソースを一覧表示します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests
出力は次のようになります。
NAMESPACE NAME READY AGE
foo cert-req True 30s