Comment utiliser CodePipeline pour déployer un CloudFormation StackSet géré par des services dans un compte administrateur délégué ?
Je souhaite utiliser AWS CodePipeline pour déployer un StackSet AWS CloudFormation afin de cibler les unités organisationnelles (UO) dans AWS Organizations. Je souhaite utiliser les autorisations gérées par les services pour déployer la pile dans un compte d'administrateur délégué.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Prérequis : Activez l'accès autorisé entre AWS CloudFormation StackSets et Organizations. Pour les autorisations, consultez la section Autorisations requises pour activer l’accès autorisé. Vous devez être un utilisateur administrateur du compte de gestion pour activer l'accès autorisé.
Enregistrer le compte d'administrateur délégué
Pour déléguer un compte de membre en tant que compte d'administrateur, exécutez la commande register-delegated-administrator de l’AWS CLI suivante :
aws organizations register-delegated-administrator \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com \ --account-id="111122223333"
Remarque : Remplacez 111122223333 par votre ID de compte.
Pour vérifier l'enregistrement, exécutez la commande CLI list-delegated-administrators suivante :
aws organizations list-delegated-administrators \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com
Configurer le pipeline
Pour créer un pipeline qui autorise les actions CloudFormation, vous pouvez utiliser la console Codepipeline ou l'AWS CLI.
Utiliser la console
Pour utiliser la console CodePipeline afin de créer un pipeline, consultez la section Créer un pipeline à partir de modèles statiques. Pour Configurer le modèle, ajoutez le modèle cp-template.yaml suivant :
AWSTemplateFormatVersion: "2010-09-09" Parameters: TargetRegions: Type: String Resources: Bucket: Type: "AWS::S3::Bucket" DeletionPolicy: Retain Properties: VersioningConfiguration: Status: Enabled ServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: CodePipelinePermissions PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - s3:GetObject - s3:GetObjectVersion - s3:GetBucketVersioning - s3:PutObject - s3:PutObjectAcl Resource: - !Sub arn:aws:s3:::${Bucket} - !Sub arn:aws:s3:::${Bucket}/* - Effect: Allow Action: - cloudformation:CreateStackSet - cloudformation:UpdateStackSet - cloudformation:DeleteStackSet - cloudformation:DescribeStackSet - cloudformation:DescribeStackSetOperation - cloudformation:ListStackInstances - cloudformation:CreateStackInstances Resource: "*" - Effect: Allow Action: - organizations:ListDelegatedAdministrators Resource: "*" Pipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt ServiceRole.Arn ArtifactStore: Type: S3 Location: !Ref Bucket Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Provider: S3 Version: "1" Configuration: S3Bucket: !Ref Bucket S3ObjectKey: "source.zip" PollForSourceChanges: false OutputArtifacts: - Name: SourceArtifact - Name: Deploy Actions: - Name: ServiceManaged-SS RunOrder: "1" ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormationStackSet Version: "1" Configuration: PermissionModel: SERVICE_MANAGED CallAs: DELEGATED_ADMIN OrganizationsAutoDeployment: Enabled Regions: !Ref TargetRegions StackSetName: !Sub codepipeline-deployed-cfn-${AWS::AccountId}-stackset MaxConcurrentPercentage: "50" FailureTolerancePercentage: "100" ConcurrencyMode: SOFT_FAILURE_TOLERANCE Capabilities: CAPABILITY_NAMED_IAM,CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND DeploymentTargets: "SourceArtifact::ou.txt" TemplatePath: "SourceArtifact::template.yaml" Parameters: "SourceArtifact::parameters.txt" InputArtifacts: - Name: SourceArtifact
Remarque : Le rôle de service Gestion des identités et des accès AWS (AWS IAM) que vous avez spécifié pour CallAs doit disposer de l'autorisation organizations:ListDelegatedAdministrators.
Utiliser l’AWS CLI
Pour utiliser l'AWS CLI afin de créer le pipeline, consultez la section Créer un pipeline (CLI).
(Facultatif) Créer une pile
Si vous n'utilisez pas de modèle pour créer votre pipeline, vous devez créer une pile dans CloudFormation pour votre pipeline.
Utiliser la console
Pour utiliser la console CloudFormation afin de créer une pile, consultez la section Création d'une pile. Dans la section Paramètres, ajoutez les régions AWS dans lesquelles les instances StackSet sont déployées. Par exemple, incluez aa-example-1, aa-example-2 dans TargetRegions. Assurez-vous que le rôle de service IAM que vous avez spécifié pour CallAs dispose de l'autorisation organizations:ListDelegatedAdministrators.
Remarque : Une fois la pile créée, on s'attend à ce que le pipeline échoue car vous n'avez pas chargé le fichier .zip source. Vous chargez le fichier .zip après avoir préparé les fichiers source.
Utiliser l’AWS CLI
Utilisez le même chemin de fichier que celui que vous avez utilisé pour cp-template.yaml, puis exécutez la commande create-stack de l’AWS CLI suivante :
aws cloudformation create-stack \ --stack-name stack-name \ --capabilities CAPABILITY_NAMED_IAM \ --template-body file://cp-template.yaml \ --parameters ParameterKey=TargetRegions,ParameterValue=aa-example-1\\,aa-example-2
Remarque : Remplacez stack-name par le nom de votre pile, //./cp-template.yaml par le chemin de votre fichier et aa-example-1 et aa-example-2 par vos régions.
Charger les fichiers source dans votre compartiment Amazon S3
Préparer les fichiers source
Pour définir les cibles de déploiement, créez un fichier .txt et nommez-le ou.txt. Ajoutez le code suivant au fichier .txt :
["ou-xrop-xxxxxxxx","ou-xrop-yyyyyyyy"]
Pour définir les paramètres du modèle CloudFormation, créez un fichier .txt et nommez-le parameters.txt. Ajoutez le code suivant au fichier .txt :
[ { "ParameterKey": "VersioningStatus", "ParameterValue": "Enabled" } ]
Pour créer le modèle StackSet, créez un fichier .txt et nommez-le template.yaml. Ajoutez le code suivant au fichier .txt :
AWSTemplateFormatVersion: 2010-09-09 Parameters: VersioningStatus: Type: String Default: Suspended AllowedValues: - Enabled - Suspended Resources: S3Bucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Delete Properties: VersioningConfiguration: Status: !Ref VersioningStatus
Déployer les fichiers source
Compressez les trois fichiers dans source.zip, puis chargez le fichier .zip dans le répertoire racine du compartiment Amazon Simple Storage Service (Amazon S3) source. Si le pipeline échoue et que vous obtenez le message d'erreur "Account used is not a delegated administrator", confirmez que vous avez enregistré le compte en tant qu'administrateur délégué.
Informations connexes
Référence de l’action de déploiement d'AWS CloudFormation StackSets
Comment résoudre l'erreur lorsque j'exécute l'opération ListStackSets ?"Account used is not a delegated administrator"
- Sujets
- Management & Governance
- Balises
- AWS CloudFormation
- Langue
- Français

Contenus pertinents
- demandé il y a un mois
- demandé il y a 6 mois
- demandé il y a 3 mois
- demandé il y a 3 mois
AWS OFFICIELA mis à jour il y a 3 mois