このページでは、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 を使用して証明書をリクエストする
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 の名前。 カスタム リソースを Distributed Cloud インスタンスに適用します。
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
MANAGEMENT_API_SERVER_KUBECONFIG
は、Management API サーバーの kubeconfig ファイルへのパスに置き換えます。証明書リクエストの準備状況を確認します。
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" }
証明書の 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
自動生成された鍵を使用して証明書をリクエストする
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
のリスト。カスタム リソースを Distributed Cloud インスタンスに適用します。
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
証明書リクエストの準備状況を確認します。
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" }
証明書の 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