configure-aws-credentials v6.1.0で名前付きAWSプロファイルがサポートされたので試してみた
configure-aws-credentials の v6.1.0 で、名前付きAWSプロファイルがサポートされました。
これまで configure-aws-credentials はクレデンシャルを環境変数として出力しており、プロファイルには対応していませんでした。以前、GitHub Actionsで複数AWSアカウントを扱う際に .aws/config をリポジトリに配置するワークアラウンドを紹介しました。
今回のアップデートで aws-profile インプットが追加され、~/.aws/credentials と ~/.aws/config にプロファイルとして書き出せるようになっています。
この機能を試してみました。
何が変わったのか
追加されたインプットは2つあります。
| インプット | 説明 |
|---|---|
aws-profile |
プロファイル名を指定すると、環境変数ではなく ~/.aws/credentials と ~/.aws/config にクレデンシャルが書き出される |
overwrite-aws-profile |
既存プロファイルの上書きを許可する。デフォルトは false で、同名プロファイルがあるとエラーになる |
aws-profile を指定すると output-env-credentials のデフォルトが false になります。環境変数にも出力したい場合は output-env-credentials: true を設定してください。
やってみた
OIDC認証 + 名前付きプロファイルの構成で試してみます。
単一プロファイル
1つのプロファイルを設定するパターンです。
name: Single Profile Example
on: push
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::123456789012:role/my-role
aws-profile: myprofile
- name: AWS CLIで確認
run: |
aws sts get-caller-identity --profile myprofile
aws-profile: myprofile を指定するだけです。~/.aws/credentials と ~/.aws/config にプロファイルが作成されます。
複数プロファイル(マルチアカウント)
devとprodの2アカウントをそれぞれプロファイルとして設定してみます。
name: Multi Profile Example
on: push
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials for Dev
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::111111111111:role/dev-role
aws-profile: dev
- name: Configure AWS Credentials for Prod
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::222222222222:role/prod-role
aws-profile: prod
- name: 各アカウントで操作
run: |
# dev アカウントの確認
aws sts get-caller-identity --profile dev
# prod アカウントの確認
aws sts get-caller-identity --profile prod
configure-aws-credentials を2回呼び出し、それぞれ別のプロファイル名を指定しています。--profile で切り替えるだけなので、ローカルと同じ感覚で使えます。
実際にワークフローを動かしたところ、下記のように成功しました。

注意点
環境変数にクレデンシャルが出力されない
aws-profile を指定すると、デフォルトでは環境変数にクレデンシャルが出力されません。
実際に確認してみます。以下のワークフローで、aws-profile のみの場合と output-env-credentials: true を追加した場合を比較しました。
# aws-profileのみで認証
- name: Configure AWS Credentials for Dev
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::111111111111:role/dev-role
aws-profile: dev
# 環境変数を確認
- name: "環境変数の確認: aws-profileのみ"
run: |
echo "AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-(未設定)}"
echo "AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:+(設定済み)}"
echo "AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN:+(設定済み)}"
# output-env-credentials: trueを追加して再認証
- name: Configure AWS Credentials with output-env-credentials
uses: aws-actions/configure-aws-credentials@v6.1.0
with:
aws-region: ap-northeast-1
role-to-assume: arn:aws:iam::111111111111:role/dev-role
aws-profile: dev
overwrite-aws-profile: true
output-env-credentials: true
# 環境変数を確認
- name: "環境変数の確認: output-env-credentials true"
run: |
echo "AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-(未設定)}"
echo "AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:+(設定済み)}"
echo "AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN:+(設定済み)}"
aws-profile のみの場合、環境変数は設定されていません。

output-env-credentials: true を追加すると、環境変数にもクレデンシャルが出力されます。

環境変数も必要な場合は output-env-credentials: true を追加してください。
同名プロファイルの上書き
同名のプロファイルが既に存在する場合、デフォルトではエラーになります。
実際に overwrite-aws-profile を指定せずに同名プロファイル dev を再設定してみると、以下のようにエラーになりました。

overwrite-aws-profile: true を設定すると、同名プロファイルを上書きできます。
おわりに
1つのジョブで複数アカウントを扱うワークフローが書きやすくなりました。TerraformやCDKでマルチアカウントデプロイをしている方は試してみてください。







