Comment déployer des artefacts sur Amazon S3 dans un autre compte AWS à l'aide de CodePipeline et d'une liste ACL prédéfinie ?

Date de la dernière mise à jour : 05/01/2022

Je souhaite déployer des artefacts dans un compartiment Amazon Simple Storage Service (Amazon S3) d'un autre compte. Est-il possible d'y parvenir en utilisant AWS CodePipeline avec un fournisseur d'action de déploiement Amazon S3 et une liste de contrôle d'accès (ACL) prédéfinie ?

Résolution

Remarque : l'exemple de procédure ci-dessous suppose ce qui suit.

  • Vous avez deux comptes AWS : un compte de développement et un compte de production.
  • Le compartiment d'entrée du compte développement est appelé codepipeline-input-bucket (avec gestion des versions activée).
  • Le compartiment d'artefacts par défaut du compte développement est appelé codepipeline-us-east-1-0123456789.
  • Le compartiment de sortie du compte de production est appelé codepipeline-output-bucket.
  • Vous déployez des artefacts du compte de développement vers un compartiment S3 du compte de production.
  • Vous utilisez une liste ACL prédéfinie pour fournir au propriétaire du compartiment dans le compte de production l'accès aux objets appartenant au compte de développement.
    Remarque : pour déployer des artefacts et définir le compte de production 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 ?

Créer un CodePipeline dans le compte développement

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

2.    Pour Pipeline name (Nom du pipeline), saisissez un nom pour votre pipeline. Par exemple : crossaccountdeploy.

Remarque : la zone de texte Role name (Nom de rôle) est automatiquement renseignée avec le nom de fonction du service AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Vous pouvez également choisir une fonction du service existante.

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

4.    Pour Artifact store (Magasin d'artefacts), choisissez Default location (Emplacement par défaut).
Remarque : vous pouvez sélectionner Custom location (Emplacement personnalisé) si cela est nécessaire pour votre cas d'utilisation.

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), saisissez le nom de votre compartiment S3 d'entrée de développement. Par exemple : codepipeline-input-bucket.
Important : le compartiment d'entrée doit avoir la gestion des versions activée pour fonctionner avec CodePipeline.

9.    Pour la Clé d'objet S3, saisissez sample-website.zip.

Important : pour utiliser un exemple de site web AWS au lieu de votre propre site web, consultez 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 : 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 page Ajouter une étape de génération, choisissez Ignorer l'étape de génération. Ensuite, choisissez Skip (Ignorer).

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

14.    Pour Region (Région), choisissez la région AWS dans laquelle se trouve votre compartiment S3 de sortie. Par exemple : USA Est (Virginie du Nord).

15.    Pour Bucket (Compartiment), saisissez le nom de votre compartiment S3 de sortie de production. Par exemple : codepipeline-output-bucket.

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 (Liste ACL prédéfinie), choisissez bucket-ower-full-control.
Remarque : la liste bucket-ower-full-control accorde au propriétaire du compartiment dans le compte de production un accès complet aux objets déployés et détenus par le compte de développement. Pour plus d'informations, consultez Liste ACL prédéfinie.

19.    Choisissez Suivant.

20.    Choisissez Create pipeline (Créer un pipeline). Le pipeline s'exécute, mais l'étape source échoue. L'erreur suivante apparaît : « L'objet avec la clé 'sample-website.zip' n'existe pas. »

La section Téléchargez l'exemple de site web dans le compartiment d'entrée de cet article vous montre comment résoudre cette erreur.

Configurer une fonction du service CodePipeline avec une politique AWS Identity and Access Management (IAM) qui ajoute l'accès S3 pour le compartiment de sortie du compte de production

1.    Ouvrez la console IAM dans le compte de développement.

2.    Dans le panneau de navigation, choisissez Policies (Politiques). Ensuite, choisissez Create policy (Créer une politique).

3.    Choisissez l'onglet JSON. Ensuite, saisissez la politique suivante dans l'éditeur JSON :

Important : remplacez codepipeline-output-bucket par le nom de votre compartiment S3 de sortie de production.

{
    "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"
        }
    ]
}

4.    Choisissez Examiner une politique.

5.    Pour Name (Nom), saisissez un nom pour la politique. Par exemple : prodbucketaccess.

6.    Choisissez Créer une politique.

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 de la fonction du service CodePipeline.
Remarque : vous pouvez utiliser votre propre fonction du service, si cela est nécessaire pour votre cas d'utilisation.

9.    Choisissez Joindre une stratégie.

10.    Sélectionnez la politique que vous avez créée (prodbucketaccess). Ensuite, choisissez Attach policy (Attacher une politique) pour accorder à CodePipeline l'accès au compartiment S3 de sortie de production.

Configurer le compartiment de sortie dans le compte de production pour autoriser l'accès depuis le compte de développement

1.    Ouvrez la console Amazon S3 dans le compte de production.

2.    Dans la liste Bucket name (Nom du compartiment), choisissez votre compartiment S3 de sortie de production. Par exemple : codepipeline-output-bucket.

3.    Choisissez Permissions (Autorisations). Choisissez Bucket Policy (Politique de compartiment).

4.    Dans l'éditeur de texte, saisissez la politique suivante, puis choisissez Save (Enregistrer) :

Important : remplacez dev-account-id par l'ID de compte AWS de votre environnement de développement. Remplacez codepipeline-output-bucket par le nom de votre compartiment S3 de sortie de production.

{
    "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"
        }
    ]
}

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

1.    Ouvrez la console Amazon S3 dans le compte de développement.

2.    Dans la liste Bucket name (Nom du compartiment), choisissez votre compartiment S3 d'entrée de développement. Par exemple : codepipeline-input-bucket.

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

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

5.    Choisissez Upload (Charger) pour exécuter le pipeline. Lorsque le pipeline s'exécute, les événements suivants se produisent :

  • L'action source sélectionne le fichier sample-website.zip dans le compartiment S3 d'entrée de développement (codepipeline-input-bucket). Ensuite, l'action source place le fichier zip en tant qu'artefact source dans le compartiment d'artefacts par défaut du compte de développement (codepipeline-us-east-1-0123456789).
  • Dans l'action de déploiement, la fonction du service CodePipeline (AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) utilise son accès pour effectuer un déploiement dans le compartiment S3 de sortie de production (codepipeline-output-bucket). L'action de déploiement applique également la liste ACL prédéfinie bucket-owner-full-control.

Remarque : le compte de développement est le propriétaire des objets extraits dans le compartiment S3 de sortie de production (codepipeline-output-bucket). Le propriétaire du compartiment dans le compte de production dispose également d'un accès total aux artefacts déployés.


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


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