本頁說明如何使用憑證授權單位服務申請憑證。
如要在 Google Distributed Cloud (GDC) 氣隙隔離環境中建立信任關係並確保通訊安全,請向憑證授權單位服務要求啟用或停用 ACME 的憑證。
事前準備
如要取得要求憑證所需的權限,請要求機構的 IAM 管理員授予您憑證授權單位服務管理員 (certificate-authority-service-admin
) 角色。
取得 kubeconfig 檔案
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER_KUBECONFIG
。
使用啟用 ACME 模式的 CA 要求憑證
如果憑證授權單位是以 ACME 模式代管,在準備就緒後,狀態會輸出 ACME 伺服器網址。
從 Distributed Cloud 環境收集 CA ACME 伺服器網址:
kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'
更改下列內容:
CA_NAME
:CA 的名稱,可以是根 CA 或子 CA。USER_PROJECT_NAMESPACE
:使用者專案所在的命名空間名稱。
使用 CA 要求憑證 (已停用 ACME 模式)
如要建立停用 ACME 模式的憑證要求,您必須建立 CertificateRequest
資源並套用至 Distributed Cloud 氣隙執行個體。如要這樣做,方法有兩種:
- 建立
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 使用者專案所在的命名空間名稱。 CA_NAME CA 的名稱,可以是根 CA 或子 CA。 CSR 使用 CA 簽署的憑證簽署要求。 SECRET_NAME 保存私密金鑰和已簽署 CA 憑證的 Kubernetes 密鑰名稱。 將自訂資源套用至 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" }
取得憑證密鑰名稱:
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
資源中加入至少一個下列值:變數 說明 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" }
取得憑證密鑰名稱:
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