在 GKE 中运行您自己的证书授权机构和密钥


本页面介绍了如何使用您管理的证书授权机构 (CA) 和密钥来配置 Google Kubernetes Engine (GKE) 集群控制平面。本指导适用于对凭据颁发和签名的控制有特定的组织合规性或政策要求的安全管理员。

本页面介绍了 GKE 中一组可选控制平面功能的一部分,这些功能可让您执行各种任务,例如验证控制平面的安全状况,或使用您管理的密钥在控制平面中配置加密和凭据签名。如需了解详情,请参阅关于 GKE control plane authority

默认情况下, Google Cloud 会对托管式控制平面应用各种安全措施。本页面介绍了一些可选功能,让您更好地了解或控制 GKE 控制平面

您应该已经熟悉以下概念:

控制平面凭据组件

GKE 集群使用特定的 CA 和密钥在集群中颁发凭据,例如 X.509 证书或 ServiceAccount 令牌。您可以在 Cloud Key Management Service (Cloud KMS) 中创建密钥,并在 Certificate Authority Service (CA Service) 中创建 CA,然后将集群配置为使用这些资源,而不是使用 Google Cloud管理的 CA 和密钥。

如需详细了解您创建的特定组件,请参阅自行管理的 CA 和密钥

与其他 GKE control plane authority 功能搭配使用

GKE control plane authority 提供以下与自行管理的密钥相关的功能:

目标

  • 在 Cloud KMS 中创建密钥
  • 在 CA Service 中创建 CA
  • 向 GKE 服务代理授予 Identity and Access Management (IAM) 角色
  • 创建使用您的 CA 和密钥的 GKE 集群
  • 验证该集群是否使用您的 CA 和密钥

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the Kubernetes Engine, Certificate Authority Service, and Cloud Key Management Service APIs:

    gcloud services enable container.googleapis.com privateca.googleapis.com cloudkms.googleapis.com
  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Kubernetes Engine, Certificate Authority Service, and Cloud Key Management Service APIs:

    gcloud services enable container.googleapis.com privateca.googleapis.com cloudkms.googleapis.com
  10. 确保您的环境符合使用 GKE control plane authority 功能的条件。如需选择启用这些功能,请与您的 Google Cloud 销售团队联系。
  11. 如需可靠地跟踪凭据颁发和使用情况,请确保启用了以下数据访问审核日志:
    • Cloud KMS:DATA_READ
    • CA Service:ADMIN_READADMIN_WRITE

    如需启用这些日志类型,请参阅启用数据访问审核日志

所需的角色和权限

如需获得运行您自己的 CA 和密钥所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

要求

您必须使用 GKE 1.31.1-gke.1846000 或更高版本。

限制

存在以下限制:

  • 您只能使用 Cloud KMS 中的密钥。您不能使用其他 KMS 提供方或其他加密提供方。
  • 不支持 Cloud External Key Manager (Cloud EKM) 密钥。
  • 您只能使用 CA Service 中的 CA。

准备环境

在本部分中,您将确定在本教程中使用的 Google Cloud 项目,并在 Cloud KMS 中创建密钥环来容纳密钥。

确定项目

我们建议您使用单独的 Google Cloud 项目,如下所示:

  • 密钥项目:包含所有密钥和 CA。
  • 集群项目:包含您的 GKE 集群。

您可以视需要为密钥、CA 和 GKE 集群使用同一项目,但我们建议您使用单独的项目,以便管理组织中的加密操作的团队与管理集群操作的团队分开。

创建密钥环

在密钥项目中创建一个密钥环来容纳特定集群的所有密钥。您必须在与 GKE 集群相同的位置创建密钥环。

运行以下命令:

gcloud kms keyrings create KEY_RING_NAME \
    --location=us-central1 \
    --project=KEY_PROJECT_ID

替换以下内容:

  • KEY_RING_NAME:密钥环的名称。
  • KEY_PROJECT_ID:您的密钥项目的项目 ID。

创建密钥

对于每个凭据授权机构(例如服务账号密钥和 CA),您都需要使用 Cloud KMS 创建一个密钥。本部分介绍了如何创建 GKE 用于在集群中对凭据进行签名和验证的密钥。您可以根据组织的需求为这些密钥指定自己的属性。如需了解详情,请参阅创建密钥页面和 projects.locations.keyRings.cryptoKeys API 参考文档。

在 Cloud KMS 中创建这些资源时,请考虑以下事项:

  • 如果您的密钥项目中有已有密钥环,您可以使用该密钥环来存储为用于集群创建的所有密钥。
  • 密钥环必须与集群位于同一 Google Cloud 位置,以最大限度地缩短延迟时间。
  • 密钥必须将 asymmetric-signing 指定为密钥用途。
  • 根据密钥类型使用以下算法:
    • ServiceAccount 签名密钥:强大的 RSA 签名 PKCS1 算法,例如 rsa-sign-pkcs1-4096-sha256rsa-sign-pkcs1-3072-sha256
    • 证书授权机构密钥:ec-sign-p256-sha256 等强大算法。
  • 支持 Cloud HSM 硬件密钥,但对于大多数应用场景而言,software 保护级别就已足够。如需详细了解硬件密钥,请参阅 Cloud HSM
  • 请勿修改密钥销毁的默认时长
  • GKE 不会阻止您删除集群正在使用的 Cloud KMS 密钥,包括 CA Service 密钥。在删除密钥或 CA 之前,请确保这些资源未被使用。

如需创建密钥,请运行以下命令:

  1. 创建 Kubernetes ServiceAccount 签名密钥,并在创建集群期间将该密钥指定为服务账号验证密钥:

    gcloud kms keys create sa-signing-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=rsa-sign-pkcs1-4096-sha256 \
        --project=KEY_PROJECT_ID
    

    KEY_PROJECT_ID 替换为您的专用密钥项目的项目 ID。

  2. 创建集群根 CA 密钥:

    gcloud kms keys create cluster-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  3. 创建 etcd 对等根 CA 密钥:

    gcloud kms keys create etcd-peer-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  4. 创建 etcd API 根 CA 密钥:

    gcloud kms keys create etcd-api-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  5. 创建汇总根 CA 密钥:

    gcloud kms keys create aggregation-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    

创建 CA

为每个控制平面函数创建密钥后,使用每个密钥通过 CA Service 创建 CA 池和相应的根 CA:

  1. 创建集群 CA 池:

    gcloud privateca pools create cluster-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    

    --no-publish-crl 标志和 --no-publish-ca-cert 标志是可选的。省略这些标志会将证书发布到 Cloud Storage 存储桶。如需了解详情,请参阅为 CA 池中的 CA 启用 CA 证书和 CRL 发布

  2. 创建集群根 CA:

    gcloud privateca roots create cluster-root-ca \
        --pool=cluster-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/cluster-ca-key/cryptoKeyVersions/1 \
        --subject="CN=cluster-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    

    ORGANIZATION 替换为您的组织名称。

  3. 创建 etcd 对等 CA 池:

    gcloud privateca pools create etcd-peer-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  4. 创建 etcd 对等根 CA:

    gcloud privateca roots create etcd-peer-root-ca \
        --pool=etcd-peer-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/etcd-peer-ca-key/cryptoKeyVersions/1 \
        --subject="CN=etcd-peer-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    
  5. 创建 etcd API CA 池:

    gcloud privateca pools create etcd-api-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  6. 创建 etcd API 根 CA:

    gcloud privateca roots create etcd-api-root-ca \
        --pool=etcd-api-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/etcd-api-ca-key/cryptoKeyVersions/1 \
        --subject="CN=etcd-api-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    
  7. 创建汇总 CA 池:

    gcloud privateca pools create aggregation-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  8. 创建汇总根 CA:

    gcloud privateca roots create aggregation-root-ca \
        --pool=aggregation-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/aggregation-ca-key/cryptoKeyVersions/1 \
        --subject="CN=aggregation-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    

向 GKE 服务代理授予 IAM 角色

GKE 服务代理需要有权访问您在 Cloud KMS 和 CA Service 中创建的资源。服务代理使用这些资源在集群中对凭据进行签名、验证和颁发。您可以使用以下预定义的 IAM 角色:

如需向 GKE 服务代理授予这些角色,请执行以下操作:

  1. 找到您的集群项目的项目编号:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    CLUSTER_PROJECT_ID 替换为您的集群项目的项目 ID。

  2. 授予您在创建密钥中创建的服务账号签名密钥的 Kubernetes Engine KMS Crypto Key User 角色:

    gcloud kms keys add-iam-policy-binding sa-signing-key \
      --location=us-central1 \
      --keyring=KEY_RING_NAME \
      --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
      --role=roles/container.cloudKmsKeyUser \
      --project=KEY_PROJECT_ID
    

    CLUSTER_PROJECT_NUMBER 替换为该集群项目的项目编号。

  3. 授予您在创建 CA 中创建的 CA 池的 CA Service Certificate Manager 角色:

    gcloud privateca pools add-iam-policy-binding cluster-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding etcd-peer-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding etcd-api-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding aggregation-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    

在不使用 gcloud CLI 时授予其他角色

本部分介绍了在您打算使用 Terraform 或 Google Cloud 控制台(而不使用 gcloud CLI)等客户端配置 CA 和密钥时必须执行的其他配置步骤。如果您使用 gcloud CLI,请跳过本部分,前往在新集群上设置 CA 和密钥部分。

如本页面中所述,当您使用 gcloud CLI 设置 CA 和密钥时,gcloud CLI 会自动为 CA Service 创建和配置服务代理,并向服务代理授予 IAM 角色。但是,如果您使用 Terraform 或 Google Cloud 控制台等客户端来配置 Google Cloud环境,则必须为密钥项目手动执行以下配置步骤:

  1. 触发 CA Service 服务代理的创建。

    gcloud beta services identity create --service=privateca.googleapis.com \
        --project=KEY_PROJECT_ID
    
  2. 找到密钥项目的项目编号:

    gcloud projects describe KEY_PROJECT_ID \
        --format='value(projectNumber)'
    
  3. 授予您在创建密钥部分中创建的所有根 CA 密钥的 Viewer (roles/viewer) 角色和 Cloud KMS CryptoKey Signer/Verifier (roles/cloudkms.signerVerifier) 角色:

    for key in cluster-ca-key etcd-peer-ca-key etcd-api-ca-key aggregation-ca-key
    do
    gcloud kms keys add-iam-policy-binding $key \
        --keyring=KEY_RING_NAME \
        --location=LOCATION \
        --role=roles/viewer \
        --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding $key \
        --keyring=KEY_RING_NAME \
        --location=LOCATION \
        --role=roles/cloudkms.signerVerifier \
        --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \
        --project=KEY_PROJECT_ID
    done
    

    KEY_PROJECT_NUMBER 替换为上一步的输出中的密钥项目编号。

    此命令是一个 for 循环,用于迭代根 CA 密钥,并向 CA Service 服务代理授予该密钥的每个角色。如果您为根 CA 密钥使用了不同的名称,请针对每个密钥手动运行这些命令。

在新集群上设置 CA 和密钥

创建密钥、CA 池、根 CA 并向 GKE 服务代理授予 IAM 角色后,请创建一个使用这些资源的新集群。

您在集群创建命令中指定的标志需要使用以下资源路径作为值:

  • 您在创建密钥中创建的服务账号签名密钥在 Cloud KMS 中的密钥版本的路径。您可以为 service-account-signing-keys 标志和 service-account-verification-keys 标志指定此路径。
  • 您在创建 CA 中创建的每个 CA 池的路径。

如需将新集群配置为使用您的密钥和 CA,请执行以下步骤:

  1. 找到最新启用的服务账号签名密钥版本的路径:

    gcloud kms keys versions list \
        --key=sa-signing-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1 \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ --format="value(name)" | sed 1q
    

    KEY_PROJECT_ID 替换为密钥项目的项目 ID。

    输出类似于以下内容:

    projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
    
  2. 找到您创建的每个 CA 池的路径:

    gcloud privateca pools list --format="get(name)" \
        --project=KEY_PROJECT_ID
    

    输出类似于以下内容:

    projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool
    

    确保输出包含您为 GKE 创建的所有 CA 池。

创建集群

在本部分中,您将创建一个集群,并根据要配置的 GKE control plane authority 功能指定不同的选项。您只能在创建集群期间对集群配置这些功能。以下命令可创建 Autopilot 模式集群。如需改为创建 Standard 模式集群,请将相同的标志与 gcloud container clusters create 命令搭配使用。

  • 如需仅配置您在本教程中创建的 CA 和密钥,请运行以下命令:

    gcloud container clusters create-auto example-cluster \
        --location=us-central1 \
        --project=CLUSTER_PROJECT_ID \
        --cluster-version=VERSION \
        --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
        --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
        --cluster-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --etcd-api-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --aggregation-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool
    

    替换以下内容:

    • CLUSTER_PROJECT_ID:集群项目的项目 ID。
    • VERSION:集群的 GKE 版本。必须为 1.31.1-gke.1846000 或更高版本。
  • 如需配置 CA 和密钥以及控制平面启动磁盘加密和 etcd 加密,请执行以下操作:

    1. 执行加密 etcd 磁盘和控制平面启动磁盘中的所有密钥配置步骤。
    2. 按照在集群中使用加密密钥中的说明,找到每个密钥的路径。
    3. 创建集群:

      gcloud container clusters create-auto example-cluster \
          --location=us-central1 \
          --project=CLUSTER_PROJECT_ID \
          --cluster-version=VERSION \
          --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
          --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
          --cluster-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
          --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
          --etcd-api-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
          --aggregation-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
          --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
          --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
      

      替换以下内容:

      • CLUSTER_PROJECT_ID:集群项目的项目 ID。
      • VERSION:集群的 GKE 版本。必须为 1.31.1-gke.1846000 或更高版本。
      • PATH_TO_DISK_KEY:磁盘加密密钥的路径。
      • PATH_TO_ETCD_BACKUP_KEY:etcd 内部备份加密密钥的路径。

    您还可以在创建新的 Standard 模式集群时使用这些标志。

验证集群是否使用您指定的密钥和 CA

本部分介绍了如何验证在创建集群期间使用的密钥和 CA。您可以使用 Cloud Logging 或 Google Cloud CLI 执行此验证。

使用 Logging 验证密钥和 CA

如需使用 Logging 验证密钥和 CA,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面:

    转到 Logs Explorer

  2. 指定以下查询:

    resource.type="gke_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster"
    protoPayload.request.cluster.userManagedKeysConfig:*
    

    protoPayload.request.cluster.userManagedKeysConfig:* 会过滤包含您管理的密钥和 CA 的集群创建日志的结果。

  3. 点击运行查询

在结果中,展开集群创建日志。验证密钥和 CA 的路径是否与您为该集群创建的路径相同,如以下示例所示:

# lines omitted for clarity
userManagedKeysConfig: {
  aggregationCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool"
  clusterCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool"
  etcdApiCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool"
  etcdPeerCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool"
  serviceAccountSigningKeys: [
    0: "projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
  ]
  serviceAccountVerificationKeys: [
    0: "projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
  ]
}

使用 gcloud CLI 验证密钥和 CA

如需验证集群是否使用您创建的 CA 和密钥,请运行以下命令:

gcloud container clusters describe example-cluster \
    --location=us-central1 \
    --project=CLUSTER_PROJECT_ID

输出应包含 userManagedKeysConfig 字段,如以下示例所示:

# lines omitted for clarity
userManagedKeysConfig:
  sa-signing-key: projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
  sa-verification-key: projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
  cluster-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool
  etcd-peer-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool
  etcd-api-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool
  aggregation-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

删除各个资源

  1. 删除集群:

    gcloud container clusters delete example-cluster \
        --location=us-central1 \
        --project=CLUSTER_PROJECT_ID
    
  2. 停用根 CA:

    gcloud privateca roots disable cluster-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable etcd-peer-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable etcd-api-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable aggregation-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
        --project=KEY_PROJECT_ID
    
  3. 删除根 CA:

    gcloud privateca roots delete cluster-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete etcd-peer-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete etcd-api-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete aggregation-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
        --project=KEY_PROJECT_ID
    
  4. 删除 CA 池:

    gcloud privateca pools delete cluster-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete etcd-peer-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete etcd-api-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete aggregation-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
  5. 删除密钥:

    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=sa-signing-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=cluster-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=etcd-peer-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=etcd-api-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=aggregation-ca-key \
        --project=KEY_PROJECT_ID
    

您无法从 Cloud KMS 中删除密钥环。但是,密钥环不会产生额外的费用。

后续步骤