Créez un pipeline CodePipeline qui utilise les ressources d'un autre AWS compte - AWS CodePipeline

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Créez un pipeline CodePipeline qui utilise les ressources d'un autre AWS compte

Vous pouvez créer un pipeline qui utilise les ressources créées ou gérées par un autre compte AWS . Par exemple, vous souhaiterez peut-être utiliser un compte pour votre pipeline et un autre pour vos CodeDeploy ressources.

Note

Lorsque vous créez un pipeline avec des actions à partir de plusieurs comptes, vous devez configurer vos actions afin qu'elles puissent toujours accéder aux artefacts en fonction des limitations des pipelines entre comptes. Les limitations suivantes s'appliquent aux actions entre comptes :

  • En général, une action peut consommer un artefact seulement si :

    • L'action est dans le même compte que le compte de pipeline OU

    • L'artefact a été créé dans le compte de pipeline pour une action dans un autre compte OU

    • L'artefact a été généré par une action précédente dans le même compte que l'action

    En d'autres termes, vous ne pouvez pas transmettre un artefact d'un compte à un autre si aucun compte n'est le compte de pipeline.

  • Les actions entre comptes ne sont pas prises en charge pour les types d'action suivants :

    • Les actions de génération Jenkins

Pour cet exemple, vous devez créer une clé AWS Key Management Service (AWS KMS) à utiliser, ajouter la clé au pipeline et configurer des politiques de compte et des rôles pour permettre l'accès entre comptes. Pour une AWS KMS clé, vous pouvez utiliser l'identifiant de la clé, la clé ARN ou l'aliasARN.

Note

Les alias ne sont reconnus que dans le compte qui a créé la KMS clé. Pour les actions entre comptes, vous ne pouvez utiliser que l'identifiant ou la clé ARN pour identifier la clé. Les actions entre comptes impliquent l'utilisation du rôle de l'autre compte (AccountB), donc en spécifiant l'ID de la clé, la clé de l'autre compte (AccountB) sera utilisée.

Dans cette procédure pas à pas et ses exemples, AccountA est le compte utilisé à l'origine pour créer le pipeline. Il a accès au compartiment Amazon S3 utilisé pour stocker les artefacts du pipeline et au rôle de service utilisé par AWS CodePipeline. AccountB est le compte initialement utilisé pour créer l' CodeDeploy application, le groupe de déploiement et le rôle de service utilisés par CodeDeploy.

Dans AccountA pour modifier un pipeline afin d'utiliser l' CodeDeploy application créée par AccountB, AccountA doit :

  • Demandez l'identifiant ARN ou le numéro de compte de AccountB (dans cette procédure pas à pas, le AccountB L'identifiant est 012ID_ACCOUNT_B).

  • Créez ou utilisez une clé gérée par le AWS KMS client dans la région pour le pipeline, et autorisez l'utilisation de cette clé au rôle de service (CodePipeline_Service_Role) et AccountB.

  • Créez une politique de compartiment Amazon S3 qui accorde AccountB accès au compartiment Amazon S3 (par exemple, codepipeline-us-east-2-1234567890).

  • Créez une politique qui permet AccountA pour assumer un rôle configuré par AccountB, et associez cette politique au rôle de service (CodePipeline_Service_Role).

  • Modifiez le pipeline pour utiliser la AWS KMS clé gérée par le client au lieu de la clé par défaut.

Dans AccountB pour autoriser l'accès à ses ressources à un pipeline créé dans AccountA, AccountB doit :

  • Demandez l'identifiant ARN ou le numéro de compte de AccountA (dans cette procédure pas à pas, le AccountA L'identifiant est 012ID_ACCOUNT_A).

  • Créez une politique appliquée au rôle d'EC2instance Amazon configuré pour CodeDeploy autoriser l'accès au compartiment Amazon S3 (codepipeline-us-east-2-1234567890).

  • Créez une politique appliquée au rôle d'EC2instance Amazon configuré pour autoriser CodeDeploy l'accès à la clé gérée par le AWS KMS client utilisée pour chiffrer les artefacts du pipeline dans AccountA.

  • Configurer et associer un IAM rôle (CrossAccount_Role) avec une politique de relation de confiance qui autorise le rôle CodePipeline de service dans AccountA pour assumer le rôle.

  • Créez une politique qui autorise l'accès aux ressources de déploiement requises par le pipeline et attachez-la à CrossAccount_Role.

  • Créez une politique qui autorise l'accès au compartiment Amazon S3 (codepipeline-us-east-2-1234567890) et attachez-le à CrossAccount_Role.

Condition préalable : créer une clé de chiffrement AWS KMS

Les clés gérées par le client sont spécifiques à une région, comme toutes AWS KMS les clés. Vous devez créer votre AWS KMS clé gérée par le client dans la même région où le pipeline a été créé (par exemple,us-east-2).

Pour créer une clé gérée par le client dans AWS KMS
  1. Connectez-vous au AWS Management Console avec AccountA et ouvrez la AWS KMS console.

  2. Sur la gauche, choisissez Customer managed keys (Clés gérées par le client).

  3. Choisissez Create key. Dans Configure key (Configurer la clé), laissez l'option Symmetric (Symétrique) sélectionnée par défaut et choisissez Next (Suivant).

  4. Dans Alias, entrez un alias à utiliser pour cette clé (par exemple, PipelineName-Key). Vous pouvez éventuellement fournir une description et des balises pour cette clé, puis choisissez Next.

  5. Dans Définir les autorisations administratives clés, choisissez le ou les rôles que vous souhaitez voir jouer en tant qu'administrateurs pour cette clé, puis cliquez sur Suivant.

  6. Dans Définir les autorisations d'utilisation des clés, sous Ce compte, sélectionnez le nom du rôle de service pour le pipeline (par exemple, CodePipeline _Service_Role). Sous Autres AWS comptes, choisissez Ajouter un autre AWS compte. Entrez l'identifiant du compte pour AccountB pour terminer leARN, puis choisissez Next.

  7. Dans Review and edit key policy (Revoir et modifier la stratégie de clé), passez en revue la stratégie, puis choisissez Finish (Terminer).

  8. Dans la liste des clés, choisissez l'alias de votre clé et copiez-le ARN (par exemple,arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE). Vous en aurez besoin lorsque vous modifierez votre pipeline et configurerez des stratégies.

Étape 1 : Configurer des stratégies de compte et des rôles

Après avoir créé la AWS KMS clé, vous devez créer et joindre des politiques qui permettront l'accès entre comptes. Cela nécessite des actions de la part des deux AccountA and AccountB.

Configurez les politiques et les rôles dans le compte qui créera le pipeline (AccountA)

Pour créer un pipeline qui utilise les CodeDeploy ressources associées à un autre AWS compte, AccountA doit configurer des politiques à la fois pour le compartiment Amazon S3 utilisé pour stocker les artefacts et pour le rôle de service pour CodePipeline.

Pour créer une politique pour le compartiment Amazon S3 qui accorde l'accès à AccountB (console)
  1. Connectez-vous au AWS Management Console avec AccountA et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste des compartiments Amazon S3, choisissez le compartiment Amazon S3 dans lequel sont stockés les artefacts de vos pipelines. Ce compartiment est nommécodepipeline-region-1234567EXAMPLE, où region est la AWS région dans laquelle vous avez créé le pipeline et 1234567EXAMPLE est un nombre aléatoire à dix chiffres qui garantit que le nom du compartiment est unique (par exemple, codepipeline-us-east-2-1234567890).

  3. Sur la page détaillée du compartiment Amazon S3, sélectionnez Properties.

  4. Dans le volet des propriétés, développez Autorisations, puis choisissez Ajouter une stratégie de compartiment.

    Note

    Si une politique est déjà attachée à votre compartiment Amazon S3, choisissez Modifier la politique du compartiment. Vous pouvez ensuite ajouter les déclarations de l'exemple suivant à la stratégie existante. Pour ajouter une nouvelle politique, cliquez sur le lien et suivez les instructions du générateur AWS de politiques. Pour plus d'informations, consultez la section Présentation des IAM politiques.

  5. Saisissez la stratégie suivante dans la fenêtre Bucket Policy Editor. Cela permettra AccountB accès aux artefacts du pipeline, et donnera AccountB la possibilité d'ajouter des artefacts de sortie si une action, telle qu'une source personnalisée ou une action de génération, les crée.

    Dans l'exemple suivant, ARN c'est pour AccountB est 012ID_ACCOUNT_B. ARNPour le compartiment Amazon S3, c'est codepipeline-us-east-2-1234567890. ARNsRemplacez-les par ARN ceux du compte auquel vous souhaitez autoriser l'ARNaccès et du compartiment Amazon S3 :

    { "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890" } ] }
  6. Choisissez Save, puis fermez l'éditeur de stratégie.

  7. Choisissez Enregistrer pour enregistrer les autorisations pour le compartiment Amazon S3.

Pour créer une politique pour le rôle de service pour CodePipeline (console)
  1. Connectez-vous au AWS Management Console avec AccountA et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Dans la liste des rôles, sous Nom du rôle, choisissez le nom du rôle de service pour CodePipeline.

  4. Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.

  5. Choisissez l'JSONonglet et entrez la politique suivante pour autoriser AccountB pour assumer le rôle. Dans l'exemple suivant, 012ID_ACCOUNT_B est le ARN pour AccountB:

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::012ID_ACCOUNT_B:role/*" ] } }
  6. Choisissez Review policy (Examiner une politique).

  7. Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).

Configurez les politiques et les rôles dans le compte propriétaire de la AWS ressource (AccountB)

Lorsque vous créez une application, un déploiement et un groupe de déploiement dans CodeDeploy, vous créez également un rôle d'EC2instance Amazon. (Ce rôle est créé si vous utilisez l'assistant d'exécution du déploiement, mais vous pouvez également le créer manuellement.) Pour un pipeline créé dans AccountA pour utiliser CodeDeploy les ressources créées dans AccountB, vous devez :

  • Configurez une politique pour le rôle d'instance qui lui permet d'accéder au compartiment Amazon S3 où sont stockés les artefacts du pipeline.

  • Créez un deuxième rôle dans AccountB configuré pour un accès entre comptes.

    Ce second rôle doit non seulement avoir accès au compartiment Amazon S3 dans AccountA, il doit également contenir une politique autorisant l'accès aux CodeDeploy ressources et une politique de relation de confiance autorisant le rôle du CodePipeline service dans AccountA pour assumer le rôle.

    Note

    Ces politiques sont spécifiques à la configuration CodeDeploy des ressources à utiliser dans un pipeline créé à l'aide d'un autre AWS compte. Les autres AWS ressources nécessiteront des politiques spécifiques à leurs besoins en ressources.

Pour créer une politique pour le rôle d'EC2instance Amazon configuré pour CodeDeploy (console)
  1. Connectez-vous au AWS Management Console avec AccountB et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Dans la liste des rôles, sous Nom du rôle, choisissez le nom du rôle de service utilisé comme rôle d'EC2instance Amazon pour l' CodeDeploy application. Le nom de ce rôle peut varier, et plusieurs rôles d'instance peuvent être utilisés par un groupe de déploiement. Pour plus d'informations, consultez Créer un profil d'IAMinstance pour vos EC2 instances Amazon.

  4. Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.

  5. Choisissez l'JSONonglet et entrez la politique suivante pour accorder l'accès au compartiment Amazon S3 utilisé par AccountA pour stocker des artefacts pour les pipelines (dans cet exemple, codepipeline-us-east-2-1234567890):

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890" ] } ] }
  6. Choisissez Review policy (Examiner une politique).

  7. Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).

  8. Créez une deuxième politique indiquant AWS KMS où se arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE trouve ARN la clé gérée par le client créée dans AccountA et configuré pour autoriser AccountB pour l'utiliser :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE" ] } ] }
    Important

    Vous devez utiliser l'identifiant de compte de AccountA dans cette politique dans le cadre de la ressource ARN pour la AWS KMS clé, comme indiqué ici, sinon la politique ne fonctionnera pas.

  9. Choisissez Review policy (Examiner une politique).

  10. Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).

Créez maintenant un IAM rôle à utiliser pour l'accès entre comptes et configurez-le de telle sorte que le rôle de CodePipeline service dans AccountA peut assumer le rôle. Ce rôle doit contenir des politiques qui autorisent l'accès aux CodeDeploy ressources et au compartiment Amazon S3 utilisés pour stocker les artefacts dans AccountA.

Pour configurer le rôle multi-comptes dans IAM
  1. Connectez-vous au AWS Management Console avec AccountB et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam.

  2. Dans le panneau de navigation, choisissez Roles (Rôles). Sélectionnez Create role (Créer un rôle).

  3. Sous Sélectionner un type d'entité de confiance, choisissez Autre compte AWS . Sous Spécifier les comptes qui peuvent utiliser ce rôle, dans ID de AWS compte, entrez l'ID de compte du compte qui créera le pipeline dans CodePipeline (AccountA), puis choisissez Next : Permissions.

    Important

    Cette étape crée la politique de relation de confiance entre AccountB and AccountA. Toutefois, cela accorde un accès de niveau root au compte et CodePipeline recommande de le limiter au rôle de CodePipeline service dans AccountA. Suivez l'étape 16 pour restreindre les autorisations.

  4. Sous Joindre des politiques d'autorisation, choisissez AmazonS3 ReadOnlyAccess, puis cliquez sur Suivant : Tags.

    Note

    Ce n'est pas la stratégie que vous allez utiliser. Vous devez choisir une stratégie pour mettre fin à l'assistant.

  5. Choisissez Suivant : vérification. Tapez le nom de ce rôle dans Nom du rôle (par exemple, CrossAccount_Role). Vous pouvez donner à ce rôle le nom que vous voulez, à condition qu'il respecte les conventions de dénominationIAM. Pensez à donner au rôle un nom qui indique clairement son but. Choisissez Create Role (Créer le rôle).

  6. Dans la liste des rôles, choisissez le rôle que vous venez de créer (par exemple, CrossAccount_Role) pour ouvrir la page Résumé de ce rôle.

  7. Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.

  8. Choisissez l'JSONonglet et entrez la politique suivante pour autoriser l'accès aux CodeDeploy ressources :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
  9. Choisissez Review policy (Examiner une politique).

  10. Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).

  11. Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.

  12. Choisissez l'JSONonglet et entrez la politique suivante pour permettre à ce rôle de récupérer les artefacts d'entrée et de placer les artefacts de sortie dans le compartiment Amazon S3 dans AccountA:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] } ] }
  13. Choisissez Review policy (Examiner une politique).

  14. Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).

  15. Dans l'onglet Autorisations, recherchez AmazonS3 ReadOnlyAccess dans la liste des politiques sous Nom de la politique, puis cliquez sur l'icône de suppression (X) à côté de la politique. A l'invite, choisissez Detach.

  16. Sélectionnez l'onglet Relation de confiance, puis choisissez Modifier la politique de confiance. Choisissez l'option Ajouter un principal dans la colonne de gauche. Pour le type principal, choisissez IAMRôles, puis indiquez ARN le rôle CodePipeline de service dans AccountA. arn:aws:iam::Account_A:rootSupprimez-le de la liste AWS des directeurs, puis choisissez Mettre à jour la politique.

Étape 2 : Modifier le pipeline

Vous ne pouvez pas utiliser la CodePipeline console pour créer ou modifier un pipeline qui utilise des ressources associées à un autre AWS compte. Toutefois, vous pouvez utiliser la console pour créer la structure générale du pipeline, puis utiliser le AWS CLI pour modifier le pipeline et ajouter ces ressources. Vous pouvez également utiliser la structure d'un pipeline existant et y ajouter manuellement les ressources.

Pour ajouter les ressources associées à un autre AWS compte (AWS CLI)
  1. Sur un terminal (Linux, macOS ou Unix) ou une invite de commande (Windows), exécutez la get-pipeline commande sur le pipeline auquel vous souhaitez ajouter des ressources. Copiez le résultat de la commande dans un JSON fichier. Par exemple, pour un pipeline nommé MyFirstPipeline, vous devez taper quelque chose de similaire à ce qui suit :

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    La sortie est envoyée au pipeline.json dans le fichier.

  2. Ouvrez le JSON fichier dans n'importe quel éditeur de texte brut. Une fois "type": "S3" dans le magasin d'artefacts, ajoutez les informations KMSencryptionKey, l'identifiant et le type où codepipeline-us-east-2-1234567890 est le nom du compartiment Amazon S3 utilisé pour stocker les artefacts du pipeline et arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE celui ARN de la clé gérée par le client que vous venez de créer :

    { "artifactStore”: { "location": "codepipeline-us-east-2-1234567890", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE", "type": "KMS" } },
  3. Ajoutez une action de déploiement dans une étape pour utiliser les CodeDeploy ressources associées à AccountB, y compris les roleArn valeurs du rôle multi-comptes que vous avez créé (CrossAccount_Role).

    L'exemple suivant montre JSON que cela ajoute une action de déploiement nommée ExternalDeploy. Il utilise les CodeDeploy ressources créées dans AccountB dans une étape nommée Staging. Dans l'exemple suivant, le ARN pour AccountB est 012ID_ACCOUNT_B:

    , { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "ExternalDeploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName", "DeploymentGroupName": "AccountBApplicationGroupName" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B:role/CrossAccount_Role" } ] }
    Note

    Il ne s'agit pas JSON de la structure de l'ensemble du pipeline, mais de la structure de l'action par étapes.

  4. Vous devez supprimer les lignes metadata du fichier afin que la commande update-pipeline puisse l'utiliser. Supprimez la section de la structure du pipeline dans le JSON fichier ("metadata": { }les lignes et les "updated" champs "created""pipelineARN", et).

    Par exemple, supprimez les lignes suivantes de la structure :

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    Enregistrez le fichier.

  5. Pour appliquer vos modifications, exécutez la update-pipeline commande en spécifiant le JSON fichier de pipeline, comme suit :

    Important

    N'oubliez pas d'inclure file:// devant le nom du fichier. Il est nécessaire dans cette commande.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Cette commande affiche toute la structure du pipeline mise à jour.

Pour tester le pipeline qui utilise les ressources associées à un autre AWS compte
  1. Sur un terminal (Linux, macOS ou Unix) ou une invite de commande (Windows), exécutez la start-pipeline-execution commande en spécifiant le nom du pipeline, comme suit :

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Pour de plus amples informations, veuillez consulter Lancement manuel d'un pipeline.

  2. Connectez-vous au AWS Management Console avec AccountA et ouvrez la CodePipeline console à l'adresse http://console.aws.amazon.com/codesuite/codepipeline/home.

    Les noms de tous les pipelines associés à votre AWS compte sont affichés.

  3. Dans Name, choisissez le nom du pipeline que vous venez de modifier. Une vue détaillée du pipeline s'affiche alors, laquelle indique notamment l'état de chaque action, dans chaque étape du pipeline.

  4. Observez la progression à travers le pipeline. Attendez un message de réussite concernant l'action qui utilise la ressource associée à un autre AWS compte.

    Note

    Vous recevrez un message d'erreur si vous essayez d'afficher les détails de l'action alors que vous êtes connecté avec AccountA. Déconnectez-vous, puis connectez-vous avec AccountB pour consulter les détails du déploiement dans CodeDeploy.