Passer au contenu

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

Lecture de 6 minute(s)
0

Je souhaite déployer des artefacts dans un compartiment Amazon Simple Storage Service (Amazon S3) d'un autre compte à l'aide d'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 suivant suppose ce qui suit :

  • Vous possédez deux comptes AWS : Un compte de développement et un compte de production.
  • Le compartiment d'entrée du compte de développement s’appelle codepipeline-input-bucket (avec la gestion des versions activée).
  • Le compartiment d'artefact par défaut du compte de développement s'appelle codepipeline-us-east-1-0123456789.
  • Le compartiment de sortie du compte de production s’appelle codepipeline-output-bucket.
  • Vous déployez des artefacts depuis le compte de développement vers un compartiment S3 du compte de production.
  • Vous utilisez une ACL prédéfinie pour permettre au propriétaire du compartiment dans le compte de production d'accéder aux objets détenus par le compte de développement.
    Remarque : Pour déployer des artefacts et définir le compte de production comme propriétaire de l'objet, consultez la section Comment puis-je déployer des artefacts sur Amazon S3 dans un autre compte à l'aide de CodePipeline ?

Créer un CodePipeline dans le compte de développement

1.    Ouvrez la console CodePipeline. Puis, sélectionnez Créer un pipeline.

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

Remarque : La zone de texte Nom du rôle rôle est automatiquement renseignée avec le nom du rôle de service AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Vous pouvez également choisir un autre rôle de service existant.

3.   Développez la section Paramètres avancés.

4.   Pour Magasin d’artefacts, sélectionnez Emplacement par défaut.
Remarque : Vous pouvez sélectionner Emplacement personnalisé si cela est nécessaire pour votre cas d'utilisation.

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

6.    Choisissez Suivant.

7.   Sur la page Ajouter une étape source, pour Fournisseur de source, sélectionnez Amazon S3.

8.    Pour Compartiment, saisissez le nom de votre compartiment S3 d'entrée de développement. Par exemple : codepipeline-input-bucket.
Important : La gestion des versions du compartiment d'entrée doit être activée pour que ce dernier fonctionne avec CodePipeline.

9.    Pour 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 le didacticiel : Créer un pipeline qui utilise Amazon S3 comme fournisseur de déploiement. Puis, recherchez « exemple de site Web statique » dans les Prérequis de la section 1 : Déployer des fichiers de site Web statiques dans Amazon S3.

10.    Pour Options de détection de modifications, sélectionnez Amazon CloudWatch Events (recommandé).

11.    Choisissez Suivant.

12.    Sur la page Ajouter une étape de génération, sélectionnez Ignorer l'étape de génération. Puis, sélectionnez Enregistrer.

13.   Sur la page Ajouter une phase de déploiement, pour Fournisseur de déploiement, sélectionnez Amazon S3.

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

15.    Pour 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, saisissez un chemin de déploiement.

17.    Développez Configuration supplémentaire.

18.    Pour Liste ACL prédéfinie, sélectionnez bucket-owner-full-control.
Remarque : Le paramètre bucket-owner-full-control donne au propriétaire du compartiment dans le compte de production un accès total aux objets déployés et détenus par le compte de développement. Pour plus d'informations, consultez la section Liste ACL prédéfinie.

19.    Sélectionnez Suivant.

20.    Sélectionnez Créer un pipeline. Le pipeline fonctionne, mais l'étape source échoue. L'erreur suivante s'affiche : « The object with key 'sample-website.zip' does not exist. »

La section Charger l'exemple de site Web dans le compartiment d'entrée de cet article explique comment résoudre cette erreur.

Configurer un rôle de service CodePipeline avec une stratégie AWS Identity and Access Management (IAM) qui ajoute un 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 volet de navigation, sélectionnez Stratégies. Puis, sélectionnez Créer une stratégie.

3.    Sélectionnez l’onglet JSON. Puis, saisissez la stratégie 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 Vérifier une politique.

5.    Pour Nom, saisissez le nom de la stratégie. Par exemple : prodbucketaccess.

6.    Sélectionnez Créer une stratégie.

7.    Dans le volet de navigation, sélectionnez Rôles.

8.    Dans la liste des rôles, sélectionnez AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Il s'agit du rôle de service CodePipeline.
Remarque : Vous pouvez utiliser votre propre rôle de service, si cela est nécessaire pour votre cas d'utilisation.

9.    Sélectionnez Attacher des stratégies.

10.    Sélectionnez la stratégie que vous avez créée (prodbucketaccess). Puis, sélectionnez Attacher la stratégie 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 Nom du compartiment, choisissez votre compartiment S3 de sortie de production. Par exemple : codepipeline-output-bucket.

3.    Sélectionnez Autorisations. Puis, sélectionnez Sttratégie de compartiment.

4.    Dans l'éditeur de texte, saisissez la stratégie suivante, puis sélectionnez 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 Nom du compartiment, choisissez votre compartiment S3 d'entrée de développement. Par exemple : codepipeline-input-bucket.

3.    Sélectionnez Charger. Puis, sélectionnez Ajouter des fichiers.

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

5.    Sélectionnez Charger pour exécuter le pipeline. Lorsque le pipeline fonctionne, 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). L'action source place ensuite 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, le rôle de service CodePipeline (AWScodePipelineServiceRole-US-east-1-CrossAccountDeploy) utilise son accès pour déployer sur le compartiment S3 de sortie de production (codepipeline-output-bucket). L'action de déploiement applique également le bucket-owner-full-control de la liste ACL prédéfinie.

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.

AWS OFFICIELA mis à jour il y a un an