証明書をリクエスト

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

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

始める前に

証明書をリクエストするために必要な権限を取得するには、組織の IAM 管理者に Certificate Authority Service 管理者(certificate-authority-service-admin)ロールの付与を依頼してください。

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: ユーザー プロジェクトが存在する Namespace の名前。

ACME モードが無効になっている CA を使用して証明書をリクエストする

ACME モードを無効にして証明書リクエストを作成するには、CertificateRequest リソースを作成して、Distributed Cloud のエアギャップ インスタンスに適用する必要があります。これには次の 2 つの方法があります。

  • CertificateResource を作成し、リソースに CSR を含めます。
  • GDC 自動生成の秘密鍵を使用して CertificateResource を作成し、証明書構成をカスタム値として指定します。

CSR を使用して証明書をリクエストする

  1. CertificateRequest リソースを作成し、cert-request.yaml という名前の YAML ファイルとして保存します。秘密鍵を使用して証明書署名リクエスト(CSR)を作成し、リソースに追加します。

    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
      signedCertificateSecret: SECRET_NAME
    

    次の変数を置き換えます。

    変数 説明
    CERT_REQ_NAME 証明書の名前。
    USER_PROJECT_NAMESPACE ユーザー プロジェクトが存在する Namespace の名前。
    CA_NAME CA の名前(ルート CA またはサブ CA)。
    CSR CA を使用して署名する証明書署名リクエスト。
    SECRET_NAME 秘密鍵と署名付き CA 証明書を保持する Kubernetes Secret の名前。
  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 ファイルとして保存します。証明書に選択した値を入力します。

    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
      signedCertificateSecret: SECRET_NAME
    

    COMMON_NAME は、証明書の共通名に置き換えます。

    次の省略可能な変数を置き換えます。CertificateRequest リソースには、これらの値の少なくとも 1 つを含める必要があります。

    変数 説明
    ORGANIZATION 証明書で使用される組織。
    LOCALITY 証明書の地域。
    STATE 証明書で使用する都道府県。
    COUNTRY 証明書の国。
    DNS_NAMES DNSNames は、証明書に設定する dNSName subjectAltNames のリストです。
    IP_ADDRESS 証明書に設定する ipAddress subjectAltNames のリスト。
    RFC822_NAMES 証明書に設定する rfc822Name subjectAltNames のリスト。
    URIS 証明書に設定する uniformResourceIdentifier subjectAltNames のリスト。
  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