証明書を取り消す

このドキュメントでは、Certificate Authority Service を使用して証明書を取り消す方法について説明します。証明書を失効させると、有効期限が切れる前に無効になり、認証に使用できなくなります。秘密鍵が漏洩した場合、証明書が新しい証明書に置き換えられた場合、証明書が不要になった場合(証明書が発行されたサービスが廃止された場合など)に、証明書を取り消すことがあります。

このドキュメントは、プロジェクト内で証明書のライフサイクルを管理するアプリケーション デベロッパーやデータ サイエンティストなど、アプリケーション オペレーター グループ内のユーザーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。

証明書の失効について

CA Service は、証明書失効リスト(CRL)を公開することで、証明書の取り消しをサポートしています。CRL は、取り消されて信頼されなくなった証明書のシリアル番号のリストです。デフォルトでは、新しい CRL は 15 分ごとに公開されます。また、証明書の失効が成功すると、新しい CRL の生成が自動的にトリガーされます。

CA Service によって発行される証明書には、CRL 配布ポイント(CDP)という拡張機能が含まれています。この拡張機能には、その証明書の CRL を見つけてダウンロードできる URL が含まれています。クライアント アプリケーションはこの URL を使用して CRL を取得し、証明書のシリアル番号が存在するかどうかを確認します。シリアル番号がリストに記載されている場合、証明書は無効とみなされ、接続は拒否される必要があります。

始める前に

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

必要な権限

証明書を取り消すために必要な権限を取得するには、組織の IAM 管理者に CA Service オペレーション マネージャー(certificate-authority-service-operation-manager)ロールの付与を依頼してください。ロールの詳細については、ロールの定義をご覧ください。

kubeconfig ファイルを取得する

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

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

  2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER_KUBECONFIG を置き換えます。

証明書を取り消す

証明書を失効させる方法は、発行元の認証局(CA)で ACME モードが有効になっているかどうかによって異なります。証明書を取り消すと、証明書の有効期限が切れるまで、その CA の今後のすべての CRL にシリアル番号が表示されます。

ACME 対応 CA から証明書を取り消す

ACME 対応の各 CA は、準備が整うと、ステータスに一意の ACME サーバー URL を公開します。ACME 対応の CA から証明書を取り消すには、ACME クライアント ツールを使用して、ACME プロトコルでこの URL とやり取りする必要があります。

ACME 対応の CA から証明書を取り消します。

  1. CA の ACME サーバー URL を取得します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
      get certificateauthorities CA_NAME \
      -n USER_PROJECT_NAMESPACE \
      -ojson | jq -r '.status.acme.uri'
    

    次のように置き換えます。

    • MANAGEMENT_API_SERVER_KUBECONFIG: Management API サーバーの kubeconfig ファイルのパス。
    • CA_NAME: ACME 対応 CA(ルートまたは下位)の名前。
    • USER_PROJECT_NAMESPACE: プロジェクトの Namespace。
  2. 取得した URL を任意の ACME クライアント ツールで使用して、取り消しリクエストを発行します。詳細については、特定の ACME クライアントのドキュメントをご覧ください。

ACME が無効になっている CA から証明書を取り消す

CA で ACME モードが無効になっている場合は、RevokeCertificateRequest カスタム リソースを作成して適用し、証明書を取り消します。

  1. RevokeCertificateRequest カスタム リソース YAML ファイル(revoke-cert-request.yaml など)を作成します。

    apiVersion: pki.security.gdc.goog/v1
    kind: RevokeCertificateRequest
    metadata:
      name: REVOKE_CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateRequestRef:
        name: CERT_REQ_NAME
        namespace: USER_PROJECT_NAMESPACE
      reason: REASON
    

    次のように置き換えます。

    • REVOKE_CERT_REQ_NAME: 取り消しリクエストのユーザー定義名。
    • USER_PROJECT_NAMESPACE: プロジェクトの Namespace。
    • CERT_REQ_NAME: 取り消す証明書に関連付けられている CertificateRequest リソースの名前。
    • REASON: 取り消しの理由。有効な理由は、UnspecifiedKeyCompromiseCaCompromiseAffiliationChangedSupersededCessationOfOperationCertificateHoldRemoveFromCrlPrivilegeWithdrawnAaCompromise です。
  2. カスタム リソースを適用します。

    kubectl apply -f revoke-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 revokecertificaterequest.pki.security.gdc.goog/REVOKE_CERT_REQ_NAME \
      -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    次のように置き換えます。

    • MANAGEMENT_API_SERVER_KUBECONFIG: Management API サーバーの kubeconfig ファイルのパス。
    • USER_PROJECT_NAMESPACE: プロジェクトの Namespace。
    • REVOKE_CERT_REQ_NAME: 取り消しリクエストの名前。

    出力は次のようになります。

    {
      "lastTransitionTime": "2025-08-19T23:20:22Z",
      "message": "RevokeCertificateRequest reconciled",
      "observedGeneration": 1,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

    プロセスが完了し、証明書のシリアル番号が次に生成される CRL に追加されます。

取り消された証明書リクエストを一覧表示する

プロジェクト Namespace 内のすべての RevokeCertificateRequest リソースを一覧表示します。

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
  -n USER_PROJECT_NAMESPACE \
  get revokecertificaterequests

次のように置き換えます。

  • MANAGEMENT_API_SERVER_KUBECONFIG: Management API サーバーの kubeconfig ファイルのパス。
  • USER_PROJECT_NAMESPACE: プロジェクトの Namespace。

出力は次のようになります。

NAMESPACE    NAME                      READY   AGE
foo          revoke-cert-req           True    30s