web-dev-qa-db-fra.com

Références dynamiques pour spécifier les valeurs de Secret Manager dans AWS Cloudformation

Existe-t-il de toute façon que nous pouvons passer références dynamiques à Secret Manager à AWS Launch Config User Data?

Voici l'extrait de code que j'ai essayé:

"SampleLaunchConfig": {
            "Type": "AWS::AutoScaling::LaunchConfiguration",
             "Properties": {
                "ImageId": {
                    "Fn::FindInMap": [
                        "AWSRegionArch2AMI",
                        {
                            "Ref": "AWS::Region"
                        },
                        "AMI"
                    ]
                },
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": [
                            "",
                            [
                                "#!/bin/bash -xe\n",
                                "yum update -y\n",
                                "useradd -p <<pwd>>{{resolve:secretsmanager:Credentials:SecretString:userName}}\n",
                                "\n"
                            ]
                        ]
                    }
                }
        }
    }

Semble une erreur lors de l'obtention du useradd: nom d'utilisateur non valide '{{résoudre: secretsmanager: informations d'identification: SecretString: userName}}'

Comment puis-je transmettre la valeur secrète de Secret Manager aux données utilisateur de cloudformation?

6

Je ne sais pas pourquoi cela n'est pas développé correctement pour vous. Cependant, vous ne voulez probablement pas que CFN développe votre secret dans les données utilisateur, car le mot de passe serait incorporé dans le script de données utilisateur encodé en base64 qui est visible dans la console EC2.

Au lieu de cela, vous devriez profiter du fait que vous disposez d'un script qui s'exécute sur l'hôte et appeler le gestionnaire de secrets au moment de l'exécution du script (avertissement non testé):

"SampleLaunchConfig": {
        "Type": "AWS::AutoScaling::LaunchConfiguration",
         "Properties": {
            "ImageId": {
                "Fn::FindInMap": [
                    "AWSRegionArch2AMI",
                    {
                        "Ref": "AWS::Region"
                    },
                    "AMI"
                ]
            },
            "UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
                        "",
                        [
                            "#!/bin/bash -xe\n",
                            "yum update -y\n",
                            "yum install -y jq\n",
                            !Sub "useradd -p `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .passwordKey` `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .userName`\n",
                            "\n"
                        ]
                    ]
                }
            }
    }
}

Ce n'est pas idéal car il étend le mot de passe sur la ligne de commande. Il peut être rendu plus sûr en plaçant d'abord le mot de passe dans un fichier, en le lisant puis en déchiquetant le fichier.

1
JoeB

Il paraît que {{resolve:...}} les références dynamiques ne sont développées que dans certains contextes d'un modèle.

Il n'y a aucune information précise dans les documents AWS sur exactement où dans un modèle vous pouvez utiliser ces références. La formulation actuelle concernant {{resolve:secretsmanager:...}} dit:

"La référence dynamique secretsmanager peut être utilisée dans toutes les propriétés de ressource"

Cependant, cela est contredit par votre exemple, et j'ai également observé des références dynamiques ne parvenant pas à résoudre à l'intérieur des données CloudFormation :: Init.

J'ai un cas de support actif ouvert avec AWS à ce sujet, ils ont convenu que le comportement des références dynamiques est insuffisamment documenté. Je mettrai à jour cette réponse au fur et à mesure que j'en apprendrai plus.

https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

0
direvus