高级设置 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

高级设置

如果您首次按照通过控制台开始使用中的步骤操作来访问 Amazon CodeBuild,则很可能不需要本主题中的信息。但是,随着您继续使用 CodeBuild,您可能需要执行这些操作:例如,为您组织内的 IAM 组和用户提供对 CodeBuild 的访问权限、修改 IAM 或 Amazon KMS keys 中的现有服务角色以访问 CodeBuild,或者跨您组织的工作站设置 Amazon CLI 以访问 CodeBuild。本主题将介绍如何完成相关的设置步骤。

我们假定您已经有一个 Amazon 账户。但是,如果您还没有账户,请转到 http://aws.amazon.com,选择 Sign In to the Console,然后按照在线说明进行操作。

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

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

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

有关 Amazon 根账户和管理员用户的信息,请参阅《用户指南》中的Amazon Web Services 账户 根用户创建您的第一个 Amazon Web Services 账户 根用户和组

为 IAM 组或用户添加 CodeBuild 访问权限(控制台)
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

    • Amazon 账户中的管理员用户。有关更多信息,请参阅《用户指南》中的创建您的第一个 Amazon Web Services 账户 根用户和组

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

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

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

  2. 在导航窗格中,选择策略

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

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

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

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

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

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

  4. 请选择创建策略

  5. 创建策略页面上的创建您自己的策略旁,选择选择

  6. 审查策略页面上,为策略名称输入策略的名称(例如,CodeBuildAccessPolicy)。如果您使用其他名称,请确保在本过程中始终使用它。

  7. 对于策略文档,输入以下内容,然后选择创建策略

    { "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 操作以及潜在的大量 Amazon 资源。要限制对特定 CodeBuild 操作的访问权限,请在 CodeBuild 策略声明中更改 codebuild:* 的值。有关更多信息,请参阅Identity and Access Management。要限制对特定 Amazon 资源的访问权限,请更改 Resource 对象的值。有关更多信息,请参阅Identity and Access Management

    必须使用 CodeBuildRolePolicy 语句才可以创建或修改构建项目。

  8. 在导航窗格中,选择用户

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

  10. 对于组,在组设置页面上的权限选项卡上,展开托管策略,然后选择附加策略

    对于用户,在用户设置页面上的权限选项卡上,选择添加权限

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

    对于用户,在添加权限页面上,选择直接附加现有策略。依次选择 CodeBuildAccessPolicy下一步:审核添加权限

为 IAM 组或用户添加 CodeBuild 访问权限 (Amazon CLI)
  1. 如前面的过程所述,确保您已为 Amazon CLI 配置了与某个 IAM 实体相对应的 Amazon 访问密钥和 Amazon 秘密访问密钥。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的开始设置 Amazon Command Line Interface

  2. 要为 IAM 组或 IAM 用户添加一组自定义的 Amazon CodeBuild 访问权限,请跳至本过程中的步骤 3。

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

    运行以下任一命令,具体取决于您是否要为 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 组名称或用户名,然后为下面每个策略 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 访问权限。跳过此过程中的其余步骤。

  3. 在安装 Amazon CLI 的本地工作站或实例上的空目录中,创建名为 put-group-policy.jsonput-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 操作以及潜在的大量 Amazon 资源。要限制对特定 CodeBuild 操作的访问权限,请在 CodeBuild 策略声明中更改 codebuild:* 的值。有关更多信息,请参阅Identity and Access Management。要限制对特定 Amazon 资源的访问权限,请更改相关 Resource 对象的值。有关更多信息,请参阅Identity and Access Management或特定 Amazon 服务的安全文档。

    必须使用 CodeBuildRolePolicy 语句才可以创建或修改构建项目。

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

    对于 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-nameuser-name 替换为目标 IAM 组或用户的名称。

创建 CodeBuild 服务角色

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

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

重要

CodeBuild 针对代表您执行的所有操作使用服务角色。如果该角色包含用户不应具有的权限,则您可能无意中提升了用户的权限。确保该角色授予最小权限

此页上描述的服务角色包含一项策略,可授予使用 CodeBuild 时所需的最低权限。您可能需要根据使用案例添加额外的权限。

创建 CodeBuild 服务角色(控制台)
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

    • Amazon 账户中的管理员用户。有关更多信息,请参阅《用户指南》中的创建您的第一个 Amazon Web Services 账户 根用户和组

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

      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 策略概述

  2. 在导航窗格中,选择策略

  3. 请选择创建策略

  4. 创建策略页面上,选择 JSON

  5. 对于 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": "*" } ] }
    注意

    此策略包含允许访问潜在的大量 Amazon 资源的语句。要限制 Amazon CodeBuild 访问特定的 Amazon 资源,请更改 Resource 数组的值。有关更多信息,请参阅有关 Amazon 服务的安全文档。

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

    注意

    如果您使用其他名称,请确保在本过程中始终使用它。

  7. 在导航窗格中,选择角色

  8. 选择创建角色

  9. 创建角色页面上,在已选择 Amazon 服务的情况下,选择 CodeBuild,然后选择下一步:权限

  10. 附加权限策略页面上,选择 CodeBuildServiceRolePolicy,然后选择下一步:审查

  11. 创建角色并审查页面上,对于角色名称,输入角色的名称(例如,CodeBuildServiceRole),然后选择创建角色

创建 CodeBuild 服务角色 (Amazon CLI)
  1. 如前面的过程所述,确保您已为 Amazon CLI 配置了与某个 IAM 实体相对应的 Amazon 访问密钥和 Amazon 秘密访问密钥。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的开始设置 Amazon Command Line Interface

  2. 在安装了 Amazon 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" } ] }
    注意

    建议您使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。例如,您可以使用以下条件块编辑上述信任策略:aws:SourceAccount 是 CodeBuild 项目的所有者,aws:SourceArn 是 CodeBuild 项目 ARN。

    如果您想将服务角色限制为一个 Amazon 账户,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": "*" } ] }
    注意

    此策略包含允许访问潜在的大量 Amazon 资源的语句。要限制 Amazon CodeBuild 访问特定的 Amazon 资源,请更改 Resource 数组的值。有关更多信息,请参阅有关 Amazon 服务的安全文档。

  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 的客户托管密钥

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

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

有关客户托管密钥的信息,请参阅《Amazon KMS 开发人员指南》中的 Amazon Key Management Service 概念创建密钥

要配置由 CodeBuild 使用的客户托管密钥,请遵循《Amazon 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 存储桶所在的 Amazon 区域的 ID(例如,us-east-1)。

  • account-ID 表示拥有客户托管密钥的 Amazon 账户的 ID。

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

注意

要通过 IAM 控制台创建或配置客户托管密钥,您必须先使用以下任一身份登录该 Amazon Web Services Management Console:

安装和配置 Amazon CLI

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

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

    aws codebuild list-builds

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

    { "ids": [] }

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

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