CodeBuild 允许与其他 Amazon 服务进行交互 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

CodeBuild 允许与其他 Amazon 服务进行交互

如果您是第一次按照中的步骤通过控制台开始使用 Amazon CodeBuild 进行访问,则很可能不需要本主题中的信息。但是,当你继续使用时 CodeBuild,你可能需要做一些事情,比如 CodeBuild 允许与其他 Amazon 服务进行交互。

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

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

重要

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

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

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

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

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

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

    • 您 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策略,输入以下内容,然后选择 Review P olicy

    { "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. 选择 Create role(创建角色)。

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

  10. 在 “附加权限策略” 页面上,选择 CodeBuildServiceRolePolicy,然后选择 “下一步:查看”。

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

创建 CodeBuild 服务角色 (Amazon CLI)
  1. 确保按照前面的步骤所述, Amazon 使用 Amazon CLI 与其中一个IAM实体相对应的访问 Amazon 密钥和私有访问密钥配置了。有关更多信息,请参阅《 Amazon Command Line Interface用户指南》中的开始设置Amazon Command Line Interface

  2. 在安装的本地工作站或实例的空目录中 Amazon 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:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。例如,您可以使用以下条件块编辑上述信任策略:aws:SourceAccount是项目的所有者,aws:SourceArn是 CodeBuild 项目的所有者ARN。 CodeBuild

    如果您想将服务角色限制为一个 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