创建根证书授权机构

本文档介绍了在 Google Distributed Cloud (GDC) 气隙环境中创建根证书授权机构 (CA) 的步骤。

根 CA 位于公钥基础架构 (PKI) 层次结构的顶部,用于为 PKI 建立信任锚点。如需在 PKI 中使用证书,设备、软件和组件必须信任根 CA。此配置可确保信任根 CA 颁发的所有证书,从而实现对 PKI 本身的信任。

本文档适用于应用运维人员群组中的受众群体,例如应用开发者或数据科学家,他们负责管理项目中的证书生命周期。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众群体

准备工作

在创建根证书授权机构之前,您必须请求必要的权限并准备好环境。

申请 IAM 角色

如需创建、更新和删除根证书授权机构,请与您的组织 IAM 管理员联系,请求 Certificate Authority Service Admin (certificate-authority-service-admin) 角色。

准备环境

创建根证书授权机构

如需创建根 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 证书的请求有效期。以小时为单位指定时长(例如 1000h)。不支持以天 (d) 或年 (y) 等为单位。
    SECRET_NAME 包含私钥和签名 CA 证书的 Kubernetes Secret 的名称。

    以下变量是可选值:

    变量 说明
    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 Service 资源,请执行以下操作:

使用 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