Pourquoi la mise à jour d'un secret dans Secrets Manager ne met-elle pas automatiquement à jour le secret dans AWS CloudFormation ?

Dernière mise à jour : 26-04-2022

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


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?