このドキュメントでは、Certificate Authority Service を使用して証明書を取り消す方法について説明します。証明書を失効させると、有効期限が切れる前に証明書が無効になり、認証に使用できなくなります。秘密鍵が不正使用された場合、証明書が新しい証明書に置き換えられた場合、証明書が不要になった場合(証明書が発行されたサービスが廃止された場合など)は、証明書を取り消すことができます。
このドキュメントは、プロジェクト内の証明書のライフサイクルを管理するアプリケーション デベロッパーやデータ サイエンティストなど、アプリケーション オペレーター グループ内のユーザーを対象としています。詳細については、GDC エアギャップ ドキュメントの対象読者をご覧ください。
証明書の失効について
CA Service は、証明書失効リスト(CRL)を公開することで証明書の取り消しをサポートしています。CRL は、取り消され、信頼されなくなった証明書のシリアル番号のリストです。デフォルトでは、新しい CRL は 15 分ごとに公開されます。また、証明書の取り消しが成功すると、新しい CRL の生成が自動的にトリガーされます。
CA Service によって発行された証明書には、CRL 配布ポイント(CDP)と呼ばれる拡張機能が含まれています。この拡張機能には、その証明書の CRL を検索してダウンロードできる URL が含まれています。クライアント アプリケーションは、この URL を使用して CRL を取得し、証明書のシリアル番号が存在するかどうかを確認します。シリアル番号がリストに表示されている場合、証明書は無効と見なされ、接続は拒否される必要があります。
始める前に
証明書を取り消す前に、必要な権限をリクエストして環境を準備する必要があります。
IAM ロールをリクエストする
証明書を取り消して取り消しリクエストを表示するには、IAM 組織管理者に連絡して、認証局のプロジェクト名前空間で CA Service オペレーション マネージャー(certificate-authority-service-operation-manager)ロールをリクエストします。
環境を準備する
kubectlアクセスを構成する kubeconfig ファイルを生成します。
証明書を取り消す
証明書を取り消す方法は、発行元の認証局(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: プロジェクトの名前空間。
取得した 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: プロジェクトの名前空間。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: プロジェクトの名前空間。REVOKE_CERT_REQ_NAME: 取り消しリクエストの名前。
出力は次のようになります。
{ "lastTransitionTime": "2025-08-19T23:20:22Z", "message": "RevokeCertificateRequest reconciled", "observedGeneration": 1, "reason": "Ready", "status": "True", "type": "Ready" }プロセスが完了し、証明書のシリアル番号が次に生成される CRL に追加されます。
取り消された証明書リクエストを一覧表示する
プロジェクトの名前空間内のすべての RevokeCertificateRequest リソースを一覧表示します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
-n USER_PROJECT_NAMESPACE \
get revokecertificaterequests
次のように置き換えます。
MANAGEMENT_API_SERVER_KUBECONFIG: Management API サーバーの kubeconfig ファイルのパス。USER_PROJECT_NAMESPACE: プロジェクトの名前空間。
出力は次のようになります。
NAMESPACE NAME READY AGE
foo revoke-cert-req True 30s