本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
高级设置
如果您首次按照通过控制台开始使用中的步骤操作来访问 AWS CodeBuild,则很可能不需要本主题中的信息。但是,随着您继续使用 CodeBuild,您可能需要执行这些操作:例如,为您组织内的 IAM 组和用户提供对 CodeBuild 的访问权限、修改 IAM 或 AWS KMS keys 中的现有服务角色以访问 CodeBuild,或者跨您组织的工作站设置 AWS CLI 以访问 CodeBuild。本主题将介绍如何完成相关的设置步骤。
我们假定您已经有一个 AWS 账户。但是,如果您还没有账户,请转到 http://aws.amazon.com
向 IAM 组或用户添加 CodeBuild 访问权限
要以 IAM 组或用户身份访问 AWS CodeBuild,您必须添加访问权限。本节介绍了如何使用 IAM 控制台或 AWS CLI 完成此操作。
如果以 AWS 根账户(不推荐)或 AWS 账户中的管理员用户身份访问 CodeBuild,则无需遵循这些说明。
有关 AWS 根账户和管理员用户的信息,请参阅《用户指南》中的AWS 账户 根用户和创建您的第一个 AWS 账户 根用户和组。
为 IAM 组或用户添加 CodeBuild 访问权限(控制台)
-
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 您应该已使用以下任一身份登录到 AWS Management Console:
-
您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅《用户指南》中的 AWS 账户 根用户。
-
AWS 账户中的管理员用户。有关更多信息,请参阅《用户指南》中的创建您的第一个 AWS 账户 根用户和组。
-
AWS 账户中的用户,具有执行以下最基本操作的权限:
iam:AttachGroupPolicy iam:AttachUserPolicy iam:CreatePolicy iam:ListAttachedGroupPolicies iam:ListAttachedUserPolicies iam:ListGroups iam:ListPolicies iam:ListUsers
有关更多信息,请参阅《用户指南》中的 IAM 策略概述。
-
-
在导航窗格中,选择策略。
-
要为 IAM 组或 IAM 用户添加一组自定义的 AWS CodeBuild 访问权限,请向前跳到此过程的第 4 步。
要向 IAM 组或 IAM 用户添加一组默认的 CodeBuild 访问权限,请依次选择策略类型、AWS 托管,然后执行以下操作:
-
要添加 CodeBuild 的完全访问权限,请选中名为 AWSCodeBuildAdminAccess 的框,选择策略操作,然后选择附加。选中目标 IAM 组或用户旁的框,然后选择附加策略。对名为 AmazonS3ReadOnlyAccess 和 IAMFullAccess 的策略重复执行此操作。
-
要为除构建项目管理之外的所有内容添加对 CodeBuild 的访问权限,请选中名为 AWSCodeBuildDeveloperAccess 的框,然后依次选择策略操作和附加。选中目标 IAM 组或用户旁的框,然后选择附加策略。对名为 AmazonS3ReadOnlyAccess 的策略重复执行此操作。
-
要添加对 CodeBuild 的只读访问权限,请选中名为 AWSCodeBuildReadOnlyAccess 的框。选中目标 IAM 组或用户旁的框,然后选择附加策略。对名为 AmazonS3ReadOnlyAccess 的策略重复执行此操作。
现在,您已经为 IAM 组或用户添加了一组默认的 CodeBuild 访问权限。跳过此过程中的其余步骤。
-
-
请选择创建策略。
-
在创建策略页面上的创建您自己的策略旁,选择选择。
-
在审查策略页面上,为策略名称输入策略的名称(例如,
CodeBuildAccessPolicy
)。如果您使用其他名称,请确保在本过程中始终使用它。 -
对于策略文档,输入以下内容,然后选择创建策略。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::
account-ID
:role/role-name
" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }注意
此策略允许访问所有 CodeBuild 操作以及潜在的大量 AWS 资源。要限制对特定 CodeBuild 操作的访问权限,请在 CodeBuild 策略声明中更改
codebuild:*
的值。有关更多信息,请参阅Identity and Access Management。要限制对特定 AWS 资源的访问权限,请更改Resource
对象的值。有关更多信息,请参阅Identity and Access Management。必须使用
CodeBuildRolePolicy
语句才可以创建或修改构建项目。 -
在导航窗格中,选择组或用户。
-
在组或用户列表中,选择要向其添加 CodeBuild 访问权限的 IAM 组或 IAM 用户的名称。
-
对于组,在组设置页面上的权限选项卡上,展开托管策略,然后选择附加策略。
对于用户,在用户设置页面上的权限选项卡上,选择添加权限。
-
对于组,在附加策略页面上,选择 CodeBuildAccessPolicy,然后选择附加策略。
对于用户,在添加权限页面上,选择直接附加现有策略。依次选择 CodeBuildAccessPolicy、下一步:审核和添加权限。
为 IAM 组或用户添加 CodeBuild 访问权限 (AWS CLI)
-
如前面的过程所述,确保您已为 AWS CLI 配置了与某个 IAM 实体相对应的 AWS 访问密钥和 AWS 秘密访问密钥。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的开始设置 AWS Command Line Interface。
-
要为 IAM 组或 IAM 用户添加一组自定义的 AWS CodeBuild 访问权限,请跳至本过程中的步骤 3。
要为 IAM 组或 IAM 用户添加一组默认的 CodeBuild 访问权限,请执行以下操作:
运行以下任一命令,具体取决于您是否要为 IAM 组或用户添加权限:
aws iam attach-group-policy --group-name
group-name
--policy-arnpolicy-arn
aws iam attach-user-policy --user-nameuser-name
--policy-arnpolicy-arn
您必须运行该命令三次,将
group-name
或user-name
替换为 IAM 组名称或用户名,然后为下面每个策略 Amazon 资源名称 (ARN) 替换policy-arn
一次:-
要添加对 CodeBuild 的完全访问权限,请使用以下策略 ARN:
-
arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess
-
arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
-
arn:aws:iam::aws:policy/IAMFullAccess
-
-
要添加除构建项目管理以外的所有 CodeBuild 访问权限,请使用以下策略 ARN:
-
arn:aws:iam::aws:policy/AWSCodeBuildDeveloperAccess
-
arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
-
-
要添加对 CodeBuild 的只读访问权限,请使用以下策略 ARN:
-
arn:aws:iam::aws:policy/AWSCodeBuildReadOnlyAccess
-
arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
-
现在,您已经为 IAM 组或用户添加了一组默认的 CodeBuild 访问权限。跳过此过程中的其余步骤。
-
-
在安装 AWS CLI 的本地工作站或实例上的空目录中,创建名为
put-group-policy.json
或put-user-policy.json
的文件。如果您使用其他文件名,请确保在本过程中始终使用它。{ "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::
account-ID
:role/role-name
" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }注意
此策略允许访问所有 CodeBuild 操作以及潜在的大量 AWS 资源。要限制对特定 CodeBuild 操作的访问权限,请在 CodeBuild 策略声明中更改
codebuild:*
的值。有关更多信息,请参阅Identity and Access Management。要限制对特定 AWS 资源的访问权限,请更改相关Resource
对象的值。有关更多信息,请参阅Identity and Access Management或特定 AWS 服务的安全文档。必须使用
CodeBuildRolePolicy
语句才可以创建或修改构建项目。 -
切换到您保存该文件的目录,然后运行以下任一命令。您可以为
CodeBuildGroupAccessPolicy
和CodeBuildUserAccessPolicy
使用不同的值。如果您使用其他值,请确保在此处使用它们。对于 IAM 组:
aws iam put-group-policy --group-name
group-name
--policy-name CodeBuildGroupAccessPolicy --policy-document file://put-group-policy.json对于用户:
aws iam put-user-policy --user-name
user-name
--policy-name CodeBuildUserAccessPolicy --policy-document file://put-user-policy.json在前面的命令中,将
group-name
或user-name
替换为目标 IAM 组或用户的名称。
创建 CodeBuild 服务角色
您需要一个 AWS CodeBuild 服务角色,以便 CodeBuild 能代表您与相关 AWS 服务进行交互。您可以使用 CodeBuild 或 AWS CodePipeline 控制台创建一个 CodeBuild 服务角色。有关信息,请参阅:
如果您不打算使用这些控制台,本节介绍了如何使用 IAM 控制台或 AWS CLI 创建 CodeBuild 服务角色。
重要
CodeBuild 针对代表您执行的所有操作使用服务角色。如果该角色包含用户不应具有的权限,则您可能无意中提升了用户的权限。确保该角色授予最小权限。
此页上描述的服务角色包含一项策略,可授予使用 CodeBuild 时所需的最低权限。您可能需要根据使用案例添加额外的权限。
创建 CodeBuild 服务角色(控制台)
-
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/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
创建和配置适用于 CodeBuild 的客户托管密钥
要使 AWS CodeBuild 加密其构建输出构件,需要具备对 KMS 密钥的访问权限。默认情况下,CodeBuild 在您的 AWS 账户中使用适用于 Amazon S3 的 AWS 托管式密钥。
如果您不想使用 AWS 托管式密钥,则必须自行创建并配置一个客户托管密钥。本部分介绍了如何通过 IAM 控制台执行此操作。
有关客户托管密钥的信息,请参阅《AWS KMS 开发人员指南》中的 AWS Key Management Service 概念和创建密钥。
要配置由 CodeBuild 使用的客户托管密钥,请遵循《AWS KMS 开发人员指南》中修改密钥策略的“如何修改密钥策略”部分中的说明。然后将以下语句(在 ### BEGIN ADDING STATEMENTS HERE ###
和 ### END ADDING STATEMENTS HERE ###
之间)添加到密钥策略中。为了简洁起见,也为了帮您查找添加语句的位置,此处使用了省略号 (...
)。请勿删除任何语句,也不要将这些省略号键入密钥策略中。
{ "Version": "2012-10-17", "Id": "...", "Statement": [
### BEGIN ADDING STATEMENTS HERE ###
{ "Sid": "Allow access through Amazon S3 for all principals in the account that are authorized to use Amazon S3", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "s3.region-ID
.amazonaws.com", "kms:CallerAccount": "account-ID
" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-ID
:role/CodeBuild-service-role
" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" },### END ADDING STATEMENTS HERE ###
{ "Sid": "Enable IAM User Permissions", ... }, { "Sid": "Allow access for Key Administrators", ... }, { "Sid": "Allow use of the key", ... }, { "Sid": "Allow attachment of persistent resources", ... } ] }
-
region-ID
表示与 CodeBuild 关联的 Amazon S3 存储桶所在的 AWS 区域的 ID(例如,us-east-1
)。 -
account-ID
表示拥有客户托管密钥的 AWS 账户的 ID。 -
CodeBuild-service-role
表示您之前在此主题中创建或标识的 CodeBuild 服务角色的名称。
注意
要通过 IAM 控制台创建或配置客户托管密钥,您必须先使用以下任一身份登录该 AWS Management Console:
-
您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅《用户指南》中的账户根用户。
-
AWS 账户中的管理员用户。有关更多信息,请参阅《用户指南》中的创建您的第一个 AWS 账户 根用户和组。
-
AWS 账户中具有创建或修改客户托管密钥权限的用户。有关更多信息,请参阅《AWS KMS 开发人员指南》中的使用 AWS KMS 控制台所需的权限。
安装和配置 AWS CLI
要访问 AWS CodeBuild,您可以将 AWS CLI 与 CodeBuild 控制台、CodePipeline 控制台或 AWS 开发工具包结合使用,或者改为仅使用前者。要安装和配置 AWS CLI,请参阅《AWS Command Line Interface 用户指南》中的开始设置 AWS Command Line Interface。
-
运行以下命令以确认您安装的 AWS CLI 是否支持 CodeBuild:
aws codebuild list-builds
如果成功,将在输出中显示与以下内容类似的信息:
{ "ids": [] }
空方括号表示您尚未运行任何构建。
-
如果输出一个错误,您必须卸载当前版本的 AWS CLI,然后安装最新版本。有关更多信息,请参阅《AWS CLI 用户指南》中的卸载 AWS Command Line Interface 和安装 AWS Command Line Interface。