J'ai mis à jour mon secret dans AWS Secrets Manager, mais la référence dynamique n'a pas été mise à jour lors de la mise à jour de ma pile AWS CloudFormation.
Brève description
Lorsque vous mettez à jour un secret dans Secrets Manager, CloudFormation ne détecte pas automatiquement que la valeur du secret a changé. Lors des mises à jour de pile, CloudFormation ne récupère pas la valeur de la référence dynamique sauf si une modification est apportée à la référence dynamique elle-même.
Après avoir mis à jour le secret dans Secrets Manager, vous devez mettre à jour la pile CloudFormation et également spécifier VersionId dans la chaîne de référence dynamique. La spécification de VersionId est une bonne pratique pour s'assurer que CloudFormation récupère la version mise à jour du secret.
Résolution
Remarque : Si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, assurez-vous que vous utilisez la version AWS CLI la plus récente.
L'exemple de scénario suivant montre comment mettre à jour votre référence dynamique Secrets Manager dans CloudFormation.
1. Référencez dynamiquement le secret Secrets Manager dans votre modèle CloudFormation.
Par exemple, le modèle CloudFormation suivant référence dynamiquement un secret Secrets Manager avec l'identifiant du secret mysecret et la chaîne du secret {"MyKey":"MyValue"} :
Resources:
SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey}}'
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
Remarque : La référence dynamique précédente renvoie à MyValue pour la propriété GroupDescription.
2. Mettez à jour le secret dans Secrets Manager en exécutant la commande update-secret via AWS Command Line Interface (AWS CLI) et en spécifiant la chaîne du secret. Dans le scénario d’exemple, la chaîne du secret est {"MyKey":"NewValue"}.
Remarque : VersionId n'apparaît pas dans la Console de gestion AWS. Si vous avez mis à jour le secret via la Console de gestion AWS, exécutez la commande get-secret-value via AWS Command Line Interface (AWS CLI) pour récupérer VersionId.
3. Notez VersionId dans la sortie.
Exemple de sortie :
$ aws secretsmanager update-secret --secret-id mysecret --secret-string {\"MyKey\":\"NewValue\"}
{
"ARN": "arn:aws:secretsmanager:us-east-1:xxxxxxxxxxxx:secret:mysecret-ABCDeF",
"Name": "mysecret",
"VersionId": "ab01234c-5d67-89ef-01gh-2ijk345l6m78"
}
Remarque : VersionId «ab01234c-5d67-89ef-01gh-2ijk345l6m78» de la sortie précédente n'est pas automatiquement appliqué à la référence dynamique dans la pile CloudFormation.
4. Mettez à jour la pile et spécifiez VersionId dans la chaîne de référence dynamique. Par exemple :
Resources:
SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey::ab01234c-5d67-89ef-01gh-2ijk345l6m78}}'
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
Remarque : Dans l'exemple de modèle précédent, la syntaxe :: avant VersionId «ab01234c-5d67-89ef-01gh-2ijk345l6m78» est la syntaxe correcte. Cette section de la chaîne de référence dynamique est laissée vide car version-stage n'a pas besoin d'être spécifié.