このドキュメントでは、Certificate Authority Service を使用して証明書を取り消す方法について説明します。証明書を取り消すと、有効期限が切れる前に無効になり、認証に使用できなくなります。秘密鍵が漏洩した場合、証明書が新しい証明書に置き換えられた場合、証明書が不要になった場合(証明書が発行されたサービスが廃止された場合など)に、証明書を取り消すことがあります。
このドキュメントは、プロジェクト内で証明書のライフサイクルを管理するアプリケーション デベロッパーやデータ サイエンティストなど、アプリケーション オペレーター グループ内のユーザーを対象としています。詳細については、GDC エアギャップ環境のユーザー向けドキュメントをご覧ください。
証明書の取り消しについて
CA Service は、証明書失効リスト(CRL)を公開することで、証明書の取り消しをサポートしています。CRL は、取り消されて信頼されなくなった証明書のシリアル番号のリストです。デフォルトでは、新しい CRL は 15 分ごとに公開されます。また、証明書の失効が成功すると、新しい CRL の生成が自動的にトリガーされます。
CA Service によって発行される証明書には、CRL 配布ポイント(CDP)という拡張機能が含まれています。この拡張機能には、その証明書の CRL を見つけてダウンロードできる URL が含まれています。クライアント アプリケーションは、この URL を使用して CRL を取得し、証明書のシリアル番号が存在するかどうかを確認します。シリアル番号がリストに表示された場合、証明書は無効とみなされ、接続は拒否される必要があります。
始める前に
証明書を取り消す前に、必要な権限をリクエストして環境を準備する必要があります。
IAM ロールをリクエストする
証明書を取り消して取り消しリクエストを表示するには、組織の IAM 管理者に連絡して、認証局のプロジェクト Namespace で CA Service オペレーション マネージャー(certificate-authority-service-operation-manager)ロールをリクエストしてください。
環境を準備する
kubeconfig ファイルを生成して、
kubectlアクセスを構成します。
証明書を取り消す
証明書を失効させる方法は、発行元の認証局(CA)で ACME モードが有効になっているかどうかによって異なります。証明書を取り消すと、そのシリアル番号は、証明書の有効期限が切れるまで、その CA の今後のすべての CRL に表示されます。
ACME 対応の CA から証明書を取り消す
ACME 対応の各 CA は、準備が整うと、ステータスに一意の ACME サーバー URL を公開します。ACME 対応の CA から証明書を取り消すには、ACME クライアント ツールを使用して、ACME プロトコルでこの URL とやり取りする必要があります。
ACME 対応の CA から証明書を取り消します。
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。
取得した URL を任意の ACME クライアント ツールで使用して、取り消しリクエストを発行します。詳細については、特定の ACME クライアントのドキュメントをご覧ください。
ACME が無効になっている CA から証明書を取り消す
CA で ACME モードが無効になっている場合は、RevokeCertificateRequest カスタム リソースを作成して適用し、証明書を取り消します。
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: 取り消しの理由。有効な理由は、Unspecified、KeyCompromise、CaCompromise、AffiliationChanged、Superseded、CessationOfOperation、CertificateHold、RemoveFromCrl、PrivilegeWithdrawn、AaCompromiseです。
カスタム リソースを適用します。
kubectl apply -f revoke-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 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