Comment déployer des artefacts sur Amazon S3 dans un autre compte en utilisant CodePipeline avec une ACL prête à l’emploi ?

Date de la dernière mise à jour : 24/06/2020

Je veux déployer des artefacts sur Amazon Simple Storage Service (Amazon S3) dans un autre compte en utilisant AWS CodePipeline avec un fournisseur d'actions de déploiement S3 et une liste de contrôle d’accès (ACL) prête à l’emploi.

Brève description

La résolution suivante est basée sur un exemple de scénario qui suppose ce qui suit :

  • Vous avez deux comptes : un compte développement (dév) et un compte production (prod).
  • Le compartiment d'entrée du compte dév est appelé codepipeline-input-bucket (avec gestion des versions activé).
  • Le compartiment à artefacts par défaut du compte dév est appelé codepipeline-us-east-1-0123456789.
  • Le compartiment de sortie du compte prod est appelé codepipeline-output-bucket.
  • Vous déployez des artefacts du compte dév. vers un compartiment S3 du compte prod.
  • Vous utilisez une liste ACL prédéfinie pour fournir au propriétaire du compartiment dans le compte prod l'accès aux objets détenus par le compte dev. Pour déployer des artefacts et définir le compte prod en tant que propriétaire de l'objet, consultez Comment déployer des artefacts sur Amazon S3 dans un autre compte à l'aide de CodePipeline ?

Solution

Créer un CodePipeline dans le compte dév

1.    Ouvrez CodePipeline console (console CodePipeline), puis choisissez Create pipeline (Créer un pipeline).

2.    Pour Pipeline name (Nom du pipeline), entrez crossaccountdeploy.

Remarque : Remplacez crossaccountdeploy par le nom de votre pipeline.

La zone de texte Role name (Nom de rôle) est automatiquement renseignée avec le nom de rôle de service AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Vous pouvez également choisir un rôle de service existant.

3.    Développez la section Advanced settings (Paramètres avancées).

4.    Pour Artifact store (Magasin d'artefacts), sélectionnez Default location (Emplacement par défaut).

Remarque : vous pouvez sélectionner Custom location (Emplacement personnalisé) si cela est nécessaire pour votre scénario.

5.    Pour la clé de chiffrement, sélectionnez Clé gérée par AWS par défaut.

6.    Sélectionnez Suivant.

7.    Sur la page Add source stage (Ajouter une étape source), pour Source provider (Fournisseur de source), choisissez Amazon S3.

8.    Pour Bucket (Compartiment), entrez codepipeline-input-bucket.

Remarque : remplacez codepipeline-input-bucket par le nom de votre compartiment d'entrée.

Important : le compartiment d'entrée doit avoir la gestion des versions activée pour fonctionner avec CodePipeline.

9.    Pour S3 object key (Clé d'objet S3), entrez sample-website.zip.

Important : Pour utiliser un exemple de site Web AWS au lieu de votre propre site Web, consultez Tutorial: Create a Pipeline That Uses Amazon S3 as a Deployment Provider (Didacticiel : créer un pipeline qui utilise Amazon S3 comme fournisseur de déploiement). Recherchez ensuite un « exemple de site Web statique » dans Prerequisites (Prérequis) de la section 1: Deploy Static Website Files to Amazon S3 (1 : Déployer des fichiers de site Web statique sur Amazon S3).

10.    Pour Change detection options (Options de détection de modifications), choisissez Amazon CloudWatch Events (recommandé)

11.    Sélectionnez Suivant.

12.    Sur la pageAjouter une étape de génération, choisissez Ignorer l'étape de génération, puis Ignorer.

13.    Sur la page Ajouter une étape de déploiement, pour Fournisseur de déploiement, choisir Amazon S3.

14.    Pour Région, choisissez Virginie du Nord.

Important : Remplacez Virginie du Nord par la région AWS de votre compartiment de sortie.

15.    Pour Compartiment, entrez le nom du compartiment prod codepipeline-output-bucket.

Remarque : Remplacez codepipeline-output-bucket par le nom de votre compartiment de sortie.

16.    Cochez la case Veuillez extraire le fichier avant le déploiement.

Remarque : Si nécessaire, entrez un chemin pour Chemin de déploiement.

17.    Développez Additional configuration (Configuration supplémentaire).

18.    Pour Canned ACL, choisissez bucket-ower-full-control.

Remarque : Le bucket-ower-full-control accorde au propriétaire du compartiment dans le compte produit cible un accès complet aux objets déployés et détenus par le compte de développement. Pour plus d'informations, consultez Canned ACL.

19.    Choisissez Suivant.

20.    Choisissez Créer un pipeline.

Votre pipeline est maintenant déclenché, mais l'étape de la source échoue. Vous recevez alors la sortie suivante :

The object with key 'sample-website.zip' does not exist.

La section Téléchargez l'exemple de site Web dans le compartiment d'entrée vous présente comment résoudre cette erreur ultérieurement.

Configurer un rôle de service CodePipeline avec une stratégie AWS Identity and Access Management (IAM) qui ajoute l'accès S3 pour le compartiment de sortie du compte prod

1.    Ouvrez IAM console (console IAM) dans le compte dév.

2.    Dans le panneau de navigation, sélectionnez Policies (Stratégies), puis Create policy (Créer une stratégie).

3.    Choisissez l'onglet JSON, saisissez ensuite la stratégie suivante dans l'éditeur de code JSON :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket"
        }
    ]
}

Remarque : Remplacez codepipeline-output-bucket par le nom de votre compartiment de sortie.

4.    Choisissez Review policy (Vérifier la stratégie).

5.    Pour Nom, entrez prodbucketaccess.

Remarque : Remplacez prodbucketaccess par votre propre nom de stratégie.

6.    Choisissez « Create policy » (Créer une stratégie).

7.    Dans le volet de navigation, choisissez « Rôles ».

8.    Dans la liste des rôles, choisissez AWSCodePipelineServiceRole-us-east-1-crossacountdeploy. Il s'agit du rôle de service utilisé par CodePipeline.

Remarque : remplacez AWSCodePipelineServiceRole-us-east-1-crossacountdeploy par votre propre rôle de service, le cas échéant.

9.    Choisissez Joindre une stratégie.

10.    Sélectionnez la stratégie prodbucketaccess que vous avez créée précédemment, puis choisissez Joindre la stratégie.

CodePipeline a désormais accès au compartiment de sortie dans le compte prod.

Configurez le compartiment de sortie dans le compte prod pour autoriser l'accès depuis le compte dev

1.    Ouvrez Amazon S3 console (console Amazon S3) dans le compte prod.

2.    Dans la liste Nom du compartiment, choisissezcodepipeline-output-bucket.

Remarque : Remplacez codepipeline-output-bucket par le nom de votre compartiment de sortie.

3.    Sélectionnez Permissions (Autorisations), puis Bucket Policy (Politique de compartiment).

4.    Dans l'éditeur de texte, entrez la stratégie suivante :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::dev-account-id:root"
            },
            "Action": "s3:Put*",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::dev-account-id:root"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket"
        }
    ]
}

Remarque : Remplacez dev-account-id par l'ID de compte de votre environnement de dev. Remplacez codepipeline-output-bucket par le nom de votre compartiment de sortie.

5.    Choisissez Save.

Charger l'exemple de site Web dans le compartiment d'entrée

1.    Ouvrez Amazon S3 console (console Amazon S3) dans le compte dév.

2.    Dans la liste Bucket name (Nom du compartiment), choisissezcodepipeline-input-bucket.

Remarque : remplacez codepipeline-input-bucket par le nom de votre compartiment d'entrée.

3.    Choisissez Upload (Charger), puis Add files (Ajouter des fichiers).

4.    Sélectionnez le fichier sample-website.zip que vous avez téléchargé précédemment.

5.    Choisissez Upload (Charger).

CodePipeline est maintenant déclenché et ce qui suit se produit :

1.    L'action source sélectionne sample-website.zip dans codepipeline-input-bucket, puis place le fichier zip en tant qu'artefact source dans le compartiment d'artefacts codepipeline-us-east-1-0123456789.

2.    Dans l'action de déploiement, le rôle de service CodePipeline AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy utilise son accès pour déployer sur codepipeline-output-bucket dans le compte prod et appliquer la liste ACL prédéfinie bucket-owner-full-control.

Le compte dev est désormais le propriétaire des objets extraits dans codepipeline-output-bucket, mais le propriétaire du compartiment dans le compte prod dispose également d'un accès complet aux artefacts déployés.


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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?