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 el tiempo de rotación proporcionados. En este tema, se muestra cómo configurar programas únicos o periódicos en los secretos para recibir notificaciones cuando sea el momento de rotarlos.
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 su next_rotation_time
. Esta marca de tiempo se establece de una de estas dos maneras:
Lo proporciona el usuario cuando se 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 hora de rotación.
Debes configurar un suscriptor de Pub/Sub para recibir los mensajes SECRET_ROTATE
y tomar medidas al respecto. Si es necesario, implementa flujos de trabajo adicionales, como agregar una nueva versión del secreto y activar implementaciones de la aplicación.
Notas
La administración de las 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 se deben configurar en el secreto. Para aprender a crear un tema y una suscripción de Pub/Sub, consulta la guía de inicio rápido de Pub/Sub. Para obtener información sobre cómo configurar temas en un secreto, consulta Notificaciones de eventos de Secret Manager.
Se debe establecer
next_rotation_time
si se especificarotation_period
.next_rotation_time
no se puede establecer para menos de cinco minutos en el futuro. Elrotation_period
no puede durar menos de una hora. Para obtener orientación sobre el formato de marca de tiempo, consulta la referencia de datetime de gcloud.Errores de entrega: Secret Manager volverá a intentar automáticamente los intentos fallidos para enviar un mensaje. Secret Manager no garantiza la entrega en caso de que haya una configuración incorrecta en relación con la configuración del tema o el secreto, los permisos o las cuotas.
Las rotaciones en tránsito deben completarse antes de que se pueda iniciar otra rotación 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. Las rotaciones programadas se omiten si hay una rotación en curso. Secret Manager volverá a intentar de forma automática los intentos fallidos de enviar un mensaje durante un máximo de siete días, después de lo cual se anula la rotación.
Ejemplos
Configura la rotación de un Secret
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 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
{
"next_rotation_time": "2040-06-01T09:00:00Z"
}
EOF
Inhabilita la rotación de 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 quita 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?
Aprende a habilitar claves de encriptación administradas por el cliente (CMEK) para Secret Manager.
Obtén información sobre cómo usar ETags para el control de simultaneidad optimista.