証明書をリクエスト

このページでは、Certificate Authority Service を使用して証明書をリクエストする手順について説明します。

Google Distributed Cloud(GDC)のエアギャップ内で信頼を確立し、通信を保護するには、Certificate Authority Service から ACME 対応または ACME 非対応の証明書をリクエストします。

始める前に

証明書をリクエストする前に、必要な権限と kubeconfig ファイルがあることを確認してください。

必要な権限

証明書をリクエストするために必要な権限を取得するには、組織の IAM 管理者に CA Service 証明書リクエスト元(certificate-authority-service-certificate-requester)ロールの付与を依頼してください。ロールの詳細については、ロールの定義をご覧ください。

kubeconfig ファイルを取得する

Management API サーバーに対してコマンドを実行するには、次の操作を行います。

  1. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  2. これらの手順では、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 を使用して証明書をリクエストする

  1. 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 サブジェクトの未加工データとして指定します。
  2. カスタム リソースを Distributed Cloud インスタンスに適用します。

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    MANAGEMENT_API_SERVER_KUBECONFIG は、Management API サーバーの kubeconfig ファイルへのパスに置き換えます。

  3. 証明書リクエストの準備状況を確認します。

    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"
    }
    
  4. 証明書の 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
    

自動生成された鍵を使用して証明書をリクエストする

  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 サブジェクトの未加工データとして指定します。
  2. カスタム リソースを Distributed Cloud インスタンスに適用します。

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. 証明書リクエストの準備状況を確認します。

    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"
    }
    
  4. 証明書の 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