Habilita Autokey de Cloud KMS

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

Antes de comenzar

Antes de poder habilitar Autokey de Cloud KMS, debes contar con lo siguiente:

  • Un recurso de organización que contiene una carpeta en la que deseas habilitar Autokey Si no tienes una carpeta en la que deseas habilitar Autokey, puedes crear una carpeta de recursos nueva. Habilitar Autokey en esta carpeta habilita Autokey para todos los proyectos de recursos dentro de la carpeta.
  • Si tienes proyectos de recursos en los que deseas usar Autokey, pero no están en una carpeta en la que habilitarás Autokey, puedes mover los proyectos de recursos existentes a carpetas nuevas.

Funciones obligatorias

A fin de 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 organización o carpeta:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

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
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.setIamPolicy
  • billing.resourceAssociations.create

También puedes obtener estos permisos con roles personalizados o, también, otros roles predefinidos.

Decide cómo quieres habilitar Autokey

Puedes habilitar Autokey como parte de tu estrategia de infraestructura como servicio con Terraform para realizar los cambios de configuración necesarios. Si quieres usar Terraform para habilitar Autokey, consulta Habilita Autokey con Terraform en esta página. Si no quieres usar Terraform, sigue las instrucciones de la siguiente sección.

Configura el proyecto clave

Recomendamos crear un proyecto de clave nuevo para que contenga los recursos de Cloud KMS que creó Autokey. Debes crear el proyecto clave dentro del recurso de tu organización. Si ya tienes un proyecto de clave que deseas usar para las claves que crea Autokey, puedes omitir la sección Crea un proyecto clave y continuar desde Configura el proyecto de clave de Autokey en esta página.

El proyecto clave se puede crear en la misma carpeta en la que planeas habilitar Autokey. No debes crear otros recursos dentro del proyecto clave. Si intentas crear recursos protegidos por Autokey en el proyecto de clave, Autokey rechaza 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 la política de la organización constraints/gcp.restrictCmekCryptoKeyProjects para garantizar que todas las CMEK sean 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

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

    Ir a Administrar recursos

  2. En Seleccionar organización, selecciona el recurso de la organización en la que deseas crear un proyecto.
  3. Haz clic en Crear proyecto.
  4. 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.
  5. En Ubicación, selecciona el recurso que deseas que sea el superior de tu proyecto clave.
  6. Para terminar de crear el proyecto, haz clic en Crear.

gcloud

  • Crea un proyecto nuevo:

    gcloud projects create PROJECT_ID \
        --PARENT_TYPE=PARENT_ID
    

    Reemplaza 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 proyecto clave nuevo. Ingresa organization para crear el proyecto de clave nuevo en una organización determinada o ingresa folder para crear el proyecto de clave nuevo en una carpeta determinada.
    • PARENT_ID: Es el ID de la organización o carpeta en la que deseas crear el proyecto de clave.

Prepara el proyecto de clave de Autokey

Console

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

    Habilitar la API

  2. Si usas un proyecto de clave nuevo, otorga permisos de administrador de Cloud KMS en el proyecto de clave a tus usuarios administradores de Cloud KMS:

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

      Ir a IAM

    2. Selecciona el proyecto clave.

    3. Haz clic en Otorgar acceso y, luego, ingresa la dirección de correo electrónico del usuario.

    4. Selecciona el rol Administrador de Cloud KMS.

    5. Haz clic en Guardar.

gcloud

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

    gcloud services enable cloudkms.googleapis.com
    
  2. Otorga permisos de administrador de Cloud KMS en el proyecto de clave a tus usuarios administradores de Cloud KMS:

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

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número del proyecto clave.
    • KEY_ADMIN_EMAIL: Es la dirección de correo electrónico del usuario que es responsable de administrar las claves de Cloud KMS.

Habilita Autokey de Cloud KMS en una carpeta de recursos

Console

  1. En la consola de Google Cloud, 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 deseas habilitar Autokey.

  3. Haz clic en Habilitar.

  4. Selecciona tu proyecto de clave y 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 clave.

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.

  1. Crea el agente de servicio de Cloud KMS:

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

    Reemplaza PROJECT_NUMBER por el número del proyecto clave.

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

    Reemplaza PROJECT_NUMBER por el número del proyecto clave.

Otorga roles de usuario de Autokey

Antes de que tus desarrolladores puedan usar Autokey, debes otorgarles el rol necesario. Puedes otorgar la función a nivel de carpeta o de proyecto. Esta función permite a los desarrolladores solicitar claves al agente de servicio de Cloud KMS mientras crean recursos en esa carpeta o proyecto.

Elige uno de estos pasos o ambos:

  • Otorga 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
    

    Reemplaza lo siguiente:

    • FOLDER_ID: Es el ID de la carpeta en la que deseas habilitar Autokey.
    • USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas otorgar permiso para usar Autokey.
  • Otorga el rol roles/cloudkms.autokeyUser a nivel de proyecto:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto del recurso.
    • USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas otorgar permiso para usar Autokey.

Tus desarrolladores de Autokey ahora pueden crear claves a pedido. Para obtener información sobre cómo crear recursos protegidos mediante claves creadas a pedido por Autokey, consulta Cómo crear recursos protegidos con Autokey.

Habilita Autokey con Terraform

La siguiente muestra de Terraform automatiza los siguientes pasos de configuración:

  • Crea una carpeta de recursos
  • Crea un proyecto clave
  • Otorga permisos de usuario
  • Configura el agente de servicio de Cloud KMS
  • Habilitar 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 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 = google_project.key_management_project.project_id
}

Reemplaza lo siguiente:

  • BILLING_ACCOUNT_ID: Es el ID de tu cuenta de facturación de Google Cloud. 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 para los usuarios que deben tener la función roles/cloudkms.autokeyAdmin, por ejemplo, "Ariel@example.com", "Charlie@example.com".
  • AUTOKEY_DEVELOPER_USER_IDS: Es una lista de direcciones de correo electrónico para los usuarios que deben tener la función roles/cloudkms.autokeyUser, por ejemplo, "Kalani@example.com", "Mahan@example.com".
  • KEY_PROJECT_ADMIN_USER_IDS: Es una lista de direcciones de correo electrónico para los usuarios que deben tener la función roles/cloudkms.admin, por ejemplo, "Sasha@example.com", "Nur@example.com".
  • KEY_PROJECT_ID: Es el ID que se usará para el proyecto clave, por ejemplo, autokey-key-project.

Aplicar de manera forzosa 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 funciona cuando se quitan los permisos de creación de claves de las principales que no son el agente de servicio de Cloud KMS y, luego, se requiere que todos los recursos estén protegidos por CMEK con el proyecto de claves de Autokey.

Para aplicar el uso de Autokey de manera forzosa en una carpeta, completa los siguientes pasos:

  1. Quita el acceso para crear claves de forma manual en el proyecto de claves. Si las claves no se pueden crear de forma manual, solo las claves creadas por Autokey se pueden crear en este proyecto. Para obtener más información sobre cómo controlar el acceso, consulta Control de acceso con la IAM.

  2. Establece una política de la organización en la carpeta para requerir que los recursos estén protegidos con una CMEK mediante la restricción constraints/gcp.restrictNonCmekServices. Para obtener más información, consulta Exige la protección con CMEK.

  3. Establece una política de la organización en la carpeta para requerir que las claves que se usan para CMEK sean del proyecto de claves de Autokey mediante la restricción constraints/gcp.restrictCmekCryptoKeyProjects. Si deseas obtener más información, consulta Limita el uso de claves de Cloud KMS para CMEK.

Inhabilitar Autokey

Autokey de Cloud KMS está habilitado y, también, inhabilitado a nivel de carpeta. Las mismas funciones que pueden habilitar Autokey para una carpeta pueden inhabilitar Autokey para esa carpeta. Para inhabilitar Autokey en una carpeta, debes borrar el AutokeyConfig para quitar la asociación entre la carpeta y el proyecto de claves de Autokey.

Después de quitar la configuración de Autokey de 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 el vínculo entre la carpeta y el proyecto clave, se inhabilita Autokey en la carpeta. Sin embargo, te recomendamos que también quites las vinculaciones de IAM para las funciones roles/cloudkms.autokeyAdmin y roles/cloudkms.autokeyUser.

Inhabilitar Autokey no afecta las claves existentes en el proyecto de claves. Puedes seguir usando estas claves para proteger tus recursos.

Borrar AutokeyConfig

Console

  1. En la consola de Google Cloud, 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 deseas inhabilitar Autokey.

  3. Haga clic en Inhabilitar.

    Aparecerá un mensaje en el que se te pedirá que confirmes si deseas inhabilitar Autokey.

  4. Para inhabilitar Autokey, haz clic en Confirmar.

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

API

Borra el AutokeyConfig de la carpeta en la que deseas 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

  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
    

    Reemplaza 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 revocarle el permiso para administrar 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
    

    Reemplaza 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 revocarle 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
    

    Reemplaza lo siguiente:

    • RESOURCE_PROJECT_NUMBER: Es el número de proyecto de un proyecto de recurso dentro de la carpeta en la que inhabilitaste Autokey.
    • USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas revocarle el permiso para usar Autokey.
  4. Opcional: Si no planeas seguir usando el proyecto de claves para Autokey en otras carpetas, revoca el rol roles/cloudkms.admin para 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.com
    

    Reemplaza KEY_PROJECT_NUMBER por el ID numérico del proyecto clave.

  5. Opcional: Si no planeas seguir usando las claves creadas dentro del proyecto de claves, revoca la función roles/cloudkms.admin para el administrador de Cloud KMS:

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

    Reemplaza lo siguiente:

    • KEY_PROJECT_NUMBER: Es el número del proyecto clave.
    • USER_EMAIL: Es la dirección de correo electrónico del usuario al que deseas revocarle el permiso para usar Autokey.

¿Qué sigue?