CodeBuild création d'un rôle de provisionnement - AWS Proton

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.

CodeBuild création d'un rôle de provisionnement

Les outils d'infrastructure en tant que code (iAAC) tels que AWS CloudFormation Terraform nécessitent des autorisations pour les nombreux types de ressources. AWS Par exemple, si un modèle iAAC déclare un compartiment Amazon S3, il a besoin d'autorisations pour créer, lire, mettre à jour et supprimer des compartiments Amazon S3. Limiter les rôles aux autorisations minimales requises est considéré comme une bonne pratique en matière de sécurité. Compte tenu de l'étendue des AWS ressources, il est difficile de créer des politiques de moindre privilège pour les modèles iAAC, en particulier lorsque les ressources gérées par ces modèles peuvent changer ultérieurement. Par exemple, dans vos dernières modifications apportées à un modèle géré par AWS Proton, vous ajoutez une ressource de base de données RDS.

La configuration des autorisations appropriées permet de faciliter les déploiements de votre iAc. AWS Proton CodeBuild Le provisionnement exécute des commandes CLI arbitraires fournies par le client dans CodeBuild un projet situé dans le compte du client. Généralement, ces commandes créent et suppriment une infrastructure à l'aide d'un outil d'infrastructure en tant que code (iAAC) tel que AWS CDK. Lorsqu'une AWS ressource est déployée dont le modèle utilise le CodeBuild provisionnement, elle AWS démarre une génération dans un CodeBuild projet géré par. AWS Un rôle est transmis à CodeBuild, qui CodeBuild suppose d'exécuter des commandes. Ce rôle, appelé rôle de CodeBuild provisionnement, est fourni par le client et contient les autorisations requises pour approvisionner l'infrastructure. Il est censé être assumé uniquement par lui CodeBuild et ne AWS Proton peut même pas l'assumer.

Création du rôle

Le rôle CodeBuild Provisioning peut être créé dans la console IAM ou dans le. AWS CLI Pour le créer dans AWS CLI :

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AWSProtonCodeBuildProvisioningBasicAccess

Cela attache également leAWSProtonCodeBuildProvisioningBasicAccess, qui contient les autorisations minimales requises par le CodeBuild service pour exécuter une version.

Si vous préférez utiliser la console, vérifiez les points suivants lors de la création du rôle :

  1. Pour une entité de confiance, sélectionnez AWS service, puis sélectionnez CodeBuild.

  2. À l'étape Ajouter des autorisations, sélectionnez AWSProtonCodeBuildProvisioningBasicAccess et toutes les autres politiques que vous souhaitez associer.

Accès administrateur

Si vous associez la AdministratorAccess politique au rôle de CodeBuild provisionnement, cela garantira qu'aucun modèle iAAC n'échouera en raison d'un manque d'autorisations. Cela signifie également que toute personne capable de créer un modèle d'environnement ou un modèle de service peut effectuer des actions au niveau de l'administrateur, même si cet utilisateur n'est pas un administrateur. AWS Proton ne recommande pas de l'utiliser AdministatorAccess avec le rôle de CodeBuild provisioning. Si vous décidez de l'utiliser AdministratorAccess avec le rôle de CodeBuild provisionnement, faites-le dans un environnement sandbox.

Vous pouvez créer un rôle AdministratorAccess dans la console IAM ou en exécutant cette commande :

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
Création d'un rôle à portée minimale

Si vous souhaitez créer un rôle avec des autorisations minimales, il existe plusieurs approches :

  • Déployez avec les autorisations d'administrateur, puis limitez le rôle. Nous vous recommandons d'utiliser IAM Access Analyzer.

  • Utilisez des politiques gérées pour donner accès aux services que vous prévoyez d'utiliser.

AWS CDK

Si vous utilisez AWS CDK avec AWS Proton et que vous avez exécuté cdk bootstrap sur chaque compte/région d'environnement, il existe déjà un rôle pour. cdk deploy Dans ce cas, associez la politique suivante au rôle de CodeBuild provisionnement :

{ "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::account-id:role/cdk-*-deploy-role-*", "arn:aws:iam::account-id:role/cdk-*-file-publishing-role-*" ], "Effect": "Allow" }
VPC personnalisé

Si vous décidez de l'exécuter CodeBuild dans un VPC personnalisé, vous aurez besoin des autorisations suivantes dans votre CodeBuild rôle :

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:*/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterfacePermission" ], "Resource": "arn:aws:ec2:region:account-id:network-interface/*", "Condition": { "StringEquals": { "ec2:AuthorizedService": "codebuild.amazonaws.com" } } }

Vous pouvez également utiliser la politique AmazonEC2FullAccess gérée, même si elle inclut des autorisations dont vous n'aurez peut-être pas besoin. Pour associer la politique gérée à l'aide de la CLI :

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess