跳至内容

如何使用 CodeBuild 跨账户运行 AWS CLI 命令?

2 分钟阅读
0

我想使用 AWS CodeBuild 跨 AWS 账户运行 AWS 命令行界面 (AWS CLI) 命令。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

以下解决方法将账户 A 中的 CodeBuild 项目配置为在账户 B 中运行 AWS CLI 命令。

**先决条件:**在账户 A 中创建构建项目

在账户 B 中创建 IAM 角色以执行 AWS CLI 命令

完成以下步骤:

  1. 在账户 B 中,打开 AWS Identity and Access Management (IAM) 控制台
  2. 在导航窗格中,选择 Roles(角色),然后选择 Create role(创建角色)。
  3. 选择 AWS account(AWS 账户)角色类型。
  4. An AWS account(AWS 账户)部分中,选择 Another AWS account(其他 AWS 账户)。
  5. 对于 Account ID(账户 ID),输入账户 A 的账户 ID。
  6. 选择 Next(下一步)。
  7. 选择具有相应权限的策略,以便在账户 B 中运行 AWS CLI 命令。
  8. 选择 Next(下一步)。
  9. Role name(角色名称)字段中,输入角色的名称。
  10. 选择 Create role(创建角色)。
  11. 记下 IAM 角色的 Amazon 资源编号 (ARN)。

将 IAM 策略附加到 CodeBuild 服务角色以代入该角色

完成以下步骤:

  1. 在账户 A 中,打开 CodeBuild 控制台
  2. 在导航窗格中,选择 Build projects(构建项目)。
  3. 选择执行跨账户操作的构建项目。
  4. 在 CodeBuild 项目中,选择 Project details(项目详细信息)选项卡。
  5. Environment(环境)部分中,选择 Service role(服务角色)ARN。
  6. 在新打开的 IAM 控制台窗口中,选择 Add Permissions(添加权限),然后选择 Add inline policy(添加内联策略)。
  7. JSON选项卡中输入以下策略:
    {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "AllowCrossAccountAccess",
                    "Effect": "Allow",
                    "Action": "sts:AssumeRole",
                    "Resource": "ACCOUNT_B_ROLE_ARN"
                }
            ]
        }
    **注意:**请将 ACCOUNT_B_ROLE_ARN 替换为 IAM 角色的 ARN。
  8. 选择 Next(下一步)。
  9. Policy name(策略名称)字段中,为策略输入名称。
  10. 选择 Create policy(创建策略)。

修改 CodeBuild 项目的 buildspec

如果 buildspec 文件位于 CodeBuild 项目中,则完成以下步骤:

  1. 打开 CodeBuild 控制台
  2. 在导航窗格中,选择 Build projects(构建项目)。
  3. 选择您的构建项目,然后选择 Edit(编辑)。
  4. Buildspec 部分中,按以下顺序添加 assume-role AWS CLI 命令和跨账户命令:
    - CREDS=$(aws sts assume-role \
      --role-arn $ACCOUNT_B_ROLE_ARN \
      --role-session-name "session")
    - export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.Credentials.AccessKeyId')
    - export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.Credentials.SecretAccessKey')
    - export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Credentials.SessionToken')
    **注意:**请将 ACCOUNT_B_ROLE_ARN 替换为 IAM 角色的 ARN。如果 buildspec 文件位于您的源代码中,则在 buildspec 文件中的跨账户命令之前添加 assume-role AWS CLI 命令。
  5. 选择 Update Project(更新项目)。

要在账户 B 中运行 AWS CLI 命令,请在 assume-roleexport 命令之后运行 CLI 命令。

要恢复到之前的 CodeBuild 服务角色权限,请运行以下 unset 命令:

- unset AWS_ACCESS_KEY_ID
- unset AWS_SECRET_ACCESS_KEY
- unset AWS_SESSION_TOKEN
AWS 官方已更新 5 个月前