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

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

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

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

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

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

重要

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

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

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

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

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

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

    • 您 AWS 账户中有权执行以下最低限度操作的用户:

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

    此策略包含允许访问可能大量 AWS 资源的声明。 AWS CodeBuild 要限制对特定 AWS 资源的访问,请更改Resource阵列的值。有关更多信息,请参阅该 AWS 服务的安全文档。

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

    注意

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

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

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

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

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

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

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

  2. 在安装的本地工作站或实例的空目录中 AWS 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

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

    此策略包含允许访问可能大量 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