Comment configurer AWS Systems Manager Run Command pour envoyer une sortie vers un compartiment S3 dans un autre compte AWS ?

Date de la dernière mise à jour : 20/04/2021

Je souhaite envoyer la sortie AWS Systems Manager Run Command à un compartiment Amazon Simple Storage Service (Amazon S3) dans un autre compte AWS. Quelle est la marche à suivre ?

Solution

Vous pouvez utiliser AWS Systems Manager Run Command pour exécuter des documents Systems Manager tels que AWS-RunPatchBaseline et AWS-RunPowerShellScript dans des instances gérées. Vous pouvez ensuite envoyer la sortie à Amazon CloudWatch et Amazon S3 dans le même compte AWS, ou vers un compartiment S3 dans un autre compte AWS.

Pour permettre à Systems Manager d'accéder à un compartiment S3 dans un autre compte AWS, configurez les stratégies AWS Identity and Access Management (IAM) et les stratégies de compartiment suivantes.

Rôle de profil d'instance IAM de l'instance EC2 gérée

Les actions suivantes doivent être en place dans le rôle de profil d'instance IAM associé à votre instance Amazon Elastic Compute Cloud (Amazon EC2) gérée pour autoriser l'accès au compartiment S3. Remplacez DOC-EXAMPLE-BUCKET par le nom du compartiment S3 dans le compte cible.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        }
    ]
}

Pour plus d'informations sur les autorisations S3 requises pour des scénarios spécifiques, consultez la section Créer une stratégie personnalisée pour l'accès au compartiment S3.

Stratégie de compartiment S3 cible

Le compartiment S3 cible doit autoriser le rôle de profil d'instance attaché à l'instance EC2 gérée d'accéder au compartiment. Vous pouvez créer une stratégie de compartiment ou accorder l'accès au compte AWS source dans la liste de contrôle d'accès au compartiment (ACL).

Avertissement : la création d'une stratégie de compartiment constitue une bonne pratique en matière de sécurité. L'ajout du compte AWS source à l'ACL du compartiment permet à tous les utilisateurs et rôles du compte AWS source d'accéder au compartiment S3.

Voici un exemple de stratégie de compartiment pour le compartiment S3 cible. Remplacez DOC-EXAMPLE-BUCKET par le nom du compartiment S3 dans le compte cible. Remplacez SOURCE-AWS-ACCOUNT par l'ID du compte AWS source. Remplacez INSTANCE-PROFILE-ROLE-NAME par le profil d'instance IAM attaché à l'instance EC2.

{
    "Version": "2012-10-17",
    "Id": "Policy1589684413780",
    "Statement": [
        {
            "Sid": "Stmt1589684412557",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::SOURCE-AWS-ACCOUNT:role/INSTANCE-PROFILE-ROLE-NAME"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        }
    ]
}

Configuration de Run Command pour envoyer la sortie de commande à Amazon S3

Console AWS Systems Manager

1.    Ouvrez la console Systems Manager, puis sélectionnez Run Command (Exécuter une commande) dans le volet de navigation.

2.    Sélectionnez Run command (Exécuter une commande).

3.    Sélectionnez le document à exécuter et entrez tous les paramètres requis.

4.    Pour Output Options (Options de sortie), sélectionnez Enable an S3 bucket (Activer un compartiment S3). Sélectionnez Enter an S3 bucket name in the text box (Entrer un nom de compartiment S3 dans la zone de texte), puis entrez le nom du compartiment S3 dans le compte cible.

5.    (Facultatif) Si vous souhaitez envoyer la sortie de commande vers un sous-dossier du compartiment S3, pour S3 key prefix (Préfixe de clé S3), entrez le préfixe de clé S3.

AWS CLI

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Lorsque vous exécutez un appel d'API SendCommand dans l'interface de ligne de commande (AWS CLI), vous pouvez spécifier les options de sortie en ajoutant les paramètres suivants :

--output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

Remarque : dans les exemples de paramètres précédents, DOC-EXAMPLE-BUCKET est le nom du compartiment S3 dans votre compte cible. DOC-EXAMPLE-BUCKET-PREFIX indique le sous-dossier dans le compartiment S3 où vous souhaitez stocker la réponse. Le paramètre output-s3-key-prefix n'est pas requis pour envoyer la sortie de commande à un compartiment S3. Pour plus d'informations, consultez la section send-command.

L'exemple d'AWS CLI suivant lance une commande qui utilise le document AWS-RunPowerShellScript pour exécuter à distance echo helloWorld dans les instances gérées marquées comme Key=tag:Env,Values=Dev,Test. La sortie de commande est envoyée au compartiment S3 nommé DOC-EXAMPLE-BUCKET dans votre compte cible et stockée dans un sous-dossier nommé avec le préfixe DOC-EXAMPLE-BUCKET PREFIX.

aws ssm send-command --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["echo helloWorld"]}'  --targets '[{"Key":"tag:Env","Values":["Dev","Test"]}]' --output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

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


Besoin d'aide pour une question technique ou de facturation ?