En esta página, se muestra cómo habilitar y configurar la clave automática de Cloud KMS para la administración centralizada de claves en una carpeta de recursos o para la administración delegada de claves en proyectos (vista previa). Para obtener más información sobre Autokey, consulta Descripción general de Autokey. Este documento está dirigido a los administradores.
Antes de comenzar
Antes de habilitar Autokey de Cloud KMS para la administración centralizada de claves con un proyecto de claves dedicado para todos los proyectos de una carpeta, debes tener lo siguiente:
Es un recurso de organización que contiene una carpeta en la que deseas habilitar Autokey. Si no tienes una carpeta en la que quieras habilitar Autokey, puedes crear una carpeta de recursos nueva. Si habilitas Autokey en esta carpeta, se habilitará para todos los proyectos de recursos dentro de la carpeta.
Si tienes proyectos de recursos en los que quieres usar la administración centralizada de claves con Autokey, pero no están dentro de una carpeta en la que habilitarás Autokey, puedes mover los proyectos de recursos existentes a carpetas nuevas.
Antes de habilitar Autokey para proyectos (versión preliminar) y, así, habilitar la administración de claves delegadas y las claves del mismo proyecto, debes tener uno de los siguientes elementos:
- Un proyecto Google Cloud en el que deseas habilitar Autokey y en el que el permiso
keyHandles.createno está bloqueado por una política de denegación de IAM. - Una carpeta Google Cloud en la que deseas habilitar Autokey, que contiene al menos un proyecto en el que el permiso
keyHandles.createno está bloqueado por una política de denegación de IAM.
Roles obligatorios
Para obtener los permisos que necesitas para habilitar y configurar Autokey, pídele a tu administrador que te otorgue los siguientes roles de IAM en la carpeta, el proyecto o un recurso principal:
-
Administrador de Autokey de Cloud KMS (
roles/cloudkms.autokeyAdmin) -
Administrador Service Usage (
roles/serviceusage.serviceUsageAdmin) -
Para habilitar Autokey centralizado, haz lo siguiente:
-
Administrador de IAM de carpeta (
roles/resourcemanager.folderIamAdmin) -
Usuario de cuenta de facturación (
roles/billing.user)
-
Administrador de IAM de carpeta (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para habilitar y configurar Autokey. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para habilitar y configurar Autokey:
-
cloudkms.autokeyConfigs.* -
cloudkms.projects.showEffectiveAutokeyConfig -
serviceusage.services.enable -
Para habilitar Autokey centralizado, haz lo siguiente:
-
resourcemanager.folders.get -
resourcemanager.folders.getIamPolicy -
resourcemanager.folders.setIamPolicy -
billing.resourceAssociations.create
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Decide cómo quieres habilitar Autokey
Puedes habilitar Autokey como parte de tu estrategia de infraestructura como código con Terraform para realizar los cambios de configuración necesarios. Si deseas usar Terraform para habilitar Autokey, consulta Cómo habilitar Autokey con Terraform en esta página. Si no quieres usar Terraform, comienza siguiendo las instrucciones de la siguiente sección.
Configura Autokey para la administración de claves centralizada
Cuando usas Autokey para la administración centralizada de claves en una carpeta, debes elegir un solo proyecto de claves que contenga todas las claves creadas por Autokey en esa carpeta. Si usas el modelo de administración de claves delegada (vista previa), no necesitas un proyecto de claves dedicado. Continúa desde Habilita Autokey para la administración de claves delegada.
Te recomendamos que crees un proyecto de claves nuevo para que contenga los recursos de Cloud KMS creados por Autokey. Debes crear el proyecto de clave dentro del recurso de organización. Si ya tienes un proyecto de claves que deseas usar para las claves creadas por Autokey, puedes omitir la sección Crea un proyecto de claves y continuar desde Configura el proyecto de claves de Autokey en esta página.
El proyecto de claves se puede crear dentro de la misma carpeta en la que planeas habilitar Autokey. No debes crear otros recursos dentro del proyecto de clave. Si intentas crear recursos protegidos por Autokey en el proyecto de claves, Autokey rechazará la solicitud de una clave nueva.
Si es posible que desees migrar a Assured Workloads en el futuro, crea el proyecto de claves dentro de la misma carpeta que los recursos protegidos por esas claves.
Si tu organización usa la restricción de política de la organización constraints/gcp.restrictCmekCryptoKeyProjects para garantizar que todas las CMEK provengan de proyectos clave especificados, debes agregar tu proyecto clave a la lista de proyectos permitidos. Para obtener más información sobre la política de la organización de CMEK, consulta Políticas de la organización de CMEK.
Crea un proyecto clave
Console
- En la Google Cloud consola, ve a la página Administrar recursos.
- En Seleccionar organización, selecciona el recurso de la organización en el que deseas crear un proyecto.
- Haz clic en Crear proyecto.
- En la ventana Proyecto nuevo que aparece, ingresa un nombre de proyecto y selecciona una cuenta de facturación. El nombre de un proyecto solo puede contener letras, números, comillas simples, guiones, espacios o signos de exclamación, y debe tener entre 4 y 30 caracteres.
- En Ubicación, selecciona el recurso que deseas que sea el principal de tu proyecto clave.
- Para terminar de crear el proyecto, haz clic en Crear.
gcloud
Crea un proyecto nuevo:
gcloud projects create PROJECT_ID \ --PARENT_TYPE=PARENT_IDReemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.PARENT_TYPE: Es el tipo de recurso en el que deseas crear el nuevo proyecto de claves. Ingresaorganizationpara crear el nuevo proyecto de clave en una organización determinada o ingresafolderpara crear el nuevo proyecto de clave en una carpeta determinada.PARENT_ID: Es el ID de la organización o la carpeta en la que deseas crear el proyecto clave.
Prepara el proyecto de claves de Autokey
Console
Habilita la API de Cloud KMS en tu proyecto de claves.
Si usas un proyecto de claves nuevo, otorga permisos de administrador de Cloud KMS en el proyecto de claves. Repite los siguientes pasos para otorgarte a ti y a cada uno de los demás usuarios administradores de Cloud KMS el rol de administrador de Cloud KMS:
En la consola de Google Cloud , dirígete a la página IAM.
Selecciona el proyecto clave.
Haz clic en Otorgar acceso y, luego, ingresa la dirección de correo electrónico del usuario.
Selecciona el rol Administrador de Cloud KMS.
Haz clic en Guardar.
gcloud
Habilita la API de Cloud KMS en tu proyecto de claves:
gcloud services enable cloudkms.googleapis.comOtorga permisos de administrador de Cloud KMS en el proyecto de claves. Repite el siguiente comando para otorgar el rol de
roles/cloudkms.admina ti y a cada uno de los demás usuarios administradores de Cloud KMS:gcloud projects add-iam-policy-binding PROJECT_NUMBER \ --role=roles/cloudkms.admin \ --member=user:KEY_ADMIN_EMAILReemplaza lo siguiente:
PROJECT_NUMBER: Es el número del proyecto de claves.KEY_ADMIN_EMAIL: Es la dirección de correo electrónico del usuario responsable de administrar las claves de Cloud KMS.
Habilita Autokey de Cloud KMS en una carpeta de recursos
Console
En la consola de Google Cloud , ve a la página Controles de KMS.
En el selector de contexto, selecciona la carpeta en la que deseas habilitar Autokey.
Haz clic en Habilitar.
Selecciona tu proyecto clave y, luego, haz clic en Enviar.
Un mensaje confirma que Autokey de Cloud KMS está habilitado en la carpeta.
API
Crea el AutokeyConfig para la carpeta en la que deseas habilitar 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"}'
Reemplaza lo siguiente:
FOLDER_ID: Es el ID de la carpeta en la que deseas habilitar Autokey.PROJECT_ID: Es el ID del proyecto de claves.
Configura el agente de servicio de Cloud KMS
El agente de servicio de Cloud KMS para un proyecto de claves crea claves y aplica vinculaciones de políticas de IAM durante la creación de recursos, en nombre de un administrador humano de Cloud KMS. Para poder crear y asignar claves, el agente de servicio de Cloud KMS requiere permisos de administrador de Cloud KMS.
Crea el agente de servicio de Cloud KMS:
gcloud beta services identity create --service=cloudkms.googleapis.com \ --project=PROJECT_NUMBERReemplaza
PROJECT_NUMBERpor el número del proyecto clave.El resultado es similar a lo siguiente:
Service identity created: service-PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.comEl resultado del comando indica que se creó la cuenta de servicio de Cloud EKM (con el subdominio
gcp-sa-ekms). Sin embargo, el comando también crea el agente de servicio de Cloud KMS (con el subdominiogcp-sa-cloudkms), que es el agente de servicio que usarás más adelante en estas instrucciones.Otorga permisos de administrador de Cloud KMS al agente de servicio:
gcloud projects add-iam-policy-binding PROJECT_NUMBER \ --role=roles/cloudkms.admin \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.comReemplaza
PROJECT_NUMBERpor el número del proyecto clave.
Habilita Autokey para la administración de claves delegada
Cuando usas Autokey para la administración de claves delegada, Autokey crea tus claves dentro del mismo proyecto que los recursos que protegen. Los proyectos que admiten la administración de claves delegadas con Autokey pueden existir dentro de carpetas en las que Autokey está habilitado para la administración de claves centralizada. Cuando Autokey está habilitado en un proyecto, la configuración de Autokey a nivel del proyecto anula la configuración de Autokey en la carpeta principal.
Para habilitar Autokey en un proyecto individual, completa los siguientes pasos:
Con la API de REST, crea el objeto
AutokeyConfigpara el proyecto en el que deseas habilitar Autokey:curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/autokeyConfig?updateMask=key_project_resolution_mode" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"key_project_resolution_mode": "RESOURCE_PROJECT"}'Reemplaza
PROJECT_IDpor el ID del proyecto en el que deseas habilitar Autokey.En gcloud CLI, habilita la API de Cloud KMS en el proyecto:
gcloud services enable cloudkms.googleapis.com
Para habilitar Autokey en todos los proyectos de una carpeta, completa los siguientes pasos:
Con la API de REST, crea el objeto
AutokeyConfigpara la carpeta en la que deseas habilitar Autokey para que use la administración de claves delegada:curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_ID/autokeyConfig?updateMask=key_project_resolution_mode" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"key_project_resolution_mode": "RESOURCE_PROJECT"}'Reemplaza
FOLDER_IDpor el ID de la carpeta en la que deseas habilitar Autokey. Este comando habilita Autokey para todos los proyectos de la carpeta.En gcloud CLI, habilita la API de Cloud KMS en cada proyecto en el que desees usar Autokey para la administración de claves delegada:
gcloud services enable cloudkms.googleapis.comPuedes habilitar la API de Cloud KMS en todos los proyectos a la vez o habilitarla en proyectos individuales según sea necesario. Tus desarrolladores no podrán usar Autokey en el proyecto hasta que se habilite la API de Cloud KMS para ese proyecto.
Habilita Autokey con Terraform
Administración de claves centralizada con Terraform
La siguiente muestra de Terraform automatiza los siguientes pasos de configuración:
- Crea una carpeta de recursos
- Crea un proyecto clave
- Cómo otorgar permisos de usuario
- Configura el agente de servicio de Cloud KMS
- Habilita Autokey
Debes crear proyectos de recursos por separado dentro de la carpeta de recursos.
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 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"
}
/* Enable AutokeyConfig for centralized key management 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}"
key_project_resolution_mode = "DEDICATED_KEY_PROJECT"
# For folder scope, valid values are: DEDICATED_KEY_PROJECT, RESOURCE_PROJECT, 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.
}
Reemplaza lo siguiente:
BILLING_ACCOUNT_ID: Es el ID de tu cuenta de Google Cloud facturación. El ID de la cuenta de facturación es un valor alfanumérico de 18 caracteres separado por guiones, por ejemplo,010101-F0FFF0-10XX01.AUTOKEY_ADMIN_USER_IDS: Es una lista de direcciones de correo electrónico de los usuarios que deben tener el rol deroles/cloudkms.autokeyAdmin, por ejemplo,"Ariel@example.com", "Charlie@example.com".AUTOKEY_DEVELOPER_USER_IDS: Es una lista de direcciones de correo electrónico de los usuarios que deben tener el rol deroles/cloudkms.autokeyUser, por ejemplo,"Kalani@example.com", "Mahan@example.com".KEY_PROJECT_ADMIN_USER_IDS: Es una lista de direcciones de correo electrónico de los usuarios que deben tener el rolroles/cloudkms.admin, por ejemplo,"Sasha@example.com", "Nur@example.com".KEY_PROJECT_ID: Es el ID que se usará para el proyecto de clave dedicada, por ejemplo,autokey-key-project. Si especificas un proyecto clave,key_project_resolution_modedebe serDEDICATED_KEY_PROJECT.
Administración de claves delegada con Terraform
Para habilitar Autokey en todos los proyectos de una carpeta para la administración de claves delegada, usa un recurso folder_config similar al siguiente:
/* 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, 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.
}
Para habilitar Autokey en proyectos individuales para la administración de claves delegadas, usa un recurso autokey_config_project similar al siguiente:
/* 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, DISABLED
}
Aplicar el uso de Autokey
Si deseas aplicar el uso de Autokey dentro de una carpeta, puedes hacerlo combinando los controles de acceso de IAM con las políticas de la organización de CMEK. Esto se logra quitando los permisos de creación de claves de las entidades principales que no sean el agente de servicio de Cloud KMS y, luego, exigiendo que todos los recursos estén protegidos por la CMEK que usa el proyecto de claves de Autokey.
Para aplicar el uso de Autokey en una carpeta, completa los siguientes pasos:
Quita el acceso para crear claves de forma manual en el proyecto de clave. Si las claves no se pueden crear de forma manual, solo se podrán crear en este proyecto las claves creadas por Autokey. Para obtener más información sobre el control de acceso, consulta Control de acceso con IAM.
Establece una política de la organización en la carpeta para exigir que los recursos estén protegidos con una CMEK usando la restricción
constraints/gcp.restrictNonCmekServices. Para obtener más información, consulta Cómo requerir protección con CMEK.Establece una política de la organización en la carpeta para exigir que las claves que se usen para la CMEK provengan del proyecto de claves de Autokey con la restricción
constraints/gcp.restrictCmekCryptoKeyProjects. Para obtener más información, consulta Limita el uso de claves de Cloud KMS para la CMEK.
Inhabilita Autokey
Autokey de Cloud KMS se habilita y se inhabilita a nivel de la carpeta. Los mismos roles que pueden habilitar Autokey para una carpeta también pueden inhabilitarla para esa carpeta. Para inhabilitar Autokey en una carpeta, debes borrar AutokeyConfig para quitar la asociación entre la carpeta y el proyecto de claves de Autokey.
Después de que se quita la configuración de Autokey en la carpeta, el agente de servicio de Cloud KMS ya no puede crear claves para los desarrolladores cuando crean recursos en la carpeta. Si quitas la vinculación entre la carpeta y el proyecto de clave, se inhabilitará Autokey en la carpeta. Sin embargo, te recomendamos que también quites las vinculaciones de IAM para los roles roles/cloudkms.autokeyAdmin y roles/cloudkms.autokeyUser.
La inhabilitación de Autokey no afecta las claves existentes en el proyecto de claves. Puedes seguir usando estas claves para proteger tus recursos.
Borra AutokeyConfig.
Console
En la consola de Google Cloud , ve a la página Controles de KMS.
En el selector de contexto, selecciona la carpeta en la que quieres inhabilitar Autokey.
Haz clic en Inhabilitar.
Aparecerá un mensaje en el que se te pedirá que confirmes que deseas inhabilitar la función de Autokey.
Para inhabilitar Autokey, haz clic en Confirmar.
Un mensaje confirma que Autokey de Cloud KMS está inhabilitado en la carpeta.
API
Desmarca AutokeyConfig en la carpeta en la que quieras inhabilitar 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 '{}'
Reemplaza lo siguiente:
FOLDER_ID: Es el ID de la carpeta en la que deseas inhabilitar Autokey.
Cómo revocar roles de Autokey
Opcional: Revoca el rol
roles/cloudkms.autokeyAdmin:gcloud resource-manager folders remove-iam-policy-binding \ FOLDER_ID --role=roles/cloudkms.autokeyAdmin \ --member=user:USER_EMAILReemplaza lo siguiente:
FOLDER_ID: Es el ID de la carpeta en la que inhabilitaste Autokey.USER_EMAIL: La dirección de correo electrónico del usuario al que deseas revocar el permiso para administrar Autokey.
Opcional: Revoca el rol
roles/cloudkms.autokeyUsera nivel de la carpeta:gcloud resource-manager folders remove-iam-policy-binding \ FOLDER_ID --role=roles/cloudkms.autokeyUser \ --member=user:USER_EMAILReemplaza lo siguiente:
FOLDER_ID: Es el ID de la carpeta en la que inhabilitaste Autokey.USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas revocar el permiso para usar Autokey.
Opcional: Revoca el rol
roles/cloudkms.autokeyUsera nivel del proyecto:gcloud projects remove-iam-policy-binding RESOURCE_PROJECT_NUMBER \ --role=roles/cloudkms.autokeyUser \ --member=user:USER_EMAILReemplaza lo siguiente:
RESOURCE_PROJECT_NUMBER: Es el número de proyecto de un proyecto de recursos dentro de la carpeta en la que inhabilitaste Autokey.USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas revocar el permiso para usar Autokey.
Opcional: Si no planeas seguir usando el proyecto de claves para Autokey en otras carpetas, revoca el rol
roles/cloudkms.adminpara el agente de servicio de Cloud KMS:gcloud projects remove-iam-policy-binding KEY_PROJECT_NUMBER \ --role=roles/cloudkms.admin \ --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.comReemplaza
KEY_PROJECT_NUMBERpor el ID numérico del proyecto clave.Opcional: Si no planeas seguir usando las claves creadas dentro del proyecto de claves, revoca el rol
roles/cloudkms.adminpara el administrador de Cloud KMS:gcloud projects remove-iam-policy-binding KEY_PROJECT_NUMBER \ --role=roles/cloudkms.admin \ --member=user:KEY_ADMIN_EMAILReemplaza lo siguiente:
KEY_PROJECT_NUMBER: Es el número del proyecto de la clave.USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas revocar el permiso para usar Autokey.
¿Qué sigue?
- Obtén más información sobre cuándo usar Autokey.
- Obtén más información sobre cómo funciona Autokey.
- Tus desarrolladores de Autokey ahora pueden crear recursos protegidos con Autokey.