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

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

高级设置

如果您首次按照通过控制台开始使用中的步骤操作来访问 Amazon CodeBuild,则很可能不需要本主题中的信息。但是,当你继续使用CodeBuild,您可能想要执行诸如向组织中的 IAM 组和用户授予访问权限之类的事情CodeBuild,修改 IAM 中的现有服务角色或Amazon KMS keys访问以查看CodeBuild,或者设置Amazon CLI跨组织的工作站进行访问CodeBuild. 本主题将介绍如何完成相关的设置步骤。

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

AddCodeBuildIAM 组或 IAM 用户的访问权限

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

如果你能访问CodeBuild和你的Amazon根账户(不推荐)或您的管理员 IAM 用户Amazon账户,则您无需遵循这些说明。

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

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

  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 CodeBuild要访问 IAM 组或 IAM 用户,请向前跳到此过程的第 4 步。

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

    • 要添加对的完全访问权限CodeBuild中,选择名为的框AWSCodeBuildAdminAccess,选择策略操作,然后选择,Attach. 选中目标 IAM 组或 IAM 用户旁的框,然后选择附加策略. 对名为的策略重复此过程亚马逊 S3ReadOnly访问IAMFullAccess.

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

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

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

  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": "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:* 的值。有关更多信息,请参阅 身份和访问管理。要限制对特定 Amazon 资源的访问权限,请更改 Resource 对象的值。有关更多信息,请参阅 身份和访问管理

    这些区域有:CodeBuildRolePolicy语句才能允许创建或修改构建项目。

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

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

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

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

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

    对于用户,请在添加权限页面,选择,直接附加现有策略. SelectCodeBuildAccessPolicy,选择后续:审核,然后选择,添加权限.

添加CodeBuildIAM 组或 IAM 用户的访问权限 (Amazon CLI)

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

  2. 添加自定义集合Amazon CodeBuild要访问 IAM 组或 IAM 用户,请跳到此过程的第 3 步。

    添加默认集合CodeBuild要访问 IAM 组或 IAM 用户,请执行以下操作:

    运行以下任一命令,具体取决于您是否要为 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使用 IAM 组名称或 IAM 用户名,然后替换策略收入对以下每项策略执行一次 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

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

  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:* 的值。有关更多信息,请参阅 身份和访问管理。要限制对特定 Amazon 资源的访问权限,请更改相关 Resource 对象的值。有关更多信息,请参阅身份和访问管理或特定 Amazon 服务的安全文档。

    这些区域有:CodeBuildRolePolicy语句才能允许创建或修改构建项目。

  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使用目标 IAM 组或 IAM 用户的名称。

创建 CodeBuild 服务角色

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

如果您不打算使用这些控制台,本部分介绍了如何创建CodeBuild使用 IAM 控制台或Amazon CLI.

重要

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

此页上描述的服务角色包含一项策略,可授予使用 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. 在导航窗格中,选择角色

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

  9. 在存储库的创建角色页面,带Amazon服务已选中,选择CodeBuild,然后选择,Next: 权限.

  10. 在存储库的附加权限策略页面上,选择,CodeBuildServiceRole策略,然后选择,后续:审核

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

创建 CodeBuild 服务角色 (Amazon CLI)

  1. 确保您已配置Amazon CLI使用Amazon访问密钥和Amazon如前面的过程所述,与 IAM 实体之一对应的秘密访问密钥。有关更多信息,请参阅 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

创建并配置客户托管密钥CodeBuild

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

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

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

要配置客户托管密钥以供使用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", ... } ] }
  • 区域 ID表示的 IDAmazon与之相关的 Amazon S3 存储桶的区域CodeBuild位于(例如,us-east-1)。

  • 账户 ID表示的 IDAmazon拥有客户托管密钥的账户。

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

注意

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

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

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

  • 您的中的 IAM 用户Amazon账户,具有创建或修改客户托管密钥的权限。有关更多信息,请参阅 Amazon KMS 开发人员指南中的使用 Amazon KMS 控制台所需的权限

安装和配置 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