本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CodeBuild 配置角色创建
基础设施即代码 (IaaC) 工具(如 AWS CloudFormation 和 Terraform)需要对许多不同类型的资源的权限。 AWS 例如,如果 IaaC 模板声明一个 Amazon S3 存储桶,它需要具有创建、读取、更新和删除 Amazon S3 存储桶的权限。将角色限制为所需的最低权限被视为一种安全最佳实践。考虑到 AWS 资源的广度,为Iaac模板创建最低权限策略具有挑战性,尤其是当这些模板管理的资源以后可能会发生变化时。例如,在最近对由管理的模板进行编辑时 AWS Proton,您添加了RDS数据库资源。
配置正确的权限有助于顺利部署 IaC。 AWS Proton CodeBuild Provisioning 在客户账户中的 CodeBuild 项目中执行客户提供的任意CLI命令。通常,这些命令使用基础设施即代码 (IaaC) 工具(例如 AWS CDK)创建和删除基础设施。当部署模板使用 CodeBuild 预配的 AWS 资源时, AWS 将在由 AWS管理的 CodeBuild 项目中开始构建。角色被传递给 CodeBuild,该角色 CodeBuild 假设执行命令。此角色称为 CodeBuild 配置角色,由客户提供,包含配置基础架构所需的权限。它本来只能由假设 CodeBuild ,甚至 AWS Proton 无法假设。
创建角色
预 CodeBuild 配角色可以在IAM控制台中创建,也可以在中创建 AWS CLI。要在 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
它还会附加AWSProtonCodeBuildProvisioningBasicAccess
,其中包含 CodeBuild 服务运行构建所需的最低权限。
如果您更喜欢使用控制台,请在创建角色时确保满足以下条件:
-
对于可信实体,选择 AWS 服务,然后选择 CodeBuild。
-
在“添加权限”步骤中,选择
AWSProtonCodeBuildProvisioningBasicAccess
以及您希望附加的任何其他策略。
管理员访问权限
如果您将AdministratorAccess
策略附加到 CodeBuild 配置角色,它将保证任何 IaaC 模板都不会因为缺乏权限而失败。这也意味着任何能够创建环境模板或服务模板的人都可以执行管理员级别的操作,即使该用户不是管理员也是如此。 AWS Proton 不建议与 CodeBuild 配置角色AdministatorAccess
一起使用。如果您决定与 CodeBuild 置备角色AdministratorAccess
一起使用,请在沙盒环境中使用。
您可以在IAM控制台AdministratorAccess
中使用或通过执行以下命令来创建角色:
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
AWS CDK
如果您 AWS CDK 与一起使用 AWS Proton,并且已经cdk bootstrap
在每个环境账户/区域上运行过,则已经存在一个角色。cdk deploy
在这种情况下,请将以下策略附加到 CodeBuild 配置角色:
{ "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
如果您决定 CodeBuild 在自定义模式下运行VPC,则需要在 CodeBuild 角色中拥有以下权限:
{ "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" } } }
您也可以使用 AmazonEC2FullAccess
托管策略,但其中可能包含您不需要的权限。使用以下方法附加托管策略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