CodeBuild aprovisionamiento, creación de roles - AWS Proton

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

CodeBuild aprovisionamiento, creación de roles

Las herramientas de infraestructura como código (IaaC), como AWS CloudFormation Terraform, requieren permisos para los diferentes tipos de recursos. AWS Por ejemplo, si una plantilla de IaC declara un bucket de Amazon S3, necesitará permisos para crear, leer, actualizar y eliminar buckets de Amazon S3. Se considera una buena práctica de seguridad limitar los roles a los permisos mínimos necesarios. Dada la variedad de AWS recursos, resulta difícil crear políticas de privilegios mínimos para las plantillas de IaaC, especialmente cuando los recursos que gestionan esas plantillas pueden cambiar más adelante. Por ejemplo, en las últimas modificaciones de una plantilla gestionada por AWS Proton, se añade un recurso de base de datos. RDS

La configuración de los permisos correctos ayuda a facilitar las implementaciones de su iAC. AWS Proton CodeBuild El aprovisionamiento ejecuta CLI comandos arbitrarios proporcionados por el cliente en un CodeBuild proyecto ubicado en la cuenta del cliente. Por lo general, estos comandos crean y eliminan la infraestructura mediante una herramienta de infraestructura como código (IaC), como AWS CDK. Cuando se despliega un AWS recurso cuya plantilla utiliza CodeBuild Provisioning, AWS se iniciará una compilación en un proyecto gestionado por. CodeBuild AWS Se pasa una función a CodeBuild, que se CodeBuild supone que ejecuta comandos. Esta función, denominada función de CodeBuild aprovisionamiento, la proporciona el cliente y contiene los permisos necesarios para aprovisionar la infraestructura. Se supone que solo debe asumirlo, CodeBuild y ni siquiera AWS Proton puede asumirlo.

Creación del rol

La función de CodeBuild aprovisionamiento se puede crear en la IAM consola o en. AWS CLI Para crearlo en la 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

También se adjunta elAWSProtonCodeBuildProvisioningBasicAccess, que contiene los permisos mínimos que necesita el CodeBuild servicio para ejecutar una compilación.

Si prefiere utilizar la consola, asegúrese de lo siguiente al crear el rol:

  1. Para una entidad de confianza, seleccione AWS servicio y, a continuación, seleccione CodeBuild.

  2. En el paso Añadir permisos, seleccione AWSProtonCodeBuildProvisioningBasicAccess y cualquier otra política que desee asociar.

Acceso de administrador

Si adjuntas la AdministratorAccess política a la función de CodeBuild aprovisionamiento, se garantizará que ninguna plantilla de IaaC falle por falta de permisos. También significa que cualquier persona que pueda crear una plantilla de entorno o una plantilla de servicio puede realizar acciones a nivel de administrador, incluso si ese usuario no es administrador. AWS Proton no recomienda su uso AdministatorAccess con la función de aprovisionamiento CodeBuild . Si decide utilizarla AdministratorAccess con la función de CodeBuild aprovisionamiento, hágalo en un entorno aislado.

Puedes crear un rol AdministratorAccess en la IAM consola o ejecutando este comando:

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
Creación de un rol con un alcance mínimo

Si desea crear un rol con permisos mínimos, hay disponibles varios enfoques:

  • Implemente el rol con permisos de administrador y, a continuación, limite los permisos del rol. Se recomienda utilizar IAMAccess Analyzer.

  • Utilice políticas administradas para dar acceso a los servicios que planee utilizar.

AWS CDK

Si lo utilizas AWS CDK con AWS Proton y lo has ejecutado cdk bootstrap en cada cuenta o región del entorno, entonces ya existe un rol para él. cdk deploy En este caso, asocie la siguiente política a la función de CodeBuild aprovisionamiento:

{ "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" }
Personalizado VPC

Si decides ejecutar CodeBuild una CodeBuild función personalizada VPC, necesitarás los siguientes permisos:

{ "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" } } }

También puede utilizar la política administrada AmazonEC2FullAccess, aunque incluye permisos que quizás no necesite. Para adjuntar la política gestionada medianteCLI:

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