Habilitar Autokey de Cloud KMS

En esta página se explica cómo habilitar y configurar Autokey de Cloud KMS en una carpeta de recursos. Para obtener más información sobre Autokey, consulta el resumen de Autokey. Un administrador de seguridad debe completar los pasos de esta página.

Antes de empezar

Para habilitar Autokey de Cloud KMS, debes tener lo siguiente:

  • Un recurso de organización que contenga una carpeta en la que quieras habilitar Autokey. Si no tienes una carpeta en la que quieras habilitar Autokey, puedes crear una carpeta de recursos. Si habilitas Autokey en esta carpeta, se habilitará Autokey en todos los proyectos de recursos de la carpeta.
  • Si tienes proyectos de recursos en los que quieres usar Autokey, pero no están en una carpeta en la que habilitarás Autokey, puedes mover los proyectos de recursos a carpetas nuevas.

Roles obligatorios

Para obtener los permisos que necesitas para habilitar y configurar Autokey, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en la organización o la carpeta:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar 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 se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para habilitar y configurar Autokey, se necesitan los siguientes permisos:

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

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Decide cómo quieres habilitar Autokey

Puedes habilitar Autokey como parte de tu estrategia de infraestructura como código usando Terraform para hacer los cambios de configuración necesarios. Si quieres usar Terraform para habilitar Autokey, consulta la sección Habilitar Autokey con Terraform de esta página. Si no quieres usar Terraform, empieza siguiendo las instrucciones de la siguiente sección.

Configurar el proyecto clave

Te recomendamos que crees un proyecto de claves para que contenga los recursos de Cloud KMS creados por Autokey. Debes crear el proyecto de clave dentro de tu recurso de organización. Si ya tienes un proyecto de claves que quieres usar para las claves creadas por Autokey, puedes saltarte la sección Crear un proyecto de claves y continuar desde Configurar el proyecto de claves de Autokey en esta página.

El proyecto de clave se puede crear en la misma carpeta en la que tienes previsto habilitar Autokey. No debes crear otros recursos en el proyecto de claves. Si intentas crear recursos protegidos por Autokey en el proyecto de clave, Autokey rechazará la solicitud de una nueva clave.

Si tienes previsto migrar a Assured Workloads en el futuro, crea el proyecto de claves en la misma carpeta que los recursos protegidos por esas claves.

Si tu organización usa la constraints/gcp.restrictCmekCryptoKeyProjectsrestricción de la política de la organización para asegurarse de que todas las CMEKs procedan de proyectos de claves especificados, debes añadir tu proyecto de claves a la lista de proyectos permitidos. Para obtener más información sobre la política de organización de CMEK, consulta Políticas de organización de CMEK.

Crear un proyecto clave

Consola

  1. En la Google Cloud consola, ve a la página Gestionar recursos.

    Ir a Gestionar recursos

  2. En Seleccionar organización, elige el recurso de organización en el que quieras crear un proyecto.
  3. Haz clic en Crear proyecto.
  4. En la ventana Nuevo proyecto que aparece, introduce el nombre de un 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.
  5. En Ubicación, seleccione el recurso que quiera que sea el principal de su proyecto de clave.
  6. Para terminar de crear el proyecto, haz clic en Crear.

gcloud

  • Para crear un proyecto:

    gcloud projects create PROJECT_ID \
        --PARENT_TYPE=PARENT_ID
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene el conjunto de claves.
    • PARENT_TYPE: el tipo de recurso en el que quieres crear el nuevo proyecto de clave. Introduce organization para crear el proyecto de clave en una organización determinada o folder para crear el proyecto de clave en una carpeta determinada.
    • PARENT_ID: el ID de la organización o la carpeta en la que quieres crear el proyecto de clave.

Preparar el proyecto de claves automáticas

Consola

  1. Habilita la API Cloud KMS en tu proyecto de claves.

    Activar la API

  2. Si usas un proyecto de claves nuevo, concede permisos de administrador de Cloud KMS en el proyecto de claves. Repite los siguientes pasos para conceder el rol Administrador de Cloud KMS a ti y a cada uno de los demás usuarios administradores de Cloud KMS:

    1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

      Ir a IAM

    2. Selecciona el proyecto de clave.

    3. Haz clic en Conceder acceso y, a continuación, introduce la dirección de correo del usuario.

    4. Selecciona el rol Administrador de Cloud KMS.

    5. Haz clic en Guardar.

gcloud

  1. Habilita la API Cloud KMS en tu proyecto de claves:

    gcloud services enable cloudkms.googleapis.com
    
  2. Concede permisos de administrador de Cloud KMS en el proyecto de claves. Repite el siguiente comando para asignar el rol roles/cloudkms.admin a ti mismo 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_EMAIL
    

    Haz los cambios siguientes:

    • PROJECT_NUMBER: el número de proyecto de la clave. project.
    • KEY_ADMIN_EMAIL: la dirección de correo del usuario responsable de gestionar las claves de Cloud KMS.

Habilitar Autokey de Cloud KMS en una carpeta de recursos

Consola

  1. En la Google Cloud consola, ve a la página Controles de KMS.

    Ir a los controles de KMS

  2. En el selector de contexto, selecciona la carpeta en la que quieras habilitar Autokey.

  3. Haz clic en Enable (Habilitar).

  4. Selecciona el proyecto clave y haz clic en Enviar.

    Aparecerá un mensaje que confirma que Autokey de Cloud KMS está habilitado en la carpeta.

API

Crea el AutokeyConfig de la carpeta en la que quieras habilitar Autokeys:

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"}'

Haz los cambios siguientes:

  • FOLDER_ID: el ID de la carpeta en la que quieres habilitar Autokey.
  • PROJECT_ID: el ID del proyecto de la clave.

Configurar el agente de servicio de Cloud KMS

El agente de servicio de Cloud KMS de un proyecto de claves crea claves y aplica enlaces de políticas de gestión de identidades y accesos 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 necesita permisos de administrador de Cloud KMS.

  1. Crea el agente de servicio de Cloud KMS:

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

    Sustituye PROJECT_NUMBER por el número del proyecto de la clave.

    El resultado debería ser similar al siguiente:

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

    La salida del comando indica que se ha creado 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 subdominio gcp-sa-cloudkms), que es el agente de servicio que usarás más adelante en estas instrucciones.

  2. Concede 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.com
    

    Sustituye PROJECT_NUMBER por el número del proyecto de la clave.

Conceder roles de usuario de Autokey

Para que tus desarrolladores puedan usar Autokey, debes asignarles el rol necesario. Puede asignar el rol a nivel de carpeta o de proyecto. Este rol permite a los desarrolladores solicitar claves al agente de servicio de Cloud KMS al crear recursos en esa carpeta o proyecto.

Elige uno de los siguientes pasos (o ambos):

  • Asigna el rol roles/cloudkms.autokeyUser a nivel de carpeta:

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

    Haz los cambios siguientes:

    • FOLDER_ID: el ID de la carpeta en la que quieras habilitar Autokey.
    • USER_EMAIL: la dirección de correo del usuario al que quieres conceder permiso para usar Autokey.
  • Asigna el rol roles/cloudkms.autokeyUser a nivel de proyecto:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto de recursos.
    • USER_EMAIL: la dirección de correo del usuario al que quieres conceder permiso para usar Autokey.

Tus desarrolladores de Autokey ahora pueden crear claves bajo demanda. Para saber cómo crear recursos protegidos con claves creadas a petición por Autokey, consulta Crear recursos protegidos con Autokey.

Habilitar Autokey con Terraform

El siguiente ejemplo de Terraform automatiza los pasos de configuración que se indican a continuación:

  • Crear una carpeta de recursos
  • Crear un proyecto clave
  • Conceder permisos de usuario
  • Configurar el agente de servicio de Cloud KMS
  • Habilitar Autokey

Debes crear proyectos de recursos por separado en 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 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}"
}

Haz los cambios siguientes:

  • BILLING_ACCOUNT_ID: ID de tu cuenta de facturación Google Cloud . El ID de cuenta de facturación es un valor alfanumérico de 18 caracteres separado por guiones; por ejemplo, 010101-F0FFF0-10XX01.
  • AUTOKEY_ADMIN_USER_IDS: una lista de direcciones de correo de usuarios que deberían tener el rol roles/cloudkms.autokeyAdmin. Por ejemplo, "Ariel@example.com", "Charlie@example.com".
  • AUTOKEY_DEVELOPER_USER_IDS: una lista de direcciones de correo de usuarios que deberían tener el rol roles/cloudkms.autokeyUser. Por ejemplo, "Kalani@example.com", "Mahan@example.com".
  • KEY_PROJECT_ADMIN_USER_IDS: una lista de direcciones de correo de usuarios que deberían tener el rol roles/cloudkms.admin. Por ejemplo, "Sasha@example.com", "Nur@example.com".
  • KEY_PROJECT_ID: el ID que se va a usar para el proyecto de clave. Por ejemplo, autokey-key-project.

Forzar el uso de Autokey

Si quieres aplicar el uso de Autokey en una carpeta, puedes hacerlo combinando los controles de acceso de gestión de identidades y accesos con las políticas de la organización de CMEK. Para ello, se eliminan los permisos de creación de claves de las entidades que no sean el agente de servicio de Cloud KMS y, a continuación, se requiere que todos los recursos estén protegidos por CMEK mediante el proyecto de claves automáticas.

Para aplicar el uso de Autokey en una carpeta, sigue estos pasos:

  1. Retira el acceso para crear claves manualmente en el proyecto de claves. Si las claves no se pueden crear manualmente, solo se podrán crear en este proyecto las claves creadas por Autokey. Para obtener más información sobre cómo controlar el acceso, consulta el artículo sobre el control de acceso con IAM.

  2. Define una política de organización en la carpeta para que los recursos deban protegerse con una CMEK mediante la restricción constraints/gcp.restrictNonCmekServices. Para obtener más información, consulta Requerir protección con CMEK.

  3. Define una política de organización en la carpeta para requerir que las claves usadas para CMEK deban ser del proyecto de claves Autokey mediante la restricción constraints/gcp.restrictCmekCryptoKeyProjects. Para obtener más información, consulta Limitar el uso de claves de Cloud KMS para CMEK.

Inhabilitar Autokey

Cloud KMS Autokey se habilita e inhabilita a nivel de carpeta. Los mismos roles que pueden habilitar Autokey en una carpeta pueden inhabilitar Autokey en esa carpeta. Para inhabilitar Autokey en una carpeta, debes borrar el AutokeyConfig para quitar la asociación entre la carpeta y el proyecto de clave de Autokey.

Una vez que se haya eliminado la configuración de Autokey de la carpeta, el agente de servicio de Cloud KMS ya no podrá crear claves para los desarrolladores cuando creen recursos en la carpeta. Si quitas el vínculo entre la carpeta y el proyecto de la clave, se inhabilita Autokey en la carpeta. Sin embargo, te recomendamos que también elimines las vinculaciones de IAM de los roles roles/cloudkms.autokeyAdmin y roles/cloudkms.autokeyUser.

Inhabilitar Autokey no afecta a las claves que ya haya en el proyecto de claves. Puedes seguir usando estas claves para proteger tus recursos.

Clear AutokeyConfig

Consola

  1. En la Google Cloud consola, ve a la página Controles de KMS.

    Ir a los controles de KMS

  2. En el selector de contexto, selecciona la carpeta en la que quieras inhabilitar Autokey.

  3. Haz clic en Inhabilitar.

    Aparecerá un mensaje pidiéndote que confirmes que quieres inhabilitar Autocorrección.

  4. Para inhabilitar Autokey, haz clic en Confirmar.

    Aparecerá un mensaje que confirma que Autokey de Cloud KMS está inhabilitado en la carpeta.

API

Desmarca la opción AutokeyConfig de la carpeta en la que quieras inhabilitar Autocorrección:

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

Haz los cambios siguientes:

  • FOLDER_ID: el ID de la carpeta en la que quieres inhabilitar Autokey.

Revocar roles de Autokey

  1. Opcional: Revoca el rol roles/cloudkms.autokeyAdmin:

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

    Haz los cambios siguientes:

    • FOLDER_ID: el ID de la carpeta en la que has inhabilitado Autokey.
    • USER_EMAIL: la dirección de correo del usuario al que quieres revocar el permiso para gestionar Autokey.
  2. Opcional: Revoca el rol roles/cloudkms.autokeyUser a nivel de carpeta:

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

    Haz los cambios siguientes:

    • FOLDER_ID: el ID de la carpeta en la que has inhabilitado Autokey.
    • USER_EMAIL: la dirección de correo del usuario al que quieres revocar el permiso para usar Autokey.
  3. Opcional: Revoca el rol roles/cloudkms.autokeyUser a nivel de proyecto:

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

    Haz los cambios siguientes:

    • RESOURCE_PROJECT_NUMBER: el número de proyecto de un proyecto de recurso de la carpeta en la que has inhabilitado Autokey.
    • USER_EMAIL: la dirección de correo del usuario al que quieres revocar el permiso para usar Autokey.
  4. Opcional: Si no tienes previsto seguir usando el proyecto de claves para Autokey en otras carpetas, revoca el rol roles/cloudkms.admin del 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.com
    

    Sustituye KEY_PROJECT_NUMBER por el ID numérico del proyecto de clave.

  5. Opcional: Si no tienes previsto seguir usando las claves creadas en el proyecto de claves, revoca el rol roles/cloudkms.admin del administrador de Cloud KMS:

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

    Haz los cambios siguientes:

    • KEY_PROJECT_NUMBER: el número de proyecto del proyecto de la clave.
    • USER_EMAIL: la dirección de correo del usuario al que quieres revocar el permiso para usar Autokey.

Siguientes pasos