本页介绍了如何在资源文件夹中启用和配置 Cloud KMS AutoKey。如需详细了解 Autokey,请参阅 Autokey 概览。此页面上的步骤应由安全管理员完成。
准备工作
您必须满足以下条件,然后才能启用 Cloud KMS Autokey:
- 包含您要为其启用 Autokey 的文件夹的组织资源。如果您没有要启用 Autokey 的文件夹,可以创建新的资源文件夹。在此文件夹上启用 Autokey 会为该文件夹中的所有资源项目启用 Autokey。
- 如果您有要使用 Autokey 的资源项目,但这些项目不在您要启用 Autokey 的文件夹中,则可以将现有资源项目移至新文件夹。
所需的角色
如需获得启用和配置 Autokey 所需的权限,请让管理员向您授予组织或文件夹的以下 IAM 角色:
-
Cloud KMS Autokey Admin (
roles/cloudkms.autokeyAdmin
) -
Folder IAM Admin (
roles/resourcemanager.folderIamAdmin
) -
Billing Account User (
roles/billing.user
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含启用和配置 Autokey 所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需启用和配置 Autokey,您需要具备以下权限:
-
cloudkms.autokeyConfigs.*
-
cloudkms.projects.showEffectiveAutokeyConfig
-
resourcemanager.folders.get
-
resourcemanager.folders.getIamPolicy
-
resourcemanager.folders.setIamPolicy
-
billing.resourceAssociations.create
决定如何启用 Autokey
您可以使用 Terraform 进行所需的配置更改,以便在基础架构即代码策略中启用 Autokey。如果您想使用 Terraform 启用 Autokey,请参阅本页中的使用 Terraform 启用 Autokey。如果您不想使用 Terraform,请先按照下一部分中的说明操作。
设置密钥项目
我们建议您创建一个新的密钥项目,以包含 Autokey 创建的 Cloud KMS 资源。您应在组织资源中创建密钥项目。如果您已经有一个要用于 Autokey 创建的密钥的密钥项目,则可以跳过创建密钥项目部分,直接从本页上的配置 Autokey 密钥项目继续操作。
您可以在计划启用 Autokey 的同一文件夹中创建密钥项目。您不应在密钥项目中创建其他资源。如果您尝试在密钥项目中创建受 Autokey 保护的资源,Autokey 会拒绝新密钥请求。
如果您将来可能想要迁移到 Assured Workloads,请在受这些密钥保护的资源所在的文件夹中创建密钥项目。
如果您的组织使用 constraints/gcp.restrictCmekCryptoKeyProjects
组织政策限制条件来确保所有 CMEK 均来自指定的关键项目,您必须将关键项目添加到允许的项目列表中。如需详细了解 CMEK 组织政策,请参阅 CMEK 组织政策。
创建密钥项目
控制台
- 在 Google Cloud 控制台中,前往管理资源页面。
- 在选择组织中,选择要在其中创建项目的组织资源。
- 点击 Create project。
- 在随即显示的新建项目窗口中,输入项目名称并选择结算账号。项目名称只能包含字母、数字、英文单引号、连字符、空格或英文感叹号,且长度必须介于 4 到 30 个字符之间。
- 对于位置,选择要用作密钥项目的父级资源。
- 如需完成项目的创建,请点击创建。
gcloud
创建新项目:
gcloud projects create PROJECT_ID \ --PARENT_TYPE=PARENT_ID
替换以下内容:
PROJECT_ID
:包含密钥环的项目的 ID。PARENT_TYPE
:您要在其中创建新密钥项目的资源类型。输入organization
可在指定组织下创建新的密钥项目,输入folder
可在指定文件夹下创建新的密钥项目。PARENT_ID
:您要在其中创建关键项目的组织或文件夹的 ID。
准备 Autokey 密钥项目
控制台
gcloud
在密钥项目上启用 Cloud KMS API:
gcloud services enable cloudkms.googleapis.com
向密钥项目授予 Cloud KMS 管理员权限。 重复运行以下命令,将
roles/cloudkms.admin
角色授予您自己和其他所有 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
控制台
在 Google Cloud 控制台中,前往 KMS 控件页面。
从上下文选择器中,选择要为其启用 Autokey 的文件夹。
点击启用。
选择您的关键项目,然后点击提交。
系统会显示一条消息,确认已为该文件夹启用 Cloud KMS Autokey。
API
为您要启用 Autokey 的文件夹创建 AutokeyConfig
:
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
:您要为其启用 Autokey 的文件夹的 ID。PROJECT_ID
:密钥项目的 ID。
设置 Cloud KMS 服务代理
密钥项目的 Cloud KMS 服务代理会代表 Cloud KMS 人为管理员在创建资源期间创建密钥并应用 IAM 政策绑定。为了能够创建和分配密钥,Cloud KMS 服务代理需要 Cloud KMS 管理员权限。
创建 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
子网域),这是您在本说明的后面部分中要使用的服务代理。向服务代理授予 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
替换为关键项目的项目编号。
授予 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
:您要为其启用自动键盘的文件夹的 ID。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-cloudkms.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 = "projects/${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 服务代理以外的正文中移除密钥创建权限,然后要求所有资源都使用 Autokey 密钥项目通过 CMEK 进行保护。
如需强制在某个文件夹中使用 Autokey,请完成以下步骤:
移除在密钥项目中手动创建密钥的权限。如果无法手动创建密钥,则只能在此项目中创建由 Autokey 创建的密钥。如需详细了解如何控制访问权限,请参阅使用 IAM 进行访问权限控制。
针对文件夹设置组织政策,要求必须使用
constraints/gcp.restrictNonCmekServices
限制条件通过 CMEK 保护资源。如需了解详情,请参阅要求使用 CMEK 保护。在文件夹上设置组织政策,要求用于 CMEK 的密钥必须来自使用
constraints/gcp.restrictCmekCryptoKeyProjects
约束条件的 Autokey 密钥项目。如需了解详情,请参阅限制对 CMEK 使用 Cloud KMS 密钥。
停用 Autokey
Cloud KMS Autokey 在文件夹级别启用和停用。可以为文件夹启用 Autokey 的角色也可以为该文件夹停用 Autokey。如需为文件夹停用 Autokey,您必须清除 AutokeyConfig
以解除文件夹与 Autokey 密钥项目之间的关联。
移除文件夹上的 Autokey 配置后,当开发者在文件夹中创建资源时,Cloud KMS 服务代理将无法再为他们创建密钥。移除文件夹与密钥项目之间的关联会停用文件夹中的 Autokey;不过,我们建议您还移除 roles/cloudkms.autokeyAdmin
和 roles/cloudkms.autokeyUser
角色的 IAM 绑定。
停用 Autokey 不会影响密钥项目中的现有密钥。您可以继续使用这些密钥来保护您的资源。
清除 AutokeyConfig
控制台
在 Google Cloud 控制台中,前往 KMS 控件页面。
从上下文选择器中,选择要停用 Autokey 的文件夹。
点击停用。
系统会显示一条消息,提示您确认是否要停用“自动键入”。
如要停用“自动键入”,请点击确认。
系统会显示一条消息,确认 Cloud KMS Autokey 已在该文件夹上停用。
API
清除要停用 Autokey 的文件夹对应的 AutokeyConfig
:
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
:您要停用 Autokey 的文件夹的 ID。
撤消 Autokey 角色
可选:撤消
roles/cloudkms.autokeyAdmin
角色:gcloud resource-manager folders remove-iam-policy-binding \ FOLDER_ID --role=roles/cloudkms.autokeyAdmin \ --member=user:USER_EMAIL
替换以下内容:
FOLDER_ID
:您已停用自动键盘的文件夹的 ID。USER_EMAIL
:您要撤消其管理 Autokey 权限的用户的电子邮件地址。
可选:在文件夹级撤消
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 权限的用户的电子邮件地址。
可选:撤消项目级层的
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 权限的用户的电子邮件地址。
可选:如果您不打算继续将 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。可选:如果您不打算继续使用在密钥项目中创建的密钥,请撤消 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 权限的用户的电子邮件地址。
后续步骤
- 详细了解何时使用 Autokey。
- 详细了解“自动解锁”功能的运作方式。
- 您的 Autokey 开发者现在可以使用 Autokey 创建受保护的资源。