跳至內容

如何使用 CodeBuild 跨帳戶執行 AWS CLI 命令?

2 分的閱讀內容
0

我想使用 AWS CodeBuild 跨 AWS 帳戶執行 AWS Command Line Interface (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) console (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 Resource Name (ARN)。

將 IAM 政策附加至 CodeBuild 服務角色,以擔任該角色

請完成以下步驟:

  1. 在帳戶 A 中,開啟 CodeBuild console (CodeBuild 主控台)。
  2. 在導覽窗格中,選擇 Build projects (組建專案)。
  3. 選取執行跨帳戶動作的組建專案。
  4. 在 CodeBuild 專案中,選擇 Project details (專案詳細資訊) 索引標籤。
  5. Environment section (環境區段) 中,選取 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 console (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 個月前