本页面介绍了如何在资源文件夹中启用和配置 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 管理员权限。 重复执行以下命令,向您自己和其他 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 密钥的用户的电子邮件地址。
在资源文件夹中启用 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
:您要启用 Autokey 的文件夹的 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 密钥项目。如需了解详情,请参阅限制 Cloud KMS 密钥用于 CMEK。
停用 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。
如需停用 Autokey,请点击确认。
系统会显示一条消息,确认已在相应文件夹中停用 Cloud KMS Autokey。
API
清除要停用自动按键功能的文件夹对应的 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
:您已停用 Autokey 的文件夹的 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
:您已停用 Autokey 的文件夹的 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 开发者现在可以使用 Autokey 创建受保护的资源。