建立根憑證授權單位

本頁面說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中建立根層級憑證授權單位 (CA) 的步驟。

根層級 CA 位於公用金鑰基礎架構 (PKI) 階層的頂端,負責建立 PKI 的信任錨點。如要在 PKI 中使用憑證,裝置、軟體和元件必須信任根 CA。這項設定可確保信任根 CA 核發的所有憑證,進而信任 PKI 本身。

事前準備

如要取得建立根憑證授權單位所需的權限,請要求機構的 IAM 管理員授予您憑證授權單位服務管理員 (certificate-authority-service-admin) 角色。如要進一步瞭解角色,請參閱角色定義

取得 kubeconfig 檔案

如要對 Management API 伺服器執行指令,請確認您具備下列資源:

  1. 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。

  2. 使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER_KUBECONFIG

建立根憑證授權單位

如要建立根 CA,請將自訂資源套用至 Distributed Cloud 氣隙執行個體。

  1. 建立 CertificateAuthority 資源,並儲存為名為 root-ca.yaml 的 YAML 檔案:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateAuthority
    metadata:
      name: ROOT_CA_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      caProfile:
        commonName: COMMON_NAME
        duration: DURATION
        renewBefore: RENEW_BEFORE
        organizations:
        - ORGANIZATION
        organizationalUnits:
        - ORGANIZATIONAL_UNITS
        countries:
        - COUNTRIES
        localities:
        - LOCALTIES
        provinces:
        - PROVINCES
        streetAddresses:
        - STREET_ADDRESSES
        postalCodes:
        - POSTAL_CODES
      caCertificate:
        selfSignedCA: {}
      certificateProfile:
        keyUsage:
          - digitalSignature
          - keyCertSign
          - crlSign
        extendedKeyUsage:
          - EXTENDED_KEY_USAGE
      secretConfig:
        secretName: SECRET_NAME
        privateKeyConfig:
          algorithm: KEY_ALGORITHM
          size: KEY_SIZE
      acme:
        enabled: ACME_ENABLED
    

    請替換下列變數:

    變數 說明
    ROOT_CA_NAME 根層級 CA 的名稱。
    USER_PROJECT_NAMESPACE 使用者專案所在的命名空間名稱。
    COMMON_NAME CA 憑證的通用名稱。
    DURATION 所要求的 CA 憑證生命週期。
    SECRET_NAME 保存私密金鑰和已簽署 CA 憑證的 Kubernetes 密鑰名稱。

    下列變數為選用值:

    變數 說明
    RENEW_BEFORE CA 憑證到期前的輪替時間。
    ORGANIZATION 憑證上要使用的機構名稱。
    ORGANIZATIONAL_UNITS 憑證上要使用的機構單位。
    COUNTRIES 證書上使用的國家/地區。
    LOCALITIES 證書上要使用的城市。
    PROVINCES 憑證上要使用的州或省。
    STREET_ADDRESSES 憑證上使用的街道地址。
    POSTAL_CODES 憑證上使用的郵遞區號。
    EXTENDED_KEY_USAGE 憑證的擴充金鑰使用方式。如有提供,允許的值為 serverAuthclientAuth
    KEY_ALGORITHYM 這個憑證使用的私密金鑰演算法。允許的值為 RSAEd25519ECDSA。如未提供大小,ECDSA 的預設值為 256,RSA 的預設值為 2048。系統會忽略「Ed25519」的按鍵大小。
    KEY_SIZE 這個憑證的私密金鑰大小 (以位元為單位) 取決於演算法。RSA 允許 2048、3072、4096 或 8192 (預設為 2048)。ECDSA 允許 256、384 或 521 (預設為 256)。 Ed25519 會忽略大小。
    ACME_ENABLED 如果設為 true,CA 會以 ACME 模式執行,並輸出 ACME 伺服器網址。然後使用 ACME 用戶端和通訊協定管理憑證。

  2. 將自訂資源套用至 Distributed Cloud 執行個體:

    kubectl apply -f root-ca.yaml –kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    MANAGEMENT_API_SERVER_KUBECONFIG 替換為 Management API 伺服器的 kubeconfig 檔案路徑。

  3. 確認根 CA 是否已準備就緒。通常 CA 約需 40 分鐘才能準備就緒:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME -ojson | jq -r ' 
    .status.conditions[] | select( .type as $id | "Ready" | index($id))
    

    輸出看起來類似以下內容:

    {
      "lastTransitionTime": "2025-01-24T17:09:19Z",
      "message": "CA reconciled",
      "observedGeneration": 2,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

列出 CA

如要列出 Distributed Cloud 無網路連線執行個體中的所有 Certificate Authority 服務資源,請按照下列步驟操作:

使用 certificateauthorities 參數列出所有 CertificateAuthority 資源:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

輸出看起來類似以下內容:

   NAMESPACE    NAME              READY   REASON   AGE
   foo          root-ca           True    Ready    7h24m
   foo          sub-ca            True    Ready    7h24m