De forma predeterminada, Secret Manager encripta el contenido del cliente en reposo. Secret Manager controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina Encriptación predeterminada de Google.
Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluido Secret Manager. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite hacer un seguimiento del uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.
Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Secret Manager es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).
Secret Manager proporciona herramientas para almacenar, administrar y acceder a datos sensibles en tus aplicaciones.
CMEK con Autokey de Cloud KMS
Puedes crear CMEK de forma manual para proteger tus recursos de Secret Manager o usar la clave automática de Cloud KMS. Con Autokey, los llaveros de claves y las claves se generan a pedido como parte de la creación de recursos en Secret Manager. Los agentes de servicio que usan las claves para las operaciones de encriptación y desencriptación se crean si aún no existen y se les otorgan los roles de Identity and Access Management (IAM) necesarios. Para obtener más información, consulta Descripción general de las claves automáticas.
Secret Manager solo es compatible con Autokey de Cloud KMS cuando se crean recursos con Terraform o la API de REST.
Para aprender a usar las CMEK creadas de forma manual para proteger tus recursos de Secret Manager, consulta CMEK con replicación automática y CMEK con replicación administrada por el usuario en esta página.
Para obtener información sobre cómo usar las CMEK que crea la clave automática de Cloud KMS para proteger tus recursos de Secret Manager, consulta Cómo usar la clave automática con recursos de Secret Manager.
Cómo funciona la CMEK en Secret Manager
Antes de escribir una versión secreta en el almacenamiento persistente en una ubicación determinada, 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 de CMEK y es una clave simétrica que se administra en Cloud KMS. La clave CMEK debe estar en la misma Google Cloud ubicación 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 la 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
La CMEK solo está disponible en la API de v1
de Secret Manager y en Google Cloud CLI.
Antes de comenzar
Puedes elegir almacenar todos los recursos en el mismo proyecto o almacenar secretos y claves en proyectos separados. Lee sobre la 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 guardar tus recursos de Secret Manager.
- Si es necesario, completa los pasos en la sección Configura Secret Manager de la guía de inicio rápido de Secret Manager.
Cloud KMS:
- Crea o usa un proyecto existente para guardar tus recursos de Cloud KMS.
- Si es necesario, habilita la API de Cloud KMS.
Establece las siguientes variables en 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 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 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
Otorgarás a esta identidad de servicio acceso a las claves de Cloud KMS de CMEK que se usan 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 secretos que usan la política de replicación automática, tu clave de CMEK debe estar ubicada en la multirregión global
de Cloud KMS. Si usas una clave de Cloud EKM, no puedes configurar tu secreto para que use la replicación automática porque las claves de Cloud EKM no están disponibles en la región de global
. Para obtener más información sobre el uso de 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 clave 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 de Secret Manager acceso para encriptar y desencriptar con la clave de CMEK. Este comando otorga el rol de encriptador/desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) en la clave de Cloud KMS my-cmek-key
a la identidad de 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"
Crea un secreto con replicación automática. El nombre del recurso de la clave de 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
en el nombre del recurso de la clave de 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 del secreto en ese secreto, la carga útil de la versión del secreto se encriptará automáticamente con la clave antes de escribirse en el almacenamiento persistente, siempre y cuando la identidad del servicio tenga acceso a la clave de CMEK. Si la identidad del servicio pierde el acceso o si la clave deja de estar disponible, se mostrará un error cuando se intente crear una versión secreta nueva o acceder a una existente.
Agrega una versión nueva del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS; se lee de 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 secreta, incluso si el llamador no tiene acceso directo para usar la clave de CMEK. La identidad del servicio de Secret Manager, en lugar de la 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 de CMEK para acceder al secreto. La identidad del servicio accede a la clave y encripta o desencripta el secreto en tu nombre.
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"
Actualiza la configuración de CMEK
Crea claves KMS simétricas nuevas 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 de Secret Manager acceso para encriptar y desencriptar con la nueva clave de CMEK. Este comando otorga el rol de encriptador / desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) en la clave 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 "global" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Modifica la configuración de CMEK en un secreto actualizando la replicación en el secreto con los nombres de los 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 abordan los secretos configurados con una política de replicación administrada por el usuario. Con una política de replicación administrada por el usuario, controlas 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 administrada por el usuario deben usar claves de Cloud KMS que se asignen exactamente a las ubicaciones en las que se almacenan las versiones del secreto. Los ejemplos de esta guía almacenan un secreto en dos ubicaciones separadas: us-east1 y us-central1. Las solicitudes para acceder al secreto 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 bien 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 permiso a la identidad de servicio de Secret Manager para encriptar y desencriptar con la clave de CMEK. Para ello, otorga el rol de encriptador/desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) para cada una de las claves de CMEK de forma individual o para 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"
Crea un secreto habilitado para CMEK con replicación administrada por el usuario. El nombre del recurso de la clave de 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.
Establece el valor de replication.userManaged.replicas.customerManagedEncryption.kmsKeyName
en los nombres de recursos de las claves de 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 del secreto en ese secreto, la carga útil de la versión del secreto se encriptará automáticamente con la clave antes de escribirse en el almacenamiento persistente, siempre y cuando la identidad del servicio tenga acceso a la clave de CMEK. Si la identidad del servicio pierde el acceso o si la clave deja de estar disponible, se mostrará un error cuando se intente crear una versión secreta nueva o acceder a una existente.
Agrega una versión nueva del secreto. Ten en cuenta que no especificas el nombre del recurso de la clave de Cloud KMS; se lee de 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 secreta, incluso si el llamador no tiene acceso directo para usar la clave de CMEK. La identidad del servicio de Secret Manager, en lugar de la 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 de CMEK para acceder al secreto. La identidad del servicio accede a la clave y encripta o desencripta 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 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"
Actualiza la configuración de CMEK
Crea dos claves 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 de servicio de Secret Manager acceso para encriptar y desencriptar con las nuevas claves de CMEK. Este comando otorga el rol de encriptador / desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) en las claves de Cloud KMS my-other-key
a la identidad de 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"
Modifica la configuración de CMEK en un secreto actualizando la replicación en el secreto con los nombres de los 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 establecer 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 que refleje la configuración de CMEK deseada en tu editor preferido. Luego, establece 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
Consulta la configuración de la CMEK de la versión del secreto
Para inspeccionar los metadatos de una versión del secreto, incluido si la versión del secreto 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 devuelve el nombre completo del recurso de Cloud KMS de la versión de clave que se usó para encriptar 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"
}
}
}
}
Agrega una clave de Cloud EKM a una política de CMEK
En esta sección, se explica cómo agregar 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.
Dado que Cloud EKM no admite actualmente la multirregión global
, 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.
Para obtener más información sobre los URIs externos de 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 a la identidad del servicio de Secret Manager acceso para encriptar y desencriptar con la clave externa. Este comando otorga el rol de encriptador / desencriptador 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 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
, la carga útil de la versión del secreto se encripta automáticamente con 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 cuando se intente crear una versión secreta nueva o acceder a una existente.
Agrega una versión nueva del secreto. Ten en cuenta que el nombre del recurso de la clave se lee de 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 llamador no tiene acceso directo para usar la clave. La identidad del servicio de Secret Manager, en lugar de la del llamador, es responsable de encriptar y desencriptar los secretos cuando se leen o escriben.
Accede a la versión del secreto que acabas de crear. Aquí es donde la identidad del servicio accede a la clave y encripta o desencripta el secreto en tu nombre.
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"
Inhabilita CMEK
Quita la configuración de CMEK de un secreto actualizando la política de replicació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 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.