Créer des calendriers de rotation dans Secret Manager

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 :

  1. Défini par l'utilisateur : vous pouvez spécifier next_rotation_time lorsque vous créez ou mettez à jour le secret.

  2. Période de rotation : si vous définissez un rotation_period, Secret Manager calcule automatiquement le next_rotation_time. Secret Manager envoie le message SECRET_ROTATE une fois le rotation_period spécifié écoulé, puis met à jour le next_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 si rotation_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

  1. Dans la console Google Cloud , accédez à la page Secret Manager.

    Accéder à Secret Manager

  2. Sur la page Secret Manager, cliquez sur Créer un secret.

  3. Sur la page Créer un secret, saisissez un nom pour le secret dans le champ Nom.

  4. 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.

  5. Accédez à la section Rotation, puis cochez la case Définir la période de rotation.

  6. 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.

  7. Dans le champ Rotation à partir du, saisissez la date et l'heure de début de la période de rotation.

  8. 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

  1. Dans la console Google Cloud , accédez à la page Secret Manager.

    Accéder à Secret Manager

  2. Recherchez le secret que vous souhaitez modifier, puis cliquez sur le menu Actions associé. Dans le menu Actions, cliquez sur Modifier.

  3. 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

  1. Dans la console Google Cloud , accédez à la page Secret Manager.

    Accéder à Secret Manager

  2. Recherchez le secret que vous souhaitez modifier, puis cliquez sur le menu Actions associé. Dans le menu Actions, cliquez sur Modifier.

  3. 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