允许 CodeBuild 与其他 AWS 服务进行交互
如果您首次按照通过控制台开始使用中的步骤操作来访问 AWS CodeBuild,则很可能不需要本主题中的信息。但随着您继续使用 CodeBuild,您可能想要执行一些操作,例如允许 CodeBuild 与其他 AWS 服务进行交互。
要让 CodeBuild 能够代表您与相关 AWS 服务进行交互,您需要具有 AWS CodeBuild 服务角色。您可以使用 CodeBuild 或 AWS CodePipeline 控制台创建一个 CodeBuild 服务角色。有关信息,请参阅:
如果您不打算使用这些控制台,本节介绍了如何使用 IAM 控制台或 AWS CLI 创建 CodeBuild 服务角色。
重要
CodeBuild 针对代表您执行的所有操作使用服务角色。如果该角色包含用户不应具有的权限,则您可能无意中提升了用户的权限。确保该角色授予最小权限。
此页上描述的服务角色包含一项策略,可授予使用 CodeBuild 时所需的最低权限。您可能需要根据使用案例添加额外的权限。
创建 CodeBuild 服务角色(控制台)
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 您应该已使用以下任一身份登录到控制台:
-
您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅《用户指南》中的 AWS 账户 根用户。
-
AWS 账户中的管理员用户。有关更多信息,请参阅《用户指南》中的创建您的第一个 AWS 账户 根用户和组。
-
AWS 账户中的用户,具有执行以下最基本操作的权限:
iam:AddRoleToInstanceProfile iam:AttachRolePolicy iam:CreateInstanceProfile iam:CreatePolicy iam:CreateRole iam:GetRole iam:ListAttachedRolePolicies iam:ListPolicies iam:ListRoles iam:PassRole iam:PutRolePolicy iam:UpdateAssumeRolePolicy
有关更多信息,请参阅《用户指南》中的 IAM 策略概述。
-
-
在导航窗格中,选择策略。
-
选择创建策略。
-
在创建策略页面上,选择 JSON。
-
对于 JSON 策略,输入以下内容,然后选择查看策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "ECRPullPolicy", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }, { "Sid": "ECRAuthPolicy", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
注意
此策略包含允许访问潜在的大量 AWS 资源的语句。要限制 AWS CodeBuild 访问特定的 AWS 资源,请更改
Resource
数组的值。有关更多信息,请参阅有关 AWS 服务的安全文档。 -
在查看策略页面上,对于策略名称,为策略输入一个名称(例如,
CodeBuildServiceRolePolicy
),然后选择创建策略。注意
如果您使用其他名称,请确保在本过程中始终使用它。
-
在导航窗格中,选择角色。
-
选择创建角色。
-
在创建角色页面上,在已选择 AWS 服务的情况下,选择 CodeBuild,然后选择下一步:权限。
-
在附加权限策略页面上,选择 CodeBuildServiceRolePolicy,然后选择下一步:审查。
-
在创建角色并审查页面上,对于角色名称,输入角色的名称(例如,
CodeBuildServiceRole
),然后选择创建角色。
创建 CodeBuild 服务角色 (AWS CLI)
-
如前面的过程所述,确保您已为 AWS CLI 配置了与某个 IAM 实体相对应的 AWS 访问密钥和 AWS 秘密访问密钥。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的开始设置 AWS Command Line Interface。
-
在安装了 AWS CLI 的本地工作站或实例的空目录中,创建分别名为
create-role.json
和put-role-policy.json
的两个文件。如果您选择了其他文件名称,请确保在整个过程中使用它们。create-role.json
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注意
建议您使用
aws:SourceAccount
和aws:SourceArn
条件键来防止出现混淆代理人问题。例如,您可以使用以下条件块编辑上述信任策略:aws:SourceAccount
是 CodeBuild 项目的所有者,aws:SourceArn
是 CodeBuild 项目 ARN。如果您想将服务角色限制为一个 AWS 账户,
create-role.json
可能如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": [ "
account-ID
" ] } } } ] }如果您想将服务角色限制为特定 CodeBuild 项目,
create-role.json
可能如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:codebuild:
region-ID
:account-ID
:project/project-name
" } } } ] }注意
如果您不知道或尚未决定您的 CodeBuild 项目的名称,并且想要对特定 ARN 模式设置信任策略限制,则可以使用通配符 (*) 替换 ARN 的该部分。创建项目后,您可以更新信任策略。
put-role-policy.json
:{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
注意
此策略包含允许访问潜在的大量 AWS 资源的语句。要限制 AWS CodeBuild 访问特定的 AWS 资源,请更改
Resource
数组的值。有关更多信息,请参阅有关 AWS 服务的安全文档。 -
切换到您保存上述文件的目录,然后按照这个顺序运行以下两个命令,一次运行一个。您可以为
CodeBuildServiceRole
和CodeBuildServiceRolePolicy
使用不同的值,但请务必在此处使用它们。aws iam create-role --role-name CodeBuildServiceRole --assume-role-policy-document file://create-role.json
aws iam put-role-policy --role-name CodeBuildServiceRole --policy-name CodeBuildServiceRolePolicy --policy-document file://put-role-policy.json