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

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

高级设置

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

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

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

访问Amazon CodeBuild对于 IAM 组或 IAM 用户,您必须添加访问权限。本部分介绍了如何通过 IAM 控制台或Amazon CLI。

如果您 CodeBuild 用Amazon根账户(不推荐)或管理员 IAM 用户Amazon帐户,则无需按照以下说明操作。

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

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

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. 选择创建策略

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

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

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

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

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

  11. 对于组,请在附加策略页面上,选择代码构建可访问性,然后选择附加策略

    对于用户,在 Add permisions 页面上,选择 Attach existing policies directly。Select代码构建可访问性中,选择后续:瑞威,然后选择添加权限

要将 CodeBuild 访问权限添加到 IAM 组或 IAM 用户 (Amazon CLI)

  1. 确保您已配置Amazon CLI使用Amazon访问密钥和Amazon秘密访问密钥,如前面的过程所述。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的开始设置 Amazon Command Line Interface

  2. 要添加自定义集合Amazon CodeBuildIAM 组或 IAM 用户的访问权限,请跳到此过程的第 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

    您必须运行命令三次,替换组名称或者user name name替换为 IAM 组名称或 IAM 用户名,然后将策略 ARN对于以下策略中的每个策略,Amazon 资源名称 (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. 在安装 Amazon 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 操作以及潜在的大量Amazon资源的费用。要限制对特定 CodeBuild 操作的访问权限,请将codebuild:*在 CodeBuild 策略声明中。有关更多信息,请参阅 Identity and Access Management。要限制对特定 Amazon 资源的访问权限,请更改相关 Resource 对象的值。有关更多信息,请参阅Identity and Access Management或特定 Amazon 服务的安全文档。

  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

    在上述命令中,替换组名称或者user name name替换为目标 IAM 组或 IAM 用户的名称。

创建 CodeBuild 服务角色

您需要一个Amazon CodeBuild服务角色,以便 CodeBuild 可以与依赖Amazon代表您服务。您可以通 CodeBuild 使用 CodeBuild 或Amazon CodePipeline控制台。有关信息,请参阅:

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

注意

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

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

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

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

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

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

  3. 选择创建策略

  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": "*" } ] }
    注意

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

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

    注意

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

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

  8. 选择 Create role (创建角色)

  9. Create role (创建角色) 页面上,在已选择 Amazon Service (Amazon 服务) 的情况下,选择 CodeBuild,然后选择 Next:Permissions

  10. 在存储库的附加权限策略页面上,选择代码构建服务策略,然后选择后续:审核

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

要创建 CodeBuild 服务角色 (Amazon CLI)

  1. 确保您已配置Amazon CLI使用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" } ] }

    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

创建和配置Amazon KMSCodeBuild CMK

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

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

有关 CMK 的信息,请参阅 Amazon Key Management Service 开发人员指南中的 https://docs.amazonaws.cn/kms/latest/developerguide/create-keys.html 概念和Amazon KMS创建密钥

要配置由 CodeBuild 使用的 CMK,请遵循中的说明:如何修改密钥策略” 部分修改密钥策略中的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", ... } ] }
  • 区域编号表示Amazon区域,与 CodeBuild 关联的 Amazon S3 存储桶所在的区域(例如,us-east-1)。

  • account-ID 表示拥有 CMK 的 Amazon 账户的 ID。

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

注意

要通过 IAM 控制台创建或配置 CMK,您必须先登录Amazon Web Services Management Console通过使用以下值之一:

安装和配置 Amazon CLI

访问Amazon CodeBuild中,您可以使用Amazon CLI与代码构建控制台、CodeBuild 控制台或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