【AWS】api_helpers が AWSAFTExecution で実行されるのはどこで確認できるのか?【AFT】

2023/10/30に公開

AFT のワークショップの中で以下の記述が気になった。
aft-account-customizations-terraform(CodeBuild) の実行ロールの権限かと思ったが、そちらは aft-codebuild-customizations-role であり権限が弱い。AWSAFTExecution への assume はどこでやっているのか。

https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/account-customizations

NOTE Notice the api_helpers sub-dir? this is where you could add bash / python script to further customize your account. Need more example? check out the example . Keep in mind that these scripts will be executed using AWSAFTExecution in the target AWS account.

aft-account-customizations-terraform の Buildspecより、pre-api-helpers を実行する前に profile を aft-target に切り替えていることが分かる。

  pre_build:
    on-failure: ABORT
    commands:
      - |
        if [[ ! -z "$CUSTOMIZATION" ]]; then 
          source $DEFAULT_PATH/api-helpers-venv/bin/activate
          export AWS_PROFILE=aft-target
          $DEFAULT_PATH/$CUSTOMIZATION/api_helpers/pre-api-helpers.sh
          unset AWS_PROFILE
        fi

post-api-helpers.sh も同様。

  post_build:
	...snip...
        if [[ ! -z "$CUSTOMIZATION" ]]; then 
          source $DEFAULT_PATH/api-helpers-venv/bin/activate
          export AWS_PROFILE=aft-target
          $DEFAULT_PATH/$CUSTOMIZATION/api_helpers/post-api-helpers.sh
        fi

aft-target は creds.sh の処理において、払い出したアカウントの AWSAFTExecution ロールの一時認証情報を設定していることが分かったので、本当に AWSAFTExecution で api-helpers は実行されるようだ。

https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/6c0b356895478bb5c6578417640819aa0c8d774b/sources/scripts/creds.sh#L47C2-L50C53

  # Assume AWSAFTExecution in User Defined account
  echo "Generating credentials for ${AFT_EXECUTION_ROLE} in vended account account: ${VENDED_ACCOUNT_ID}"
  CREDENTIALS=$(aws sts assume-role --role-arn "arn:${AWS_PARTITION}:iam::${VENDED_ACCOUNT_ID}:role/${AFT_EXECUTION_ROLE}" --role-session-name "${ROLE_SESSION_NAME}" --profile aft-management-admin)
  write_to_credentials "aft-target" "${CREDENTIALS}"

Discussion