我想使用 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 命令
請完成以下步驟:
- 在帳戶 B 中,開啟 AWS Identity and Access Management (IAM) console (AWS Identity and Access Management (IAM) 主控台)。
- 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。
- 選擇 AWS account (AWS 帳戶) 角色類型。
- 在 An AWS account (AWS 帳戶) 區段中,選擇 Another AWS account (另一個 AWS 帳戶)。
- 在 Account ID (帳戶 ID),輸入帳戶 A 的帳戶 ID。
- 選擇 Next (下一步)。
- 選取具備在帳戶 B 中執行 AWS CLI 命令的權限政策。
- 選擇 Next (下一步)。
- 在 Role name (角色名稱) 欄位中,輸入角色的名稱。
- 選擇 Create role (建立角色)。
- 記下該 IAM 角色的 Amazon Resource Name (ARN)。
將 IAM 政策附加至 CodeBuild 服務角色,以擔任該角色
請完成以下步驟:
- 在帳戶 A 中,開啟 CodeBuild console (CodeBuild 主控台)。
- 在導覽窗格中,選擇 Build projects (組建專案)。
- 選取執行跨帳戶動作的組建專案。
- 在 CodeBuild 專案中,選擇 Project details (專案詳細資訊) 索引標籤。
- 在 Environment section (環境區段) 中,選取 Service role (服務角色) ARN。
- 在新的 IAM 主控台視窗中,選擇 Add Permissions (新增權限),然後選擇 Add inline policy (新增內嵌政策)。
- 在 JSON 索引標籤中輸入以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "ACCOUNT_B_ROLE_ARN"
}
]
}
**注意:**將 ACCOUNT_B_ROLE_ARN 替換為該 IAM 角色的 ARN。
- 選擇 Next (下一步)。
- 在 Policy name (政策名稱) 欄位中,輸入政策的名稱。
- 選擇 Create policy (建立政策)。
修改 CodeBuild 專案 buildspec
如果 buildspec 檔案位於 CodeBuild 專案中,請完成以下步驟:
- 開啟 CodeBuild console (CodeBuild 主控台)。
- 在導覽窗格中,選擇 Build projects (組建專案)。
- 選取您的組建專案,然後選擇 Edit (編輯)。
- 在 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 命令。
- 選擇 Update Project (更新專案)。
若要在帳戶 B 中執行 AWS CLI 命令,請在 assume-role 與 export 命令之後執行該 CLI 命令。
若要還原為先前的 CodeBuild 服務角色權限,請執行以下 unset 命令:
- unset AWS_ACCESS_KEY_ID
- unset AWS_SECRET_ACCESS_KEY
- unset AWS_SESSION_TOKEN