CodeBuildcré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.

CodeBuildcréation d'un rôle de provisionnement

Des outils d'infrastructure en tant que code (iAAC) tels queAWS CloudFormationet Terraform nécessitent des autorisations pour les nombreux types deAWSressources. 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'ampleur deAWSressources, 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, lors des dernières modifications apportées à un modèle géré parAWS 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 CodeBuildLe provisionnement exécute des commandes CLI arbitraires fournies par le client dans unCodeBuildprojet 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 queAWS CDK. Quand unAWSla ressource déploie dont le modèle utiliseCodeBuildApprovisionnement,AWSva démarrer une compilation dans unCodeBuildprojet géré parAWS. Un rôle est transmis àCodeBuild, quiCodeBuildsuppose d'exécuter des commandes. Ce rôle, appeléCodeBuildLe rôle de provisionnement est fourni par le client et contient les autorisations requises pour provisionner l'infrastructure. Il est censé être assumé uniquement parCodeBuildet mêmeAWS ProtonJe ne peux pas le supposer.

Création du rôle

LeCodeBuildLe rôle de provisionnement peut être créé dans la console IAM ou dansAWS CLI. Pour le créer dansAWS 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 joint également leAWSProtonCodeBuildProvisioningBasicAccess, qui contient les autorisations minimales requises parCodeBuildservice pour exécuter une compilation.

Si vous préférez utiliser la console, assurez-vous de ce qui suit lorsque vous créez le rôle :

  1. Pour une entité de confiance, sélectionnezAWSservice, puis sélectionnezCodeBuild.

  2. À l'étape Ajouter des autorisations, sélectionnezAWSProtonCodeBuildProvisioningBasicAccesset toute autre politique que vous souhaitez joindre.

Accès administrateur

Si vous joignez leAdministratorAccesspolitique à l'égard duCodeBuildRôle de provisionnement, il 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 administrateur.AWS Protonne recommande pas d'utiliserAdministatorAccessavec leCodeBuildRôle de provisionnement. Si vous décidez d'utiliserAdministratorAccessavec leCodeBuildRôle de provisionnement, faites-le dans un environnement sandbox.

Vous pouvez créer un rôle avecAdministratorAccessdans 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 des autorisations d'administrateur, puis limitez le rôle. Nous vous recommandons d'utiliserAnalyseur d'accès IAM.

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

AWS CDK

Si vous utilisezAWS CDKavecAWS Proton, et tu as courucdk bootstrapsur chaque compte/région d'environnement, alors il existe déjà un rôle pourcdk deploy. Dans ce cas, joignez la politique suivante auCodeBuildRôle de 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 tu décides de courirCodeBuilddans unVPC personnalisé, vous aurez besoin des autorisations suivantes dans votreCodeBuildrô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 utiliserAmazonEC2FullAccesspolitique gérée, bien que cela inclue des autorisations dont vous n'avez peut-être pas besoin. Pour associer la politique gérée à l'aide de l'interface de ligne de 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