Habilita claves de encriptación administradas por el cliente para Secret Manager

En este tema, se analiza la compatibilidad con las claves de encriptación administradas por el cliente (CMEK) en Secret Manager.

Descripción general

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

De forma predeterminada, los secretos almacenados en Secret Manager se encriptan con la encriptación predeterminada de Google. Con la encriptación predeterminada de Google, las claves útiles que administra Google encriptan las cargas útiles secretas antes de que se escriban en el almacenamiento persistente y no se requiere configuración. La encriptación predeterminada de Google es la mejor opción para muchas organizaciones.

Para las organizaciones que desean un mayor control, la compatibilidad con CMEK para Secret Manager te permite configurar la clave de Cloud KMS que protege los datos en reposo en Secret Manager.

Cómo funcionan las CMEK en Secret Manager

Antes de escribir una versión del Secret en el almacenamiento persistente en una ubicación particular, Secret Manager encripta los datos con una clave de encriptación de datos (DEK) única. Luego, esta DEK se encripta con una clave específica de la réplica, llamada clave de encriptación de claves (KEK) que es propiedad del servicio de Secret Manager.

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

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

Limitaciones

Las CMEK solo están disponibles en la API de v1 y en gcloud de Secret Manager.

Antes de comenzar

Puedes almacenar todos los recursos en el mismo proyecto o almacenar secretos y claves en proyectos diferentes. Lee Separación de obligaciones de Cloud KMS para comprender mejor esta decisión.

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

  • Secret Manager

    • Crea o usa un proyecto existente para conservar tus recursos de Secret Manager.
    • Si es necesario, completa los pasos de la sección Configura Secret Manager de la guía de inicio rápido de Secret Manager.
  • Cloud KMS:

Configura las siguientes variables para los ID de tus 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

Autentica en Google Cloud:

gcloud

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

gcloud auth login

Crea una identidad de agente de servicio

Debes crear una identidad de agente de servicio para cada proyecto que requiera claves de encriptación administradas por el cliente.

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

gcloud

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

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

Se mostrará un nombre de identidad de servicio en el siguiente formato:

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

Guarda el nombre de 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

Le otorgarás a esta identidad de servicio acceso a las claves CMEK de Cloud KMS que se usaron para encriptar y desencriptar tus secretos.

CMEK con replicación automática

En esta sección, se abordan los secretos que se configuran a través de una política de replicación automática.

En el caso de los Secrets que usan la política de replicación automática, tu clave CMEK debe ubicarse en la multirregión global de Cloud KMS. Si usas una clave de Cloud EKM, no puedes configurar tu secreto para usar la replicación automática, porque las claves de Cloud EKM no están disponibles en la región global. Para obtener más información sobre el uso de las claves de Cloud EKM, consulta Agrega una clave de Cloud EKM a una política de CMEK.

Crea una clave simétrica de Cloud KMS en la región global de Cloud KMS o usa una existente. En este ejemplo, se crea un llavero de claves nuevo llamado secret-manager-cmek y, luego, se crea una clave nueva llamada my-cmek-key en él.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Otorga a la identidad del servicio para el acceso de Secret Manager a fin de encriptar y desencriptar con la CMEK. Este comando otorga la función de encriptador o desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en la clave de Cloud KMS my-cmek-key a la identidad del servicio.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Crear 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 instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso cloud-platform.

Establece el valor de replication.automatic.customerManagedEncryption.kmsKeyName como el 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 crea una versión del secreto en ese secreto, su carga útil se encripta de forma automática mediante la clave antes de escribirse en el almacenamiento persistente, siempre que la identidad del servicio tenga acceso a la clave CMEK. Si la identidad del servicio pierde el acceso o si la clave deja de estar disponible, se mostrará un error si se intenta crear una nueva versión del secreto o acceder a una existente.

Agrega una nueva versión del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS; se lee desde los metadatos del secreto.

gcloud

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

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

Se crea la versión del secreto, incluso si el emisor no tiene acceso directo para usar la clave CMEK. La identidad de servicio para Secret Manager, en lugar del llamador, es responsable de encriptar y desencriptar los secretos cuando se leen o escriben.

Del mismo modo, no necesitas acceso directo a la clave CMEK para acceder al secreto. La identidad del servicio accede a la clave y encripta o desencripta el secreto por ti.

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

gcloud

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

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

Actualizar configuración de CMEK

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

gcloud

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

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

Otorga a la identidad del servicio para el acceso de Secret Manager a fin de encriptar y desencriptar con la CMEK nueva. Este comando otorga a la identidad del servicio la función de encriptador o desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en la clave my-other-key de Cloud KMS.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Para modificar la configuración de CMEK en un secreto, actualiza la replicación en el secreto con los nombres de recursos de la clave de Cloud KMS nuevos.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso 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 administrada por el usuario

En esta sección, se describen los secretos que están configurados con una política de replicación administrada por el usuario. Con una política de replicación administrada por el usuario, puedes controlar la ubicación de Google Cloud en la que se almacena el secreto. Los Secrets son siempre accesibles desde cualquier ubicación de Google Cloud.

Los Secrets con una política de replicación administrada por el usuario deben usar claves de Cloud KMS que se asignen con exactitud a las ubicaciones en las que se almacenan las versiones de los Secrets. En los ejemplos de esta guía, se almacena un secreto en dos ubicaciones distintas: us-east1 y us-central1. Las solicitudes para acceder al Secret se enrutan a una de estas ubicaciones.

En cada una de las dos regiones, crea un llavero de claves y una clave de Cloud KMS con el propósito de encriptación o usa una clave existente. En este ejemplo, se crea un llavero de claves nuevo llamado "secret-manager-cmek" y, luego, se crea una clave llamada "my-cmek-key" en cada región.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Otorga a la identidad del servicio de Secret Manager permiso para encriptar y desencriptar con la clave CMEK mediante la asignación de la función de encriptador/Desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a cada una de las claves de CMEK de forma individual o a todas las claves del proyecto.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Crear un secreto habilitado para CMEK con replicación administrada 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 instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso cloud-platform.

Configura el valor de replication.userManaged.replicas.customerManagedEncryption.kmsKeyName como los nombres de los 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 crea una versión del secreto en ese secreto, su carga útil se encripta de forma automática mediante la clave antes de escribirse en el almacenamiento persistente, siempre que la identidad del servicio tenga acceso a la clave CMEK. Si la identidad del servicio pierde el acceso o si la clave deja de estar disponible, se mostrará un error si se intenta crear una nueva versión del secreto o acceder a una existente.

Agrega una nueva versión del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS; se lee desde los metadatos del secreto.

gcloud

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

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

Se crea la versión del secreto, incluso si el emisor no tiene acceso directo para usar la clave CMEK. La identidad de servicio para Secret Manager, en lugar del llamador, es responsable de encriptar y desencriptar los secretos cuando se leen o escriben.

Del mismo modo, no necesitas acceso directo a la clave CMEK para acceder al secreto. La identidad del servicio accede a la clave y encripta o desencripta el secreto por ti.

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

gcloud

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

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

Actualizar configuración de CMEK

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

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Otorga a la identidad del servicio para el acceso de Secret Manager a fin de encriptar y desencriptar con las CMEK nuevas. Este comando otorga la función de encriptador o desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en las claves de Cloud KMS my-other-key a la identidad del servicio.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Para modificar la configuración de CMEK en un secreto, actualiza la replicación en el secreto con los nombres de recursos de la clave de Cloud KMS nuevos.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 en un secreto de forma simultánea, puedes obtener y configurar la política de replicación a través de un archivo.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 deseada en tu editor preferido. Luego, configura la política nueva:

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 demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso 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 la versión del secreto

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

gcloud

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

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

API

En estos ejemplos, se usa curl para demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso 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"

Esto muestra el nombre completo del recurso de Cloud KMS de la versión de la clave que se usó para encriptar la versión del Secret.

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

Agrega una clave de Cloud EKM a una política de CMEK

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

Dado que Cloud EKM no admite la multirregión global en la actualidad, las claves de Cloud EKM solo se pueden usar con secretos configurados para la replicación administrada 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 llavero de claves nuevo llamado secret-manager-cmek-ekm y, luego, se crea una clave nueva llamada my-ekm-key en el llavero de claves.

gcloud

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

Crea un llavero de claves nuevo:

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

Crea una clave en ese llavero 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 versión nueva de my-ekm-key con el URI externo de la clave. Si deseas obtener más información sobre los URIs externos para las claves de Cloud EKM, consulta Crea una clave externa.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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

Otorga la identidad del servicio para el acceso de Secret Manager a fin de encriptar y desencriptar con la clave externa. Este comando otorga la función de encriptador o desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en my-ekm-key a la identidad del servicio.

gcloud

Para usar Secret Manager en la línea de comandos, primero instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 instala o actualiza a la versión 378.0.0 o posterior de Google Cloud CLI. En Compute Engine o GKE, debes autenticarte con el permiso 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 del secreto en my-ekm-secret, su carga útil se encripta de forma automática mediante la clave de Cloud EKM antes de escribirse en el almacenamiento persistente, siempre que la identidad del servicio tenga acceso a la clave. Si la identidad del servicio pierde el acceso o si la clave deja de estar disponible, se mostrará un error si se intenta crear una nueva versión del secreto o acceder a una existente.

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

gcloud

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

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

Se crea la versión del secreto, incluso si el emisor no tiene acceso directo para usar la clave. La identidad de servicio para Secret Manager, en lugar del llamador, es responsable de encriptar y desencriptar los secretos durante su lectura o escritura.

Accede a la versión del Secret que acabas de crear. Aquí es donde la identidad del servicio accede a la clave y encripta o desencripta el secreto por ti.

gcloud

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

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

Inhabilitar CMEK

Actualiza la política de replicación para quitar la configuración de CMEK de un secreto.

gcloud

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

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

API

En estos ejemplos, se usa curl para demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso 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

¿Qué sigue?

  • Más información sobre CMEK.