Habilitar claves de cifrado gestionadas por el cliente en Secret Manager

De forma predeterminada, Secret Manager cifra el contenido del cliente en reposo. Secret Manager se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.

Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEKs, como Secret Manager. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Con Cloud KMS también puedes monitorizar el uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y el gestor de las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.

Una vez que hayas configurado tus recursos con CMEKs, la experiencia de acceso a tus recursos de Secret Manager será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).

Secret Manager proporciona herramientas para almacenar, gestionar y acceder a datos sensibles en tus aplicaciones.

CMEK con Autokey de Cloud KMS

Puedes crear CMEKs manualmente para proteger tus recursos de Secret Manager o usar Autokey de Cloud KMS. Con Autokey, los conjuntos de claves y las claves se generan a petición como parte de la creación de recursos en Secret Manager. Los agentes de servicio que usan las claves para las operaciones de cifrado y descifrado se crean si aún no existen y se les asignan los roles de gestión de identidades y accesos (IAM) necesarios. Para obtener más información, consulta la descripción general de Autokey.

Secret Manager solo es compatible con Autokey de Cloud KMS cuando se crean recursos con Terraform o la API REST.

Para saber cómo usar las CMEKs creadas manualmente para proteger tus recursos de Secret Manager, consulta las secciones CMEK con replicación automática y CMEK con replicación gestionada por el usuario de esta página.

Para saber cómo usar las CMEKs creadas por Autokey de Cloud KMS para proteger tus recursos de Secret Manager, consulta el artículo Usar Autokey con recursos de Secret Manager.

Cómo funciona CMEK en Secret Manager

Antes de escribir una versión de un secreto en el almacenamiento persistente de una ubicación concreta, Secret Manager cifra los datos con una clave de cifrado de datos (DEK) única. Esta DEK se cifra con una clave específica de la réplica, denominada clave de cifrado de claves (KEK), que es propiedad del servicio Secret Manager.

Cuando se usa una CMEK en Secret Manager, la KEK se denomina "clave CMEK" y es una clave simétrica que gestionas en Cloud KMS. La clave CMEK debe estar en la misma ubicación que la réplica de la versión del secreto que encripta. Google Cloud También puedes usar una clave de Cloud EKM en la política de CMEK para cifrar y descifrar.

En esta guía se explica cómo configurar Secret Manager para usar CMEK. Para obtener más información sobre las CMEKs en general, incluido cuándo y por qué habilitarlas, consulta la documentación de Cloud Key Management Service.

Limitaciones

CMEK solo está disponible en la API de Secret Manager v1 y en la CLI de Google Cloud.

Antes de empezar

Puedes almacenar todos los recursos en el mismo proyecto o guardar los secretos y las claves en proyectos independientes. Consulta la sección Separación de funciones de Cloud KMS para entender mejor esta decisión.

Completa los siguientes requisitos previos para configurar Secret Manager y Cloud KMS:

  • Secret Manager:

    • Crea un proyecto o usa uno que ya tengas para alojar tus recursos de Secret Manager.
    • Si es necesario, sigue los pasos de la sección Configurar Secret Manager de la guía de inicio rápido de Secret Manager.
  • Cloud KMS:

Asigna a las siguientes variables los IDs de los proyectos de Secret Manager y Cloud KMS.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Autentícate en Google Cloud:

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud auth login

Crear una identidad de agente de servicio

Debe crear una identidad de agente de servicio para cada proyecto que requiera claves de cifrado gestionadas por el cliente.

Para crear una identidad de servicio con la CLI de Google Cloud, ejecuta el siguiente comando:

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

Se devolverá un nombre de identidad de servicio con el siguiente formato:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Guarda el nombre de la identidad del servicio:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Concederás a esta identidad de servicio acceso a las claves de Cloud KMS de CMEK que se usan para cifrar y descifrar tus secretos.

CMEK con replicación automática

En esta sección se tratan los secretos que se configuran mediante una política de réplica automática.

En el caso de los secretos que usan la política de replicación automática, la clave CMEK debe estar ubicada en la global multirregión de Cloud KMS. Si usas una clave de Cloud EKM, no puedes configurar tu secreto para que use la replicación automática, ya que las claves de Cloud EKM no están disponibles en la región global. Para obtener más información sobre cómo usar claves de Cloud EKM, consulta el artículo sobre cómo añadir una clave de Cloud EKM a una política de CMEK.

Crea una clave simétrica de Cloud KMS en la global región de Cloud KMS o usa una clave que ya tengas. En este ejemplo se crea un conjunto de claves llamado secret-manager-cmek y, a continuación, se crea una clave llamada my-cmek-key en él.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concede a la identidad de servicio de Secret Manager acceso para encriptar y desencriptar con la clave CMEK. Este comando asigna el rol de encargado de cifrar o descifrar de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la identidad de servicio en la clave de Cloud KMS my-cmek-key.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secreto con replicación automática. El nombre del recurso de la clave CMEK se almacena como metadatos en el secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

Asigna el valor de replication.automatic.customerManagedEncryption.kmsKeyName al nombre del recurso de la clave CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Ahora, cada vez que se cree una versión de un secreto, la carga útil de esa versión se cifrará automáticamente con la clave antes de escribirse en el almacenamiento persistente, siempre que la identidad del servicio tenga acceso a la clave CMEK. Si la identidad de servicio pierde el acceso o la clave deja de estar disponible, se devolverá un error al intentar crear una versión secreta o acceder a una ya creada.

Añade una nueva versión del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS, ya que se lee de los metadatos del secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versión del secreto se crea aunque el llamador no tenga acceso directo para usar la clave CMEK. La identidad de servicio de Secret Manager, en lugar de la del llamador, es la responsable de cifrar y descifrar los secretos al leerlos o escribirlos.

Del mismo modo, no necesitas acceso directo a la clave de CMEK para acceder al secreto. La identidad del servicio accede a la clave y cifra o descifra el secreto en tu nombre.

Accede a la versión del secreto que acabas de crear:

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

Actualizar la configuración de CMEK

Crea claves de KMS simétricas en la global multirregión de Cloud KMS.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concede a la identidad de servicio de Secret Manager acceso para cifrar y descifrar con la nueva clave CMEK. Este comando asigna el rol de encargado de cifrar o descifrar de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la identidad de servicio en la clave de Cloud KMS my-other-key.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifica la configuración de CMEK de un secreto actualizando la replicación del secreto con los nuevos nombres de recursos de la clave de Cloud KMS.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK con replicación gestionada por el usuario

En esta sección se tratan los secretos configurados con una política de réplica gestionada por el usuario. Con una política de replicación gestionada por el usuario, puedes controlar la Google Cloud ubicación en la que se almacena el secreto. Siempre se puede acceder a los secretos desde cualquier Google Cloud ubicación.

Los secretos con una política de replicación gestionada por el usuario deben usar claves de Cloud KMS que se correspondan exactamente con las ubicaciones en las que se almacenan las versiones del secreto. En los ejemplos de esta guía, se almacena un secreto en dos ubicaciones independientes: us-east1 y us-central1. Las solicitudes de acceso al secreto se dirigen a una de estas ubicaciones.

En cada una de las dos regiones, crea un conjunto de claves y una clave de Cloud KMS con el propósito de cifrar o usa una clave que ya tengas. En este ejemplo se crea un conjunto de claves llamado "secret-manager-cmek" y, a continuación, se crea una clave llamada "my-cmek-key" en cada región.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concede a la identidad de servicio de Secret Manager permiso para encriptar y desencriptar con la clave CMEK. Para ello, asigna el rol Encargado de cifrar o descifrar de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a cada una de las claves CMEK individualmente o a todas las claves del proyecto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secreto habilitado para CMEK con replicación gestionada por el usuario. El nombre del recurso de la clave CMEK se almacena como metadatos en el secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

Asigna el valor de replication.userManaged.replicas.customerManagedEncryption.kmsKeyNamea los nombres de recursos de las claves CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Ahora, cada vez que se cree una versión de un secreto, la carga útil de esa versión se cifrará automáticamente con la clave antes de escribirse en el almacenamiento persistente, siempre que la identidad del servicio tenga acceso a la clave CMEK. Si la identidad de servicio pierde el acceso o la clave deja de estar disponible, se devolverá un error al intentar crear una versión secreta o acceder a una ya creada.

Añade una nueva versión del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS, ya que se lee de los metadatos del secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versión del secreto se crea aunque el llamador no tenga acceso directo para usar la clave CMEK. La identidad de servicio de Secret Manager, en lugar de la del llamador, es la responsable de cifrar y descifrar los secretos al leerlos o escribirlos.

Del mismo modo, no necesitas acceso directo a la clave de CMEK para acceder al secreto. La identidad del servicio accede a la clave y cifra o descifra el secreto en tu nombre.

Accede a la versión del secreto que acabas de crear.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

Actualizar la configuración de CMEK

Crea dos claves de KMS simétricas en las mismas regiones que el secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concede a la identidad de servicio de Secret Manager acceso para cifrar y descifrar con las nuevas claves CMEK. Este comando concede el rol Encargado del encriptado y desencriptado de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en las claves de my-other-keyCloud KMS a la identidad de servicio.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifica la configuración de CMEK de un secreto actualizando la replicación del secreto con los nuevos nombres de recursos de la clave de Cloud KMS.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Para actualizar varias claves de un secreto simultáneamente, puedes obtener y definir la política de replicación mediante un archivo.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Actualiza el archivo para reflejar la configuración de CMEK que quieras en el editor que prefieras. A continuación, define la nueva política:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

Ver la configuración de CMEK de una versión de un secreto

Para inspeccionar los metadatos de una versión de un secreto, incluido si la versión del secreto tiene habilitada la CMEK y el nombre del recurso de la versión de la clave de CMEK, consulta sus metadatos.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Devuelve el nombre de recurso completo de Cloud KMS de la versión de la clave utilizada para cifrar la versión del secreto.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Añadir una clave de Cloud EKM a una política de CMEK

En esta sección se explica cómo añadir una clave de Cloud EKM a una política de CMEK. Estos pasos permiten usar una clave de Cloud EKM para encriptar o desencriptar secretos.

Como Cloud EKM no admite la global multirregión, las claves de Cloud EKM solo se pueden usar con secretos configurados para la replicación gestionada por el usuario.

Crea una clave simétrica en la región us-central1 de Cloud KMS (o en cualquier región, excepto global). En este ejemplo, se crea un conjunto de claves llamado secret-manager-cmek-ekm y, a continuación, se crea una clave llamada my-ekm-key en el conjunto de claves.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

Para crear un conjunto de claves:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Crea una clave en ese conjunto de claves:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

A continuación, crea una nueva versión de my-ekm-key con el URI externo de la clave. Para obtener más información sobre los URIs externos de las claves de Cloud EKM, consulta el artículo sobre cómo crear una clave externa.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Concede a la identidad de servicio de Secret Manager acceso para cifrar y descifrar con la clave externa. Este comando concede el rol Encargado del encriptado y desencriptado de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en my-ekm-key a la identidad de servicio.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secreto habilitado para CMEK que use una clave de Cloud EKM.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Ahora, cada vez que se crea una versión de un secreto en my-ekm-secret, la carga útil de la versión del secreto se cifra automáticamente con la clave de Cloud EKM antes de escribirse en el almacenamiento persistente, siempre que la identidad de servicio tenga acceso a la clave. Si la identidad de servicio pierde el acceso o la clave deja de estar disponible, se devolverá un error al intentar crear una versión secreta o acceder a una ya creada.

Añade una nueva versión del secreto. Ten en cuenta que el nombre de recurso de la clave se lee de los metadatos del secreto.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versión secreta se crea aunque el llamador no tenga acceso directo para usar la clave. La identidad de servicio de Secret Manager, en lugar de la del llamador, es la responsable de cifrar y descifrar los secretos al leerlos o escribirlos.

Accede a la versión del secreto que acabas de crear. Es aquí donde la identidad del servicio accede a la clave y cifra o descifra el secreto en tu nombre.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

Inhabilitar CMEK

Quita la configuración de CMEK de un secreto actualizando la política de réplica.

gcloud

Para usar Secret Manager en la línea de comandos, primero debes instalar o actualizar a la versión 378.0.0 o una posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

En estos ejemplos se usa curl para mostrar cómo usar la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

Siguientes pasos