要求取得憑證

本頁說明如何使用憑證授權單位服務申請憑證。

如要在 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 要求憑證

  1. 建立 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 密鑰名稱。
  2. 將自訂資源套用至 Distributed Cloud 執行個體:

    kubectl apply -f 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 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"
    }
    
  4. 取得憑證密鑰名稱:

    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
    

使用自動產生的金鑰要求憑證

  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 清單。
  2. 將自訂資源套用至 Distributed Cloud 執行個體:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. 確認憑證要求是否已準備就緒:

    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"
    }
    
  4. 取得憑證密鑰名稱:

    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