启用 Cloud KMS Autokey

本页面介绍了如何在 资源文件夹中如需详细了解 Autokey,请参阅 Autokey 概览。本页中的步骤 应由安全管理员完成。

准备工作

您必须满足以下条件,才能启用 Cloud KMS Autokey:

  • 包含您要为其启用自动键入功能的文件夹的组织资源。如果您没有要启用的文件夹 Autokey,您可以创建新资源 文件夹。对此文件夹启用 Autokey 会启用 为文件夹中的所有资源项目启用 Autokey。
  • 如果您想在资源项目中使用 Autokey,但 它们不在用于启用 Autokey 的文件夹中, 可以将现有资源项目移至新文件夹

所需的角色

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

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

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

所需权限

如需启用和配置 Autokey,您需要具备以下权限:

  • cloudkms.autokeyConfigs.*
  • cloudkms.projects.showEffectiveAutokeyConfig
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.setIamPolicy
  • billing.resourceAssociations.create

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

确定启用 Autokey 的方式

您可以在基础架构即代码中启用 Autokey 来实施所需的配置更改。如果您 想要使用 Terraform 启用 Autokey,请参阅启用 Autokey 使用 Terraform。如果不想使用 Terraform 首先,请按照下一部分中的说明操作。

设置密钥项目

我们建议您创建新的密钥项目以包含 Cloud KMS 资源 由 Autokey 创建。您应该在 组织资源。如果您已经拥有要使用的密钥项目 对于 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 或 要在其中创建密钥项目的文件夹。

准备 Autokey 密钥项目

控制台

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

    启用 API

  2. 如果您使用的是新的密钥项目,请向 Cloud KMS 授予 对密钥项目的管理员权限 管理员用户:

    1. 在 Google Cloud 控制台中,转到 IAM 页面。

      转到 IAM

    2. 选择密钥项目。

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

    4. 选择 Cloud KMS Admin 角色。

    5. 点击保存

gcloud

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

    gcloud services enable cloudkms.googleapis.com
    
  2. 向 Cloud KMS 授予对密钥项目的管理员权限 发送给 Cloud KMS 管理员用户:

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

    替换以下内容:

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

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

控制台

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

    前往 KMS 控件

  2. 从上下文选择器中,选择您要启用的文件夹 Autokey。

  3. 点击启用

  4. 选择您的密钥项目,然后点击提交

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

API

为您要启用的文件夹创建 AutokeyConfig Autokey:

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

替换以下内容:

  • FOLDER_ID:文件夹的 ID 用于启用 Autokey 的位置。
  • PROJECT_ID:密钥项目的 ID。

设置 Cloud KMS 服务代理

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

  1. 创建 Cloud KMS 服务代理:

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

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

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

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

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

授予 Autokey 用户角色

在您的开发者可以使用 Autokey 之前,您必须向其授予 所需的角色。您可以在文件夹级别或项目级别授予该角色 。此角色允许开发者向 Cloud KMS 请求密钥 并在该文件夹或项目中创建资源时服务代理。

选择以下一个或两个步骤:

  • 在文件夹级层授予 roles/cloudkms.autokeyUser 角色:

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

    替换以下内容:

    • FOLDER_ID: 文件夹,用于启用 Autokey。
    • USER_EMAIL:要向其发送邮件的用户的电子邮件地址 您要授予其使用 Autokey 的权限。
  • 在项目级授予 roles/cloudkms.autokeyUser 角色:

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

    替换以下内容:

    • PROJECT_ID:资源项目的 ID。
    • USER_EMAIL:要向其发送邮件的用户的电子邮件地址 您要授予其使用 Autokey 的权限。

您的 Autokey 开发者现在可以按需创建密钥。了解 创建使用 Autokey 按需创建的密钥进行保护的资源, 请参阅使用 Autokey 创建受保护的资源

使用 Terraform 启用 Autokey

以下 Terraform 示例会自动执行以下设置步骤:

  • 创建资源文件夹
  • 创建密钥项目
  • 授予用户权限
  • 设置 Cloud KMS 服务代理
  • 启用 Autokey

您必须在资源文件夹中单独创建资源项目。

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]
}

/* The project ID to use for the 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 Key Management Project. This project will contain the Key Rings and Keys generated by Cloud KMS Autokey"
  type        = string
  default     = "KEY_PROJECT_ID"
}

# Create a new folder
resource "google_folder" "autokey_folder" {
  parent       = "organizations/${var.organization_ID}"
  display_name = "autokey_folder"
}

# 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
}

# 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
}

# Grant role for Cloud KMS admins to use Autokey in the 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 ]
}

# 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]
}

# Create 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 admin 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-ekms.iam.gserviceaccount.com"
}

/* Enable AutokeyConfig in this folder */
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = google_project.key_management_project.project_id
}

替换以下内容:

  • BILLING_ACCOUNT_ID:您的 Google Cloud 账单 账号 ID。结算账号 ID 是一个由 18 个字符组成的字母数字值 (例如,010101-F0FFF0-10XX01)。
  • AUTOKEY_ADMIN_USER_IDS:以下电子邮件地址的电子邮件地址列表: 拥有 roles/cloudkms.autokeyAdmin 角色的用户, 示例 "Ariel@example.com", "Charlie@example.com"
  • AUTOKEY_DEVELOPER_USER_IDS:应具有 roles/cloudkms.autokeyUser 角色的用户的电子邮件地址列表,例如 "Kalani@example.com", "Mahan@example.com"
  • KEY_PROJECT_ADMIN_USER_IDS:以下电子邮件地址的电子邮件地址列表: 应具有 roles/cloudkms.admin 角色的用户,例如 "Sasha@example.com", "Nur@example.com"
  • KEY_PROJECT_ID:要用于键的 ID 项目,例如 autokey-key-project

强制使用 Autokey

如果要在一个文件夹中强制使用 Autokey,可以这样做 将 IAM 访问权限控制与 CMEK 组织政策相结合。工作原理 移除主账号的密钥创建权限 Cloud KMS 服务代理,然后要求将所有资源 由 CMEK 进行保护。

如需在文件夹中强制使用 Autokey,请完成以下步骤:

  1. 移除在密钥项目中手动创建密钥的权限。如果无法 则只能创建由 Autokey 创建的密钥 资源。如需详细了解如何控制访问权限,请参阅 使用 IAM 进行访问权限控制

  2. 在该文件夹上设置组织政策,要求必须 使用constraints/gcp.restrictNonCmekServices通过 CMEK 进行保护 限制条件。如需了解详情,请参阅 需要 CMEK 保护

  3. 在文件夹上设置组织政策,要求用于 CMEK 的密钥必须来自使用 constraints/gcp.restrictCmekCryptoKeyProjects 约束条件的 Autokey 密钥项目。有关 请参阅 限制将 Cloud KMS 密钥用于 CMEK

停用 Autokey

Cloud KMS Autokey 在文件夹级层启用和停用。相同 可以为文件夹启用 Autokey 的角色可以停用 Autokey 。要对文件夹停用 Autokey,您必须清除 AutokeyConfig,可解除该文件夹与 Autokey 密钥项目。

移除该文件夹的 Autokey 配置后, 在以下情况下,Cloud KMS 服务代理无法再为开发者创建密钥: 他们会在文件夹中创建资源移除文件夹和 密钥项目会停用文件夹中的 Autokey;然而,我们 建议您同时移除 roles/cloudkms.autokeyAdminroles/cloudkms.autokeyUser 角色。

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

清除 AutokeyConfig

控制台

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

    开始 使用 KMS 控件

  2. 从上下文选择器中,选择要停用的文件夹 Autokey。

  3. 点击停用

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

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

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

API

清除要停用的文件夹的 AutokeyConfig Autokey:

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

替换以下内容:

  • FOLDER_ID:文件夹的 ID 用于停用 Autokey 的位置。

撤消 Autokey 角色

  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 的文件夹。
    • 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:您已停用自动键盘按键的文件夹的 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: 已停用 Autokey 的文件夹中的资源项目。
    • USER_EMAIL:其电子邮件地址 您想撤消使用 Autokey 的权限。
  4. 可选:如果您不打算继续将密钥项目用于 Autokey 用于其他文件夹,撤消 roles/cloudkms.admin 角色 为 Cloud KMS 服务代理指定以下权限:

    gcloud projects remove-iam-policy-binding KEY_PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-ekms.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: 密钥项目
    • USER_EMAIL:您要撤消使用 Autokey 权限的用户的电子邮件地址。

后续步骤