Secret Manager vous permet de planifier des rotations périodiques de vos secrets. Pour ce faire, Secret Manager envoie des notifications aux sujets Pub/Sub associés à vos secrets, en fonction de la fréquence et de la date de rotation que vous spécifiez. Cette page explique comment configurer ces plannings de rotation.
Fonctionnement des notifications de rotation des secrets
Secret Manager déclenche un message SECRET_ROTATE
vers les sujets Pub/Sub désignés à la date de rotation (next_rotation_time
) du secret. Pour déterminer ce code temporel, vous avez deux options :
-
Défini par l'utilisateur : vous pouvez spécifier
next_rotation_time
lorsque vous créez ou mettez à jour le secret. -
Période de rotation : si vous définissez un
rotation_period
, Secret Manager calcule automatiquement lenext_rotation_time
. Secret Manager envoie le messageSECRET_ROTATE
une fois lerotation_period
spécifié écoulé, puis met à jour lenext_rotation_time
pour planifier la prochaine rotation.
Vous devez configurer un abonné Pub/Sub pour recevoir les messages SECRET_ROTATE
et agir en conséquence.
Vous devrez peut-être également configurer des workflows supplémentaires en réponse à ces notifications, par exemple en créant une nouvelle version du secret et en déployant les modifications dans vos applications.
Exigences et points à prendre en compte pour les plannings de rotation des secrets
-
Les sujets Pub/Sub doivent être configurés sur le secret. Pour découvrir comment créer un sujet et un abonnement Pub/Sub, consultez le guide de démarrage rapide de Pub/Sub. Pour savoir comment configurer des thèmes sur un secret, consultez Notifications d'événements pour Secret Manager.
-
next_rotation_time
doit être défini sirotation_period
est spécifié. -
La valeur
next_rotation_time
ne peut pas être fixée sur moins de cinq minutes dans le futur. -
La valeur
rotation_period
ne peut pas être inférieure à une heure. Pour en savoir plus sur la mise en forme des codes temporels, consultez la documentation de référence surGoogle Cloud datetime. -
Bien que Secret Manager relance automatiquement les tentatives infructueuses d'envoi de messages, nous ne pouvons pas garantir la réussite de l'envoi en cas d'erreur de configuration du secret, du sujet, des autorisations ou des quotas.
-
Les rotations en cours doivent être terminées avant de démarrer une autre rotation afin d'empêcher les rotations simultanées de générer un comportement inattendu. Les notifications sont considérées comme en cours pendant que Secret Manager tente d'envoyer le message à Pub/Sub. Les rotations planifiées sont ignorées en cas de rotation en cours. Secret Manager tente automatiquement d'envoyer un message pendant sept jours au maximum en cas d'échec, après quoi la rotation est annulée.
Configurer la rotation sur un secret
Vous pouvez configurer un calendrier de rotation à l'aide de la console Google Cloud , de la Google Cloud CLI ou de l'API Secret Manager.
Console
-
Dans la console Google Cloud , accédez à la page Secret Manager.
-
Sur la page Secret Manager, cliquez sur Créer un secret.
-
Sur la page Créer un secret, saisissez un nom pour le secret dans le champ Nom.
-
Saisissez une valeur pour le secret (par exemple,
abcd1234
). Vous pouvez également importer un fichier texte contenant la valeur du secret à l'aide de l'option Importer un fichier. Cette action crée automatiquement la version du secret. -
Accédez à la section Rotation, puis cochez la case Définir la période de rotation.
-
Dans la liste Période de rotation, sélectionnez l'une des options par défaut ou Personnalisée pour configurer votre propre calendrier de rotation.
-
Dans le champ Rotation à partir du, saisissez la date et l'heure de début de la période de rotation.
-
Cliquez sur Créer un secret.
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SECRET_ID : ID du secret ou identifiant complet du secret.
- NEXT_ROTATION_TIME : code temporel auquel effectuer la première rotation au format ISO 8601, par exemple
2021-06-01T09:00:00Z
. - ROTATION_PERIOD : intervalle, en secondes, pour faire tourner la clé. Par exemple, pour faire pivoter la clé toutes les 2 592 000 secondes, définissez la valeur sur
2592000s
. - FULL_TOPIC_NAME : nom complet de votre sujet Pub/Sub au format
projects/your-project-id/topics/your-topic-name
.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud secrets create SECRET_ID \ --replication-policy "automatic" \ --next-rotation-time="NEXT_ROTATION_TIME" \ --rotation-period="ROTATION_PERIOD" \ --topics="FULL_TOPIC_NAME"
Windows (PowerShell)
gcloud secrets create SECRET_ID ` --replication-policy "automatic" ` --next-rotation-time="NEXT_ROTATION_TIME" ` --rotation-period="ROTATION_PERIOD" ` --topics="FULL_TOPIC_NAME"
Windows (cmd.exe)
gcloud secrets create SECRET_ID ^ --replication-policy "automatic" ^ --next-rotation-time="NEXT_ROTATION_TIME" ^ --rotation-period="ROTATION_PERIOD" ^ --topics="FULL_TOPIC_NAME"
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet Google Cloud
- SECRET_ID : ID du secret ou identifiant complet du secret
- TOPIC_NAME : nom du sujet
Méthode HTTP et URL :
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID
Corps JSON de la requête :
{ "replication":{ "automatic":{} }, "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"}, "rotation": { "next_rotation_time": "2021-06-01T09:00:00Z", "rotation_period" : '2592000s' }, }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Mettre à jour les paramètres de rotation d'un secret
Vous pouvez mettre à jour les paramètres de rotation suivants lorsque vous envoyez une demande de mise à jour :
-
rotation
: fait référence à la configuration de rotation complète du secret. -
rotation.next_rotation_time
: cible spécifiquement le code temporel indiquant la date de la prochaine rotation. -
rotation.rotation_period
: spécifie la durée entre chaque rotation.
Pour mettre à jour les paramètres de rotation du secret, utilisez l'une des méthodes suivantes :
Console
-
Dans la console Google Cloud , accédez à la page Secret Manager.
-
Recherchez le secret que vous souhaitez modifier, puis cliquez sur le menu
Actions associé. Dans le menu Actions, cliquez sur Modifier. -
Accédez à la section Rotation. Modifiez la période de rotation si nécessaire, puis cliquez sur Mettre à jour le code secret.
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SECRET_ID : ID du secret ou identifiant complet du secret.
- NEXT_ROTATION_TIME : code temporel auquel effectuer la première rotation au format ISO 8601, par exemple
2021-06-01T09:00:00Z
.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud secrets update SECRET_ID \ --next-rotation-time="NEXT_ROTATION_TIME"
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --next-rotation-time="NEXT_ROTATION_TIME"
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --next-rotation-time="NEXT_ROTATION_TIME"
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet Google Cloud .
- SECRET_ID : ID du secret ou identifiant complet du secret.
- NEXT_ROTATION_TIME : code temporel auquel effectuer la première rotation au format ISO 8601, par exemple
2021-06-01T09:00:00Z
.
Méthode HTTP et URL :
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
Corps JSON de la requête :
{ "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"} }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Désactiver la rotation sur un secret
Pour désactiver la rotation des secrets, utilisez l'une des méthodes suivantes :
Console
-
Dans la console Google Cloud , accédez à la page Secret Manager.
-
Recherchez le secret que vous souhaitez modifier, puis cliquez sur le menu
Actions associé. Dans le menu Actions, cliquez sur Modifier. -
Accédez à la section Rotation. Décochez la case Définir une période de rotation, puis cliquez sur Mettre à jour le secret.
gcloud
Supprimer la next_rotation_time
d'un secret
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SECRET_ID : ID du secret ou identifiant complet du secret
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud secrets update SECRET_ID \ --remove-next-rotation-time
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --remove-next-rotation-time
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --remove-next-rotation-time
Supprimez le calendrier de rotation d'un secret. Cela supprime à la fois next_rotation_time
et rotation_period
.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SECRET_ID : ID du secret ou identifiant complet du secret
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud secrets update SECRET_ID \ --remove-rotation-schedule
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --remove-rotation-schedule
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --remove-rotation-schedule
REST
Supprimer la prochaine heure de rotation d'un secret
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet Google Cloud
- SECRET_ID : ID du secret ou identifiant complet du secret
Méthode HTTP et URL :
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
Corps JSON de la requête :
{}
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
Supprimez le calendrier de rotation d'un secret. Cela supprime à la fois la date de la prochaine rotation et la période de rotation.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet Google Cloud
- SECRET_ID : ID du secret ou identifiant complet du secret
Méthode HTTP et URL :
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation
Corps JSON de la requête :
{}
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
Étapes suivantes
- Découvrez comment activer les clés de chiffrement gérées par le client (CMEK) pour Secret Manager.
- Découvrez comment utiliser les ETags pour le contrôle de simultanéité optimiste.