启用 Cloud KMS Autokey

本文档介绍了如何使用 Google Cloud 控制台、Google Cloud CLI、Cloud KMS API 或 Terraform 启用和配置 Cloud KMS Autokey。 您可以为文件夹启用 Autokey 并使用专用项目密钥存储,也可以为单个项目或文件夹中的所有项目启用 Autokey 并使用同项目密钥存储。如需详细了解 Autokey,请参阅 Autokey 概览。

本文档面向管理员。

自动密钥配置继承

在文件夹中配置 Autokey 时,该文件夹中的子文件夹和项目会继承其父文件夹的 Autokey 配置。在子文件夹或项目上配置 Autokey 时,您可以选择从父资源继承配置,也可以为该资源创建新的 Autokey 配置。应用于子资源的自动密钥配置会替换父文件夹的配置。

下表显示了支持的 Autokey 配置使用情形:

资源类型 Autokey 配置 说明
组织 不适用 无法为组织启用 Autokey。组织内的子资源会继承空的 AutokeyConfig 资源。在 Google Cloud 控制台中,这些资源会显示“自动密钥”状态为未启用。如果您想限制组织内的 Autokey 使用或完全停用 Autokey,可以使用组织政策。如需了解详情,请参阅控制 Autokey 使用情况。
文件夹 DEDICATED_KEY_PROJECT 已为文件夹中的资源项目启用 Autokey(使用专用项目密钥存储)。对于继承此配置的资源项目,Autokey 会在专用密钥项目中创建密钥。
文件夹 RESOURCE_PROJECT 已为文件夹中的资源项目启用 Autokey(采用同项目密钥存储)。对于继承此配置的资源项目,Autokey 会在受保护资源所在的同一项目中创建密钥。
文件夹 DISABLED Autokey 在文件夹内处于停用状态,但子文件夹和项目仍可替换此配置。如果您想限制文件夹中的 Autokey 或完全停用它,可以使用组织政策。如需了解详情,请参阅控制 Autokey 使用情况。
文件夹 KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED 相应文件夹会从其父级文件夹或组织继承 Autokey 配置。
项目 RESOURCE_PROJECT 已为资源项目启用 Autokey(采用同项目密钥存储)。 对于在此项目中创建的资源,Autokey 会在同一项目中创建密钥。
项目 DISABLED 资源项目已停用 Autokey。在此项目中创建资源的开发者必须手动创建和预配密钥,才能为所创建的资源使用 CMEK。
项目 KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED 项目从其父级文件夹继承 Autokey 配置。

准备工作

您必须具备以下条件,才能为文件夹启用 Autokey 并使用专用项目密钥存储:

  • 包含您要启用 Autokey 的文件夹的组织资源。如果您没有要启用 Autokey 的文件夹,可以创建新的资源文件夹。 在此文件夹中启用 Autokey 会为该文件夹中的所有资源项目启用 Autokey。

  • 如果您有资源项目,想要使用 Autokey 并将密钥存储在专用项目中,但这些项目不在您将启用 Autokey 的文件夹中,您可以将现有资源项目移至新文件夹。

您必须具备以下条件之一,然后才能启用 Autokey 并使用同项目密钥存储:

  • 您要在其中启用 Autokey 且 keyHandles.create 权限未被 IAM 拒绝政策阻止的项目。 Google Cloud
  • 您要启用 Autokey 的文件夹,其中至少包含一个项目的 keyHandles.create 权限未被 IAM 拒绝政策阻止。 Google Cloud

所需的角色

如需获得启用和配置 Autokey 所需的权限,请让管理员向您授予文件夹、项目或父资源的以下 IAM 角色:

  • 如需启用 Autokey,请执行以下操作:
  • 如需启用 Autokey 并使用专用项目密钥存储,请执行以下操作:
  • 如需查看 Autokey 配置,请使用 Cloud KMS Viewer (roles/cloudkms.viewer)
  • 如需查看所有有效的 Autokey 配置,请执行以下操作:
    • Cloud Asset Viewer (roles/cloudasset.viewer) - 组织级
    • Service Usage Consumer (roles/serviceusage.serviceUsageConsumer)

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

这些预定义角色包含启用和配置 Autokey 所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

启用和配置 Autokey 需要以下权限:

  • 如需启用 Autokey,请执行以下操作:
    • cloudkms.autokeyConfigs.*
    • serviceusage.services.enable
  • 如需启用 Autokey 并使用专用项目密钥存储,请执行以下操作:
    • resourcemanager.folders.get
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
    • billing.resourceAssociations.create
  • 查看 Autokey 配置:
    • cloudkms.folders.showEffectiveAutokeyConfig
    • cloudkms.projects.showEffectiveAutokeyConfig
  • 如需查看所有有效的 Autokey 配置,请执行以下操作:
    • cloudasset.assets.query
    • serviceusage.services.use

您也可以使用自定义角色或其他预定义角色来获取这些权限。

Terraform 设置

本部分包含示例 Terraform 变量和资源,这些变量和资源是本文档中其余 Terraform 示例的先决条件。如果您未使用 Terraform 创建或管理 Autokey 配置,请跳过此部分。

点击此处可显示或隐藏 Terraform 设置示例

此示例会完成以下设置步骤:

  1. 定义后续 Terraform 示例中使用的变量。
  2. 创建资源文件夹。如果您计划仅在各个项目中采用同项目密钥存储,则可以跳过此步骤。
  3. 授予自动密钥管理员和用户角色。
  variable "organization_ID" {
    description = "Your Google Cloud Org ID"
    type        = string
    default     = "ORGANIZATION_ID"
  }

  variable "billing_account" {
    description = "Your Google Cloud Billing Account ID"
    type        = string
    default     = "BILLING_ACCOUNT_ID"
  }

  /* List the users who should have the authority to enable and configure
    Autokey at a folder level */
  variable "autokey_folder_admins" {
    type    = list(string)
    default = [AUTOKEY_ADMIN_USER_IDS]
  }

  /* List the users who should have the authority to protect their resources
    with Autokey */
  variable "autokey_folder_users" {
    type    = list(string)
    default = [AUTOKEY_DEVELOPER_USER_IDS]
  }

  /* List the users who should have the authority to manage crypto operations
    in the Autokey key project */
  variable "autokey_project_kms_admins" {
    type    = list(string)
    default = [KEY_PROJECT_ADMIN_USER_IDS]
  }

  # Create a new folder
  resource "google_folder" "autokey_folder" {
    parent       = "organizations/${var.organization_ID}"
    display_name = "autokey_folder"
  }
  /* To use a folder that already exists, omit this block and instead create a
     variable for the folder ID instead, and then update subsequent resources
     to use the variable. */

  # Set permissions for key admins to use Autokey in this folder
  resource "google_folder_iam_binding" "autokey_folder_admin" {
    folder  = google_folder.autokey_folder.name
    role    = "roles/cloudkms.autokeyAdmin"
    members = var.autokey_folder_admins
  }

  /* Set permissions for users to protect resources with Autokey in
    this folder */
  resource "google_folder_iam_binding" "autokey_folder_users" {
    folder  = google_folder.autokey_folder.name
    role    = "roles/cloudkms.autokeyUser"
    members = var.autokey_folder_users
  }
  

替换以下内容:

  1. BILLING_ACCOUNT_ID:您的 Google Cloud 结算账号 ID。结算账号 ID 是一个 18 个字符的字母数字值,以短划线分隔,例如 010101-F0FFF0-10XX01。
  2. AUTOKEY_ADMIN_USER_IDS:应具有 `roles/cloudkms.autokeyAdmin` 角色的用户的电子邮件地址列表,例如 "Ariel@example.com", "Charlie@example.com"。
  3. AUTOKEY_DEVELOPER_USER_IDS:应具有 `roles/cloudkms.autokeyUser` 角色的用户的电子邮件地址列表,例如 "Kalani@example.com", "Mahan@example.com"。
  4. KEY_PROJECT_ADMIN_USER_IDS:应具有 `roles/cloudkms.admin` 角色的用户的电子邮件地址列表,例如 "Sasha@example.com", "Nur@example.com"。

设置 Autokey 并启用专用项目密钥存储

如果您在文件夹中使用 Autokey 并将密钥存储在专用项目中,则需要选择一个密钥项目来包含 Autokey 在该文件夹中创建的所有密钥。如果您使用的是同项目密钥存储,则无需专用密钥项目;请从启用 Autokey 并使用同项目密钥存储继续操作。

建议您创建一个新的密钥项目,用于存放 Autokey 创建的 Cloud KMS 资源。您应在组织资源内创建密钥项目。如果您已有想要用于 Autokey 创建的密钥的密钥项目,可以跳过创建密钥项目部分,直接从本页上的配置 Autokey 密钥项目部分继续操作。

密钥项目可以在您计划启用 Autokey 的同一文件夹中创建。您不应在密钥项目中创建其他资源。 如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。

如果您将来可能要迁移到 Assured Workloads,请在与受这些密钥保护的资源相同的文件夹中创建密钥项目。

如果您的组织使用 constraints/gcp.restrictCmekCryptoKeyProjects 组织政策限制条件来确保所有 CMEK 都来自指定的密钥项目,您必须将密钥项目添加到允许的项目列表中。如需详细了解 CMEK 组织政策,请参阅 CMEK 组织政策。

创建密钥项目

控制台

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 在选择组织中,选择要在其中创建项目的组织资源。
  3. 点击 Create project。
  4. 在随即显示的新建项目窗口中,输入项目名称并选择结算账号。项目名称只能包含字母、数字、英文单引号、连字符、空格或英文感叹号,且长度必须介于 4 到 30 个字符之间。
  5. 对于位置,选择您希望作为密钥项目父级的资源。
  6. 如需完成项目创建,请点击创建。

gcloud

  • 创建新项目:

    gcloud projects create PROJECT_ID \
        --PARENT_TYPE=PARENT_ID
    

    替换以下内容:

    • PROJECT_ID:包含密钥环的项目的 ID。
    • PARENT_TYPE:您要在其中创建新密钥项目的资源的类型。输入 organization 可在指定组织下创建新的密钥项目,输入 folder 可在指定文件夹下创建新的密钥项目。
    • PARENT_ID:您要在其中创建关键项目的组织或文件夹的 ID。

REST

  • 创建新项目:

    curl "https://cloudresourcemanager.googleapis.com/v3/projects/"
        --request "POST" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{ "projectId": "PROJECT_ID", "name": "PROJECT_NAME", "parent": "PARENT_TYPE/PARENT_ID" }'
    

    替换以下内容:

    • PROJECT_ID:您要用于专用密钥项目的标识符。
    • PROJECT_NAME:您要为专用密钥项目使用的名称。
    • PARENT_TYPE:您要在其中创建专用密钥项目的父级资源的资源类型,例如 organizations 或 folders。
    • PARENT_ID":您要在其中创建专用密钥项目的父资源的资源标识符。

Terraform

以下 Terraform 示例会在之前创建的文件夹中创建一个专用密钥项目。

/* Define the project ID to use for the dedicated key project. The project
  ID must be 6 to 30 characters with lowercase letters, digits, hyphens. The
  project ID must start with a letter. Trailing hyphens are prohibited */
variable "key_management_project_ID" {
  description = "Sets the project ID for the dedicated key project. This project will contain the Key Rings and Keys generated by Cloud KMS Autokey"
  type        = string
  default     = "KEY_PROJECT_ID"
}

# Create a key project to store keys created by Autokey
resource "google_project" "key_management_project" {
  project_id      = var.key_management_project_ID
  name            = var.key_management_project_ID
  billing_account = var.billing_account
  folder_id       = google_folder.autokey_folder.name
}

output "project_number" {
  value = google_project.key_management_project.number
}

将 KEY_PROJECT_ID 替换为要用于专用密钥项目的 ID,例如 autokey-key-project。

设置项目安全锁

创建 Cloud KMS 项目后,建议您使用安全锁(预览版)保护该项目,以免项目被意外删除。强制执行项目安全锁后,在移除安全锁之前,Cloud KMS 项目将无法被删除。

准备专用密钥项目

控制台

  1. 在密钥项目中启用 Cloud KMS API。

    启用 API

  2. 如果您使用的是新的密钥项目,请授予密钥项目 Cloud KMS 管理员权限。重复执行以下步骤,为您自己和其他 Cloud KMS 管理员用户授予 Cloud KMS Admin 角色:

    1. 在 Google Cloud 控制台中,前往 IAM 页面。

      进入 IAM

    2. 选择密钥项目。

    3. 点击 授予访问权限,然后输入用户的电子邮件地址。

    4. 选择 Cloud KMS 管理员角色。

    5. 点击保存。

gcloud

  1. 在密钥项目中启用 Cloud KMS API:

    gcloud services enable cloudkms.googleapis.com
    
  2. 在密钥项目上授予 Cloud KMS 管理员权限。 重复执行以下命令,向您自己和其他 Cloud KMS 管理员用户授予 roles/cloudkms.admin 角色:

    gcloud projects add-iam-policy-binding PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=user:KEY_ADMIN_EMAIL
    

    替换以下内容:

    • PROJECT_NUMBER:密钥项目的项目编号。
    • KEY_ADMIN_EMAIL:负责管理 Cloud KMS 密钥的用户的电子邮件地址。

REST

  1. 在密钥项目中启用 Cloud KMS API:

    curl "https://serviceusage.googleapis.com/v1/projects/PROJECT_ID/services/cloudkms.googleapis.com:enable" \
        --request "POST" \
        --header "authorization: Bearer TOKEN"
    

    将 PROJECT_ID 替换为您的专用密钥项目的标识符。

  2. 获取专用密钥项目的当前 IAM 政策。

    curl "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy" \
        --request POST \
        --header "authorization: Bearer TOKEN"
        --header "Content-Type: application/json; charset=utf-8" \
        --data '{"options": {"requestedPolicyVersion": 3}}'
    

    响应包含项目的当前允许政策。

  3. 修改返回的允许政策,为每位 Cloud KMS 管理员用户(包括您自己)添加 roles/cloudkms.admin 角色,并以以下角色绑定示例作为参考: json { "role": "roles/cloudkms.admin", "members": [ "PRINCIPAL_LIST" ], }

    将 PRINCIPAL_LIST 替换为以英文逗号分隔的用户正文列表,例如 admin_1@example.com,admin_2@example.com。

    此更改在您设置新政策后才会生效。

  4. 设置新的允许政策。

    curl "https://cloudresourcemanager.googleapis.com/1/projects/PROJECT_ID:setIamPolicy" \
        --request POST \
        --header "authorization: Bearer TOKEN" \
        --header "Content-Type: application/json; charset=utf-8" \
        --data 'ALLOW_POLICY'
    

    替换以下内容:

    • PROJECT_ID:专用密钥项目的标识符。
    • ALLOW_POLICY:您在上一步中创建的更新后的允许政策 JSON,包括现有的角色授予和您刚刚添加的角色授予。

Terraform

以下 Terraform 示例在专用密钥项目中启用 Cloud KMS API,并向之前确定的 Cloud KMS 管理员正文授予 roles/cloudkms.admin。

# Enable the Cloud KMS API in the key project
resource "google_project_service" "enable_api" {
  service                    = "cloudkms.googleapis.com"
  project                    = google_project.key_management_project.project_id
  disable_on_destroy         = false
  disable_dependent_services = false
  depends_on                 = [google_project.key_management_project]
}

/* Grant role for Cloud KMS admins to use Autokey in the
   dedicated key project */
resource "google_project_iam_binding" "autokey_project_admin" {
  project    = google_project.key_management_project.project_id
  role       = "roles/cloudkms.admin"
  members    = var.autokey_project_kms_admins
  depends_on = [ google_project.key_management_project ]
}

在资源文件夹中启用 Cloud KMS Autokey

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要启用 Autokey 并使用专用项目密钥存储的文件夹。
  3. 在 Autokey 部分中,点击管理。
  4. 点击配置。
  5. 对于配置源,选择为文件夹配置。
  6. 在配置中,选择启用专用项目密钥存储。
  7. 选择您的关键项目,然后点击提交。

    系统会显示一条消息,确认已在相应文件夹中启用 Cloud KMS Autokey。

gcloud

  1. 创建一个包含以下 AutokeyConfig 的 YAML 文件:

    name: folders/FOLDER_NUMBER/autokeyConfig
    keyProjectResolutionMode: DEDICATED_KEY_PROJECT
    keyProject: projects/PROJECT_ID
    

    替换以下内容:

    • FOLDER_NUMBER:您要启用 Autokey 并使用专用项目密钥存储的文件夹的编号。
    • PROJECT_ID:专用密钥项目的标识符。
  2. 将 AutokeyConfig 应用到文件夹:

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    将 AUTOKEY_CONFIG_PATH 替换为您在上一步中创建的 YAML 文件的路径。

REST

为要启用专用项目密钥存储的文件夹创建 AutokeyConfig:

curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_ID/autokeyConfig?updateMask=keyProject,keyProjectResolutionMode" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProject": "projects/PROJECT_ID", "keyProjectResolutionMode": "DEDICATED_KEY_PROJECT"}'

替换以下内容:

  • FOLDER_ID:您要启用 Autokey 的文件夹的 ID。
  • PROJECT_ID:密钥项目的 ID。

Terraform

/* Enable AutokeyConfig for dedicated-project key storage in the
   folder */
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = "projects/${google_project.key_management_project.project_id}"
  key_project_resolution_mode = "DEDICATED_KEY_PROJECT"
  /* For folder scope, valid values are DEDICATED_KEY_PROJECT,
     RESOURCE_PROJECT, and DISABLED. With DEDICATED_KEY_PROJECT, define the
    key_project as well. With RESOURCE_PROJECT, omit key_project. Keys will
    be created in the same project as the protected resource. */
}

设置 Cloud KMS 服务代理

密钥项目的 Cloud KMS 服务代理会在资源创建期间代表 Cloud KMS 管理员创建密钥并应用 IAM 政策绑定。为了能够创建和分配密钥,Cloud KMS 服务代理需要 Cloud KMS 管理员权限。

gcloud

  1. 创建 Cloud KMS 服务代理:

    gcloud beta services identity create --service=cloudkms.googleapis.com \
        --project=PROJECT_NUMBER
    

    将 PROJECT_NUMBER 替换为密钥项目的项目编号。

    输出类似于以下内容:

    Service identity created: service-PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com
    

    该命令的输出表明,Cloud EKM 服务账号(具有 gcp-sa-ekms 子网域)已创建。不过,该命令还会创建 Cloud KMS 服务代理(具有 gcp-sa-cloudkms 子网域),这是您稍后在这些说明中使用的服务代理。

  2. 向服务代理授予 Cloud KMS 管理员权限:

    gcloud projects add-iam-policy-binding PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
    

    将 PROJECT_NUMBER 替换为密钥项目的项目编号。

Terraform

# Create the Cloud KMS service agent
resource "google_project_service_identity" "KMS_Service_Agent" {
  provider   = google-beta
  service    = "cloudkms.googleapis.com"
  project    = google_project.key_management_project.project_id
  depends_on = [google_project.key_management_project]
}

/* Grant role for the Cloud KMS service agent to use delegated
  Cloud KMS administrator permissions */
resource "google_project_iam_member" "autokey_project_admin" {
  project = google_project.key_management_project.project_id
  role    = "roles/cloudkms.admin"
  member  = "serviceAccount:service-${google_project.key_management_project.number}@gcp-sa-cloudkms.iam.gserviceaccount.com"
}

启用 Autokey 并使用同项目密钥存储

如果您将 Autokey 与同项目密钥存储搭配使用,Autokey 会在受保护资源所在的同一项目中创建密钥。使用同项目密钥存储的项目可以位于使用专用项目密钥存储的文件夹中。在项目上启用 Autokey 后,项目级 Autokey 配置会覆盖父文件夹中的 Autokey 配置。

如需为单个项目启用 Autokey 和同项目密钥存储,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要启用 Autokey 并使用同项目密钥存储的项目。
  3. 在 Autokey 部分中,点击管理。
  4. 点击配置。
  5. 对于配置源,选择为项目配置。
  6. 对于配置,请选择启用同项目密钥存储。
  7. 点击提交。

    系统会显示一条消息,确认已在项目中启用 Cloud KMS Autokey。

gcloud

  1. 创建一个包含以下 AutokeyConfig 的 YAML 文件:

    name: projects/PROJECT_ID/autokeyConfig
    keyProjectResolutionMode: RESOURCE_PROJECT
    keyProject:
    

    将 PROJECT_ID 替换为要启用 Autokey 并将密钥存储在同一项目中的项目的标识符。

  2. 将 AutokeyConfig 应用于项目:

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    将 AUTOKEY_CONFIG_PATH 替换为您在上一步中创建的 YAML 文件的路径。

  3. 在项目中启用 Cloud KMS API:

    gcloud services enable cloudkms.googleapis.com
    

REST

  1. 使用 REST API 为您要启用 Autokey 并使用同项目密钥存储的项目创建 AutokeyConfig:

    curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/autokeyConfig?updateMask=keyProjectResolutionMode,keyProject" \
        --request "PATCH" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{"keyProjectResolutionMode": "RESOURCE_PROJECT", "keyProject": ""}'
    

    将 PROJECT_ID 替换为要启用 Autokey 的项目的 ID。

  2. 在 gcloud CLI 中,为项目启用 Cloud KMS API:

    gcloud services enable cloudkms.googleapis.com
    

Terraform

如需在单个项目上启用 Autokey 并使用同项目密钥存储,请使用类似于以下内容的 autokey_config_project 资源:

/* To set autokey config for a project */
resource "google_kms_autokey_config" "autokey_config_project" {
  provider = google-beta
  project = "projects/${google_project.key_management_project.project_id}"
  key_project_resolution_mode = "RESOURCE_PROJECT"
  # For project scope, valid values are RESOURCE_PROJECT or DISABLED
}

如需为文件夹中的所有项目启用同项目密钥存储 Autokey,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要启用 Autokey 并使用同项目密钥存储的文件夹。
  3. 点击配置。
  4. 对于配置源,选择为文件夹配置。
  5. 对于配置,请选择启用同项目密钥存储。
  6. 点击提交。

    系统会显示一条消息,确认已在相应文件夹中启用 Cloud KMS Autokey。

gcloud

  1. 创建一个包含以下 AutokeyConfig 的 YAML 文件:

    name: folders/FOLDER_NUMBER/autokeyConfig
    keyProjectResolutionMode: RESOURCE_PROJECT
    keyProject:
    

    将 FOLDER_NUMBER 替换为要启用 Autokey 并使用同项目密钥存储的文件夹的编号。

  2. 将 AutokeyConfig 应用到文件夹:

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    将 AUTOKEY_CONFIG_PATH 替换为您在上一步中创建的 YAML 文件的路径。

REST

  1. 使用 REST API,为要启用 Autokey 并将密钥存储在同一项目中的文件夹创建 AutokeyConfig:

    curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_ID/autokeyConfig?updateMask=keyProjectResolutionMode,keyProject" \
        --request "PATCH" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{"keyProjectResolutionMode": "RESOURCE_PROJECT", "keyProject": ""}'
    

    将 FOLDER_ID 替换为要启用 Autokey 的文件夹的 ID。此命令会为文件夹中的所有项目启用 Autokey 和同项目密钥存储。

  2. 在 gcloud CLI 中,在您希望使用 Autokey 和同项目密钥存储的每个项目中启用 Cloud KMS API:

    gcloud services enable cloudkms.googleapis.com
    

    您可以一次性为每个项目启用 Cloud KMS API,也可以根据需要为各个项目启用该 API。在为项目启用 Cloud KMS API 之前,开发者无法在该项目中使用 Autokey。

Terraform

如需在文件夹中的所有项目上启用 Autokey 并使用同项目密钥存储,请使用类似于以下内容的 folder_config 资源:

/* Enable AutokeyConfig on a folder */
resource "google_kms_autokey_config" "folder_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.name
  key_project_resolution_mode = "RESOURCE_PROJECT"
  /* For folder scope, valid values are DEDICATED_KEY_PROJECT,
     RESOURCE_PROJECT, or DISABLED. With DEDICATED_KEY_PROJECT, define the
     key_project as well. With RESOURCE_PROJECT, omit key_project. Keys will
     be created in the same project as the protected resource. */
}

清除 Autokey 配置

您可以清除文件夹或项目中的 Autokey 配置,以恢复使用父文件夹的配置。

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要清除自动密钥配置的文件夹或项目。
  3. 在 Autokey 部分中,点击管理。
  4. 点击配置。
  5. 对于配置来源,选择继承。
  6. 点击提交。

gcloud

  1. 创建一个包含以下 AutokeyConfig 的 YAML 文件:

    name: RESOURCE_TYPE/RESOURCE_ID/autokeyConfig
    keyProjectResolutionMode: KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED
    keyProject:
    

    替换以下内容:

    • RESOURCE_TYPE:要清除自动密钥配置的资源类型。设置为 folders 或 projects。
    • RESOURCE_ID:您要清除 Autokey 配置的文件夹的标识符。
  2. 将 AutokeyConfig 应用于文件夹或项目:

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    将 AUTOKEY_CONFIG_PATH 替换为您在上一步中创建的 YAML 文件的路径。

REST

清除您要恢复为继承的 Autokey 配置的文件夹或项目的 AutokeyConfig:

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/autokeyConfig?updateMask:keyProjectResolutionMode,keyProject" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProjectResolutionMode": "KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED", "keyProject": ""}'

替换以下内容:

  • RESOURCE_TYPE:您要停用自动密钥的资源类型。设置为 folders 或 projects。
  • RESOURCE_ID:您要停用使用同项目密钥存储的 Autokey 的文件夹的标识符。

Terraform

# Clear AutokeyConfig for the folder
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = ""
  key_project_resolution_mode = "KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED"
}

查看有效的 Autokey 配置

您可以查看文件夹或项目的有效 Autokey 配置。有效的 Autokey 配置会告知您以下信息:

  • 所选资源是否已启用 Autokey。
  • 如果启用了 Autokey,则所选资源是使用专用项目密钥存储还是同项目密钥存储。
  • 如果所选资源使用专用项目密钥存储,则为专用密钥项目的资源标识符。
  • 此 Autokey 配置是从父级文件夹继承的,还是在所选资源上配置的。

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要查看 Autokey 设置的文件夹或项目。
  3. 在 Autokey 部分中,点击管理。

gcloud

查看有效的 AutokeyConfig:

gcloud kms autokey-config show-effective-config \
    --RESOURCE_TYPE=RESOURCE_ID

替换以下内容:

  • RESOURCE_TYPE:您要查看有效 Autokey 配置的资源类型。设置为 folder 或 project。
  • RESOURCE_ID:您要查看有效 Autokey 配置的资源的标识符。

输出类似于以下内容:

keyProject: KEY_PROJECT
keyProjectResolutionMode: KEY_PROJECT_RESOLUTION_MODE
source:
  name: RESOURCE_IDENTIFIER

此输出包括以下值:

  • KEY_PROJECT:关键项目的资源标识符,例如 projects/PROJECT_ID。如果 Autokey 已停用,或者资源是启用了同项目密钥存储的文件夹,则会省略此字段。
  • KEY_PROJECT_RESOLUTION_MODE:资源的 keyProjectResolutionMode,例如 RESOURCE_PROJECT、DEDICATED_KEY_PROJECT 或 DISABLED。 如果资源或任何父资源未启用 Autokey,则省略此字段。
  • RESOURCE_IDENTIFIER:配置了 AutokeyConfig 的资源的资源标识符。这样一来,您就可以确定 AutokeyConfig 是从父资源继承的,还是在您查询的资源上配置的。

REST

查看文件夹或项目的有效 AutokeyConfig:

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:showEffectiveAutokeyConfig" \
    --request "GET" \
    --header "authorization: Bearer TOKEN"
  ```

Replace the following:
  • RESOURCE_TYPE:您要查看自动密钥配置的资源类型。设置为 folders 或 projects。
  • RESOURCE_ID:您要查看 Autokey 配置的资源的标识符。

输出类似于以下内容:

{
  "keyProject": KEY_PROJECT,
  "keyProjectResolutionMode": KEY_PROJECT_RESOLUTION_MODE,
  "source": {
    RESOURCE_IDENTIFIER
  }
}

此输出包括以下值:

  • KEY_PROJECT:关键项目的资源标识符,例如 projects/PROJECT_ID。如果 Autokey 已停用,或者资源是启用了同项目密钥存储的文件夹,则省略此字段。
  • KEY_PROJECT_RESOLUTION_MODE:资源的 keyProjectResolutionMode,例如 RESOURCE_PROJECT、DEDICATED_KEY_PROJECT 或 DISABLED。 如果资源或任何父资源未启用 Autokey,则省略此字段。
  • RESOURCE_IDENTIFIER:配置了 AutokeyConfig 的资源的资源标识符。这样一来,您就可以确定 AutokeyConfig 是从父资源继承的,还是在您查询的资源上配置的。

SQL

您可以将 SQL 查询与 Cloud Asset Inventory 搭配使用,以评估文件夹或组织中所有项目的有效 Autokey 配置。

  1. 为组织 ID 和搜索范围设置 Bash 环境变量。

    export ORG_ID="ORGANIZATION_ID"
    export TARGET_SCOPE="RESOURCE_TYPE/RESOURCE_ID" 
    

    替换以下内容:

    • ORGANIZATION_ID:您组织的数字标识符。
    • RESOURCE_TYPE:您要查看有效 Autokey 配置的资源类型。设置为 organizations 可查看组织中所有项目的配置,或设置为 folders 可查看特定文件夹中所有项目的配置。
    • RESOURCE_ID:您要查看有效自动密钥配置的组织或文件夹的数字标识符。
  2. 使用 gcloud asset query 命令执行查询。

    gcloud asset query \
        --organization="${ORG_ID}" \
        --statement="
    WITH ProjectConfigs AS (
      SELECT
        p.name AS project_name,
        ARRAY_AGG(
          STRUCT(
            ancestor AS config_source,
            c.resource.data.state AS state,
            c.resource.data.keyProjectResolutionMode AS resolution_mode,
            c.resource.data.keyProject AS key_project
          )
          ORDER BY offset
          LIMIT 1
        )[SAFE_OFFSET(0)] AS effective_config
      FROM
        STANDARD_METADATA p
      CROSS JOIN
        UNNEST(p.ancestors) AS ancestor WITH OFFSET AS offset
      JOIN
        cloudkms_googleapis_com_AutokeyConfig c
      ON
        ancestor = REGEXP_REPLACE(c.name, r'^//cloudkms\.googleapis\.com/([^/]+/\d+)/autokeyConfig$', r'\1')
      WHERE
        p.assetType = 'cloudresourcemanager.googleapis.com/Project'
      GROUP BY
        p.name
    )
    SELECT
      REPLACE(r.name, '//cloudresourcemanager.googleapis.com/', '') AS project_name,
      p.resource.data.projectId AS project_id,
      COALESCE(rc.effective_config.config_source, 'No Autokey') AS effective_config_source,
      rc.effective_config.state AS autokey_config_state,
      rc.effective_config.resolution_mode AS resolution_mode,
      CASE 
        WHEN rc.effective_config.resolution_mode = 'RESOURCE_PROJECT' THEN p.resource.data.projectId
        ELSE COALESCE(REPLACE(rc.effective_config.key_project, 'projects/', ''), 'No Key Project')
      END AS key_project
    FROM
      STANDARD_METADATA r
    LEFT JOIN
      ProjectConfigs rc
    ON
      r.name = rc.project_name
    LEFT JOIN
      cloudresourcemanager_googleapis_com_Project p
    ON
      r.name = p.name
    WHERE
      r.assetType = 'cloudresourcemanager.googleapis.com/Project'
      AND '${TARGET_SCOPE}' IN UNNEST(r.ancestors)
    "
    

    输出包含以下字段:

    • project_number:每个项目的完整数字资源标识符,例如 projects/PROJECT_NUMBER。
    • project_id:每个项目的标识符,例如 PROJECT_ID。
    • effective_config_source:设置项目 Autokey 配置的资源的资源标识符,例如,如果配置是从父文件夹继承的,则为 folders/FOLDER_NUMBER;如果配置是在项目上设置的,则为 projects/PROJECT_NUMBER。如果项目没有或未继承 AutokeyConfig,则此字段会显示 No Autokey。
    • autokey_config_state:指示文件夹中是否存在 Autokey 配置(即使该配置处于 DISABLED 状态)。ACTIVE如果项目没有或未继承 AutokeyConfig,则此字段为空。
    • resolution_mode:项目上有效自动密钥配置的关键项目解析模式。
    • key_project:表示 Autokey 在项目中为资源创建密钥的位置,例如,当项目使用专用项目密钥存储时为 projects/KEY_PROJECT_ID,当项目使用同项目密钥存储时为 RESOURCE_PROJECT_ID。如果未在项目中启用 Autokey,此字段会显示 No key project。

停用 Autokey

可以启用 Autokey 的角色也可以停用它。如需停用 Autokey,您可以清除 AutokeyConfig 或将 feedbackKeyProjectResolutionMode 设置为 DISABLED。您可以针对文件夹或项目停用 Autokey。您还可以为启用了 Autokey 的文件夹中的各个项目停用 Autokey。

为文件夹或项目停用 Autokey 后,当开发者在该文件夹或项目中创建资源时,Cloud KMS 服务代理将无法再为他们创建密钥。

如果您想完全停用 Autokey,建议您同时移除 roles/cloudkms.autokeyAdmin 和 roles/cloudkms.autokeyUser 角色的 IAM 绑定。

停用 Autokey 不会影响密钥项目中的现有密钥。您可以继续使用这些密钥来保护您的资源。

为文件夹或项目停用 Autokey

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理控件页面。

    前往密钥管理控制项

  2. 在上下文选择器中,选择要停用 Autokey 的文件夹或项目。
  3. 在 Autokey 部分中,点击管理。
  4. 点击配置。
  5. 在配置源部分,选择为文件夹配置或为项目配置。
  6. 对于配置,请选择为文件夹停用 Autokey 或为项目停用 Autokey。
  7. 点击提交。

    系统会显示一条消息,提示您确认是否要停用 Autokey。

  8. 如需停用 Autokey,请点击确认。

    系统会显示一条消息,确认 Cloud KMS Autokey 已停用。

gcloud

  1. 创建一个包含以下 AutokeyConfig 的 YAML 文件:

    name: RESOURCE_TYPE/RESOURCE_ID/autokeyConfig
    keyProjectResolutionMode: DISABLED
    keyProject:
    

    替换以下内容:

    • RESOURCE_TYPE:您要停用自动密钥的资源类型。设置为 folders 或 projects。
    • RESOURCE_ID:您要停用使用同项目密钥存储的 Autokey 的文件夹的标识符。
  2. 将 AutokeyConfig 应用于文件夹或项目:

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    将 AUTOKEY_CONFIG_PATH 替换为您在上一步中创建的 YAML 文件的路径。

REST

更新要停用 Autokey 的文件夹或项目的 AutokeyConfig:

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/autokeyConfig?updateMask:keyProjectResolutionMode,keyProject" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProjectResolutionMode": "DISABLED", "keyProject": ""}'

替换以下内容:

  • RESOURCE_TYPE:您要停用自动密钥的资源类型。设置为 folders 或 projects。
  • RESOURCE_ID:您要停用使用同项目密钥存储的 Autokey 的文件夹的标识符。

Terraform

# Clear AutokeyConfig for the folder
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = ""
  key_project_resolution_mode = "DISABLED"
}

撤消 Autokey 角色

通过更新 AutokeyConfig 停用 Autokey 可防止 Cloud KMS 服务代理在受影响的项目或文件夹中配置新密钥。不过,如果您想完全停用 Autokey,建议您同时移除 roles/cloudkms.autokeyAdmin 和 roles/cloudkms.autokeyUser 角色的 IAM 绑定。

  1. 可选:撤消 roles/cloudkms.autokeyAdmin 角色:

    gcloud resource-manager folders remove-iam-policy-binding \
        FOLDER_ID --role=roles/cloudkms.autokeyAdmin \
        --member=user:USER_EMAIL
    

    替换以下内容:

    • FOLDER_ID:您已停用 Autokey 的文件夹的 ID。
    • USER_EMAIL:您要撤消其 Autokey 管理权限的用户的电子邮件地址。
  2. 可选:在文件夹级层撤消 roles/cloudkms.autokeyUser 角色:

    gcloud resource-manager folders remove-iam-policy-binding \
        FOLDER_ID --role=roles/cloudkms.autokeyUser \
        --member=user:USER_EMAIL
    

    替换以下内容:

    • FOLDER_ID:您已停用 Autokey 的文件夹的 ID。
    • USER_EMAIL:您要撤消其使用 Autokey 权限的用户的电子邮件地址。
  3. 可选:在项目级层撤消 roles/cloudkms.autokeyUser 角色:

    gcloud projects remove-iam-policy-binding \
        RESOURCE_PROJECT_NUMBER \
        --role=roles/cloudkms.autokeyUser \
        --member=user:USER_EMAIL
    

    替换以下内容:

    • RESOURCE_PROJECT_NUMBER:您已停用自动密钥的文件夹中的资源项目的项目编号。
    • USER_EMAIL:您要撤消其使用 Autokey 权限的用户的电子邮件地址。
  4. 可选:如果您不打算继续将密钥项目用于其他文件夹的 Autokey,请撤消 Cloud KMS 服务代理的 roles/cloudkms.admin 角色:

    gcloud projects remove-iam-policy-binding \
        KEY_PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
    

    将 KEY_PROJECT_NUMBER 替换为密钥项目的数字 ID。

  5. 可选:如果您不打算继续使用在密钥项目中创建的密钥,请撤消 Cloud KMS 管理员的 roles/cloudkms.admin 角色:

    gcloud projects remove-iam-policy-binding \
        KEY_PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=user:KEY_ADMIN_EMAIL
    

    替换以下内容:

    • KEY_PROJECT_NUMBER:密钥项目的项目编号。
    • KEY_ADMIN_EMAIL:您要撤消其 Autokey 配置权限的用户的电子邮件地址。

后续步骤