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, leAccountB
L'identifiant est012ID_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
) etAccountB
. -
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é parAccountB
, 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, leAccountA
L'identifiant est012ID_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 dansAccountA
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
.
Rubriques
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
-
Connectez-vous au AWS Management Console avec
AccountA
et ouvrez la AWS KMS console. -
Sur la gauche, choisissez Customer managed keys (Clés gérées par le client).
-
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).
-
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. -
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.
-
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. -
Dans Review and edit key policy (Revoir et modifier la stratégie de clé), passez en revue la stratégie, puis choisissez Finish (Terminer).
-
Dans la liste des clés, choisissez l'alias de votre clé et copiez-le ARN (par exemple,
). Vous en aurez besoin lorsque vous modifierez votre pipeline et configurerez des stratégies.arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
É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
.
Rubriques
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)
-
Connectez-vous au AWS Management Console avec
AccountA
et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/. -
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-
, oùregion
-1234567EXAMPLE
region
est la AWS région dans laquelle vous avez créé le pipeline et1234567EXAMPLE
est un nombre aléatoire à dix chiffres qui garantit que le nom du compartiment est unique (par exemple,codepipeline-us-east-2-1234567890
). -
Sur la page détaillée du compartiment Amazon S3, sélectionnez Properties.
-
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.
-
Saisissez la stratégie suivante dans la fenêtre Bucket Policy Editor. Cela permettra
AccountB
accès aux artefacts du pipeline, et donneraAccountB
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
est012ID_ACCOUNT_B
. ARNPour le compartiment Amazon S3, c'estcodepipeline-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
" } ] } -
Choisissez Save, puis fermez l'éditeur de stratégie.
-
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)
-
Connectez-vous au AWS Management Console avec
AccountA
et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/. -
Dans le panneau de navigation, choisissez Roles (Rôles).
-
Dans la liste des rôles, sous Nom du rôle, choisissez le nom du rôle de service pour CodePipeline.
-
Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.
-
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 pourAccountB
:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::
012ID_ACCOUNT_B
:role/*" ] } } -
Choisissez Review policy (Examiner une politique).
-
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 dansAccountA
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)
-
Connectez-vous au AWS Management Console avec
AccountB
et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/. -
Dans le panneau de navigation, choisissez Roles (Rôles).
-
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.
-
Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.
-
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
" ] } ] } -
Choisissez Review policy (Examiner une politique).
-
Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).
-
Créez une deuxième politique indiquant AWS KMS où se
trouve ARN la clé gérée par le client créée dansarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
AccountA
et configuré pour autoriserAccountB
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. -
Choisissez Review policy (Examiner une politique).
-
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
-
Connectez-vous au AWS Management Console avec
AccountB
et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam. -
Dans le panneau de navigation, choisissez Roles (Rôles). Sélectionnez Create role (Créer un rôle).
-
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
andAccountA
. Toutefois, cela accorde un accès de niveau root au compte et CodePipeline recommande de le limiter au rôle de CodePipeline service dansAccountA
. Suivez l'étape 16 pour restreindre les autorisations. -
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.
-
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). -
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. -
Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.
-
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": "*" } ] }
-
Choisissez Review policy (Examiner une politique).
-
Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).
-
Sous l'onglet Autorisations, sélectionnez Ajouter une politique en ligne.
-
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
/*" ] } ] } -
Choisissez Review policy (Examiner une politique).
-
Dans le champ Name (Nom), saisissez un nom pour cette stratégie. Choisissez Create Policy (Créer une politique).
-
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.
-
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:root
Supprimez-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)
-
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. -
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
celui ARN de la clé gérée par le client que vous venez de créer :arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
{ "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" } }, -
Ajoutez une action de déploiement dans une étape pour utiliser les CodeDeploy ressources associées à
AccountB
, y compris lesroleArn
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 dansAccountB
dans une étape nomméeStaging
. Dans l'exemple suivant, le ARN pourAccountB
est012ID_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.
-
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.
-
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
-
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.
-
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.
-
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.
-
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 avecAccountB
pour consulter les détails du déploiement dans CodeDeploy.