Secret Manager es compatible con los programas de rotación para los secretos. Secret Manager envía mensajes a los temas de Pub/Sub configurados en el secreto según la frecuencia y la hora de rotación que se proporcionen. En este tema, se muestra cómo configurar programas únicos o periódicos en tus secretos para recibir notificaciones cuando sea el momento de rotar el secreto.
Rotar los secretos periódicamente ayuda a:
- Limitar la cantidad de tiempo en que un secreto filtrado es válido y expone una vulnerabilidad
- Ejecutar de forma continua el flujo de rotación para garantizar la confiabilidad del proceso
¿Cómo funciona?
Secret Manager envía un mensaje SECRET_ROTATE
a los temas de Pub/Sub configurados en el secreto en el next_rotation_time
del secreto. Esta marca de tiempo se configura de una de las siguientes dos maneras:
Lo proporciona el usuario cuando crea o actualiza el secreto.
Si se proporciona un
rotation_period
, Secret Manager enviará un mensajeSECRET_ROTATE
después delrotation_period
transcurrido.next_rotation_time
se actualizará para reflejar la nueva próxima fecha de rotación.
Debes configurar un suscriptor de Pub/Sub para que reciba los mensajes SECRET_ROTATE
y realice acciones en función de ellos. Si es necesario, implementa flujos de trabajo adicionales, como agregar una nueva versión de secreto y activar implementaciones de aplicaciones.
Notas
La administración de políticas de rotación solo está disponible en la API de
v1
de Secret Manager y en Google Cloud CLI.Los temas de Pub/Sub deben configurarse en el secreto. Si quieres obtener información para crear un tema y una suscripción de Pub/Sub, consulta la guía de inicio rápido de Pub/Sub. Si deseas obtener más información para configurar temas en un secreto, consulta Notificaciones de eventos para Secret Manager.
Se debe establecer
next_rotation_time
si se especificarotation_period
.next_rotation_time
no se puede establecer en menos de cinco minutos en el futuro. Elrotation_period
no puede durar menos de una hora. Para obtener orientación sobre el formato de las marcas de tiempo, consulta la referencia de fecha y hora de gcloud.Errores de entrega: Secret Manager volverá a intentar automáticamente los intentos fallidos de enviar un mensaje. Secret Manager no ofrece garantías con respecto a la publicación si hay una configuración incorrecta de la configuración de secretos o temas, los permisos o las cuotas.
Las rotaciones en curso deben completarse antes de que se pueda iniciar otra para evitar que las rotaciones simultáneas generen un comportamiento inesperado. Las notificaciones se consideran en tránsito mientras Secret Manager intenta enviar el mensaje a Pub/Sub. Se omiten las rotaciones programadas si hay una rotación en curso. Secret Manager volverá a intentar automáticamente los intentos fallidos de enviar un mensaje durante siete días, después de los cuales se abortará la rotación.
Ejemplos
Configura la rotación en un secreto
Crea un secreto con un next_rotation_time
que rote cada 30 días a partir del 1 de junio de 2021:
gcloud
gcloud secrets create secret-id \ --replication-policy "automatic" \ --next-rotation-time="2021-06-01T09:00:00Z" \ --rotation-period="2592000s" \ --topics="full-topic-name"
API
curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets?secretId=${SECRET_ID}" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-binary @- <<EOF
{
"replication":{
"automatic":{}
},
"topics": {"name" : "projects/${PROJECT_ID}/topics/${TOPIC_NAME}"},
"rotation":
{
"next_rotation_time": "2021-06-01T09:00:00Z",
"rotation_period" : '2592000s'
},
}
EOF
Actualiza la configuración de rotación de un secreto
Las rutas de acceso de updateMask válidas para la rotación incluyen rotation
, rotation.next_rotation_time
y rotation.rotation_period
.
Actualiza el next_rotation_time
de un secreto:
gcloud
gcloud secrets update secret-id \ --next-rotation-time "2022-06-01T09:00:00Z"
API
$ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
--request "PATCH" \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{
"rotation": {"next_rotation_time": "2040-06-01T09:00:00Z"}
}
EOF
Inhabilita la rotación en un secreto
Quita el next_rotation_time
de un secreto:
gcloud
gcloud secrets update secret-id \ --remove-next-rotation-time
API
$ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
--request "PATCH" \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{}
EOF
Quita el programa de rotación de un secreto. Esto quitará next_rotation_time
y rotation_period
.
gcloud
gcloud secrets update secret-id \ --remove-rotation-schedule
API
$ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation" \
--request "PATCH" \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{}
EOF
¿Qué sigue?
Obtén información para habilitar las claves de encriptación administradas por el cliente (CMEK) para Secret Manager.
Obtén información para usar ETags para el control de simultaneidad optimista.