AWS CodeBuild
用户指南 (API 版本 2016-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

高级设置

如果您第一次按照入门中的步骤访问 AWS CodeBuild,那么您很可能不需要参考本主题中的信息。但是,随着您继续使用 CodeBuild,您会需要执行这些操作:例如,为您所在组织内的 IAM 组和用户提供对 CodeBuild 的访问权限、修改 IAM 中的现有服务角色或 AWS KMS 中的客户主密钥以访问 CodeBuild,或者跨您所在组织的工作站设置 AWS CLI 以访问 CodeBuild。本主题将介绍如何完成相关的设置步骤。

我们假定您已经有一个 AWS 账户。但是,如果您还没有账户,请转到 http://www.amazonaws.cn,选择 Sign In to the Console (登录到控制台),然后按照在线说明进行操作。

为 IAM 组或 IAM 用户添加 CodeBuild 访问权限

要以 IAM 组或 IAM 用户身份访问 AWS CodeBuild,您必须添加访问权限。本节介绍了如何使用 IAM 控制台或 AWS CLI 完成此操作。

如果以 AWS 根账户(不推荐)或 AWS 账户中的管理员 IAM 用户身份访问 CodeBuild,则无需遵循这些说明。

有关 AWS 根账户和管理员 IAM 用户的信息,请参阅 IAM 用户指南 中的账户根用户创建您的第一个 IAM 管理员用户和组

为 IAM 组或 IAM 用户添加 CodeBuild 访问权限(控制台)

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

    您应该已使用以下任一身份登录到 AWS Management Console:

    • 您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅 IAM 用户指南中的账户根用户

    • AWS 账户中的 IAM 管理员用户。有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

    • AWS 账户中的 IAM 用户,具有执行以下最基本操作的权限:

      iam:AttachGroupPolicy iam:AttachUserPolicy iam:CreatePolicy iam:ListAttachedGroupPolicies iam:ListAttachedUserPolicies iam:ListGroups iam:ListPolicies iam:ListUsers

      有关更多信息,请参阅 IAM 用户指南 中的 IAM 策略概述

  2. 在导航窗格中,选择 Policies

  3. 要为 IAM 组或 IAM 用户添加一组自定义的 AWS CodeBuild 访问权限,请向前跳到此过程的第 4 步。

    要向 IAM 组或 IAM 用户添加一组默认的 CodeBuild 访问权限,请依次选择 Policy Type (策略类型)AWS Managed (AWS 托管),然后执行以下操作:

    • 要添加对 CodeBuild 的完全访问权限,请选中名为 AWSCodeBuildAdminAccess 的框。然后,选择 Policy ActionsAttach。选中目标 IAM 组或 IAM 用户旁的框,然后选择 Attach Policy (附加策略)。对名为 AmazonS3ReadOnlyAccessIAMFullAccess 的策略重复执行此操作。

    • 要为除构建项目管理之外的所有内容添加对 CodeBuild 的访问权限,请选中名为 AWSCodeBuildDeveloperAccess 的框。然后,选择 Policy ActionsAttach。选中目标 IAM 组或 IAM 用户旁的框,然后选择 Attach Policy (附加策略)。对名为 AmazonS3ReadOnlyAccess 的策略重复执行此操作。

    • 要添加对 CodeBuild 的只读访问权限,请选中名为 AWSCodeBuildReadOnlyAccess 的框。选中目标 IAM 组或 IAM 用户旁的框,然后选择 Attach Policy (附加策略)。对名为 AmazonS3ReadOnlyAccess 的策略重复执行此操作。

    现在,您已经为 IAM 组或 IAM 用户添加了一组默认的 CodeBuild 访问权限。跳过此过程中的其余步骤。

  4. 选择 Create Policy

  5. Create Policy 页面上的 Create Your Own Policy 旁,选择 Select

  6. Review Policy (审查策略) 页面上,为 Policy Name (策略名称) 键入策略的名称(例如,CodeBuildAccessPolicy)。如果您使用了其他名称,请在整个过程中使用此名称进行替换。

  7. 对于 Policy Document,键入以下内容,然后选择 Create Policy

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildDefaultPolicy", "Effect": "Allow", "Action": [ "codebuild:*", "iam:PassRole" ], "Resource": "*" }, { "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

  8. 在导航窗格中,选择 GroupsUsers

  9. 在组或用户列表中,选择要向其添加 CodeBuild 访问权限的 IAM 组或 IAM 用户的名称。

  10. 对于组,在组设置页面上的 Permissions 选项卡上,展开 Managed Policies,然后选择 Attach Policy

    对于用户,在用户设置页面上的 Permissions 选项卡上,选择 Add permissions

  11. 对于组,在 Attach Policy (附加策略) 页面上,选择 CodeBuildAccessPolicy,然后选择 Attach Policy (附加策略)

    对于用户,在 Add permisions 页面上,选择 Attach existing policies directly。依次选择 CodeBuildAccessPolicyNext: Reivew (下一步: 审查)Add permissions (添加权限)

为 IAM 组或 IAM 用户 (AWS CLI) 添加 CodeBuild 访问权限

  1. 如前面的过程所述,确保您已为 AWS CLI 配置了与某个 IAM 实体相对应的 AWS 访问密钥和 AWS 秘密访问密钥。有关更多信息,请参阅 AWS Command Line Interface 开发人员指南 中的开始设置 AWS Command Line Interface

  2. 要为 IAM 组或 IAM 用户添加一组自定义的 AWS CodeBuild 访问权限,请向前跳到此过程的第 3 步。

    要为 IAM 组或 IAM 用户添加一组默认的 CodeBuild 访问权限,请执行以下操作:

    运行以下任一命令,具体取决于您是否要为 IAM 组或 IAM 用户添加权限:

    aws iam attach-group-policy --group-name group-name --policy-arn policy-arn aws iam attach-user-policy --user-name user-name --policy-arn policy-arn

    您必须运行该命令三次,将 group-nameuser-name 替换为 IAM 组名称或 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 组或 IAM 用户添加了一组默认的 CodeBuild 访问权限。跳过此过程中的其余步骤。

  3. 在安装 AWS CLI 的本地工作站或实例上的空目录中,创建名为 put-group-policy.jsonput-user-policy.json 的文件。如果您使用了其他文件名称,请在整个过程中使用此名称进行替换。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*", "iam:PassRole" ], "Resource": "*" }, { "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 服务的安全文档。

  4. 切换到您保存该文件的目录,然后运行以下任一命令。您可以为 CodeBuildGroupAccessPolicyCodeBuildUserAccessPolicy 使用不同的值。如果您使用了不同的值,请在此处使用这些值进行替换。

    对于 IAM 组:

    aws iam put-group-policy --group-name group-name --policy-name CodeBuildGroupAccessPolicy --policy-document file://put-group-policy.json

    对于 IAM 用户:

    aws iam put-user-policy --user-name user-name --policy-name CodeBuildUserAccessPolicy --policy-document file://put-user-policy.json

    在前面的命令中,将 group-nameuser-name 替换为目标 IAM 组或 IAM 用户的名称。

创建 CodeBuild 服务角色

您需要一个 AWS CodeBuild 服务角色,以便 CodeBuild 能代表您与相关 AWS 服务进行交互。您可以使用 CodeBuild 或 AWS CodePipeline 控制台创建一个 CodeBuild 服务角色。有关信息,请参阅:

如果您不打算使用这些控制台,本节介绍了如何使用 IAM 控制台或 AWS CLI 创建 CodeBuild 服务角色。

注意

此页上描述的服务角色包含一项策略,可授予使用 CodeBuild 时所需的最低权限。您可能需要根据使用案例添加额外的权限。例如,如果您希望将 CodeBuild 与 Amazon Virtual Private Cloud 配合使用,则您创建的服务角色需要以下策略中的权限:创建 CodeBuild 服务角色。

创建 CodeBuild 服务角色(控制台)

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

    您应该已使用以下任一身份登录到控制台:

    • 您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅 IAM 用户指南中的账户根用户

    • AWS 账户中的 IAM 管理员用户。有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

    • AWS 账户中的 IAM 用户,具有执行以下最基本操作的权限:

      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 用户指南 中的 IAM 策略概述

  2. 在导航窗格中,选择 Policies

  3. 选择 Create Policy

  4. Create Policy 页面上,选择 JSON

  5. 对于 JSON 策略,键入以下内容,然后选择 Review Policy

    { "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 服务的安全文档。

  6. Review Policy (查看策略) 页面上,对于 Policy Name (策略名称),为策略键入一个名称(例如,CodeBuildServiceRolePolicy),然后选择 Create policy (创建策略)

    注意

    如果您使用了其他名称,请在整个过程中使用此名称进行替换。

  7. 在导航窗格中,选择 Roles

  8. 选择创建角色

  9. Create role (创建角色) 页面上,在已选择 AWS Service (AWS 服务) 的情况下,选择 CodeBuild(因为该服务将使用此角色),然后选择 Next:Permissions

  10. Attach permissions policies 页面上,选择 CodeBuildServiceRolePolicy,然后选择 Next: Review (下一步: 审查)

  11. Create role and review (创建角色并审查) 页面上,对于 Role name (角色名称),键入角色的名称(例如,CodeBuildServiceRole),然后选择 Create role (创建角色)

创建 CodeBuild 服务角色 (AWS CLI)

  1. 如前面的过程所述,确保您已为 AWS CLI 配置了与某个 IAM 实体相对应的 AWS 访问密钥和 AWS 秘密访问密钥。有关更多信息,请参阅 AWS Command Line Interface 开发人员指南 中的开始设置 AWS Command Line Interface

  2. 在安装了 AWS CLI 的本地工作站或实例的空目录中,创建分别名为 create-role.jsonput-role-policy.json 的两个文件。如果您选择了其他文件名称,请在整个过程中使用此名称进行替换。

    create-role.json

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    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 服务的安全文档。

  3. 切换到您保存上述文件的目录,然后按照这个顺序运行以下两个命令,一次运行一个。您可以为 CodeBuildServiceRoleCodeBuildServiceRolePolicy 使用不同的值,但请务必在此处替换它们。

    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 KMS CMK

要使 AWS CodeBuild 加密其构建输出构件,需要具备对 AWS KMS 客户主密钥 (CMK) 的访问权限。默认情况下,CodeBuild 使用您 AWS 账户中适用于 Amazon S3 的 AWS 托管的 CMK。

如果您不想使用此 CMK,则必须自行创建并配置一个客户托管的 CMK。本部分介绍了如何通过 IAM 控制台执行此操作。

有关 CMK 的信息,请参阅 AWS KMS 开发人员指南 中的 AWS Key Management Service 概念创建密钥

要配置由 CodeBuild 使用的 CMK,请遵循 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 表示拥有 CMK 的 AWS 账户的 ID。

  • CodeBuild-service-role 表示您之前在此主题中创建或标识的 CodeBuild 服务角色的名称。

注意

要通过 IAM 控制台创建或配置 CMK,您必须先使用以下任一身份登录该 AWS Management Console:

安装和配置 AWS CLI

要访问 AWS CodeBuild,您可以将 AWS CLI 与 CodeBuild 控制台、CodePipeline 控制台或 AWS 开发工具包结合使用,或者改为仅使用前者。要安装和配置 AWS CLI,请参阅 AWS Command Line Interface 用户指南 中的开始设置 AWS Command Line Interface

  1. 运行以下命令以确认您安装的 AWS CLI 是否支持 CodeBuild:

    aws codebuild list-builds

    如果成功,将在输出中显示与以下内容类似的信息:

    { "ids": [] }

    空方括号表示您尚未运行任何构建。

  2. 如果输出一个错误,您必须卸载当前版本的 AWS CLI,然后安装最新版本。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的卸载 AWS CLI安装 AWS Command Line Interface