最近ちょっとCircleCIを触ることがあって、久しぶりに設定していたらaws-cliというOrbsがOIDCに対応していました。よくよく見てみるともう1年くらい前に対応してたみたいなんですが、全然キャッチアップできておらず…。せっかくなので最近の設定を試してみます。
Orbsが対応していなかった時のconfig.yml
OrbsがまだOIDCに対応していなかった時は、aws sts assume-role-with-web-identityを実行して、シークレットやトークンを取得していました。以下のコードを自分で実装してた感じですね。
最近の設定
バージョン3.10以上でassume_role_with_web_identityというコマンドが増えて、こちらにRoleを渡すだけで設定できるようになりました。
こんな感じ
version: '2.1'
orbs:
aws-cli: circleci/aws-cli@4.0.0
jobs:
s3ls:
executor: aws-cli/default
steps:
- aws-cli/install
- aws-cli/assume_role_with_web_identity:
role_arn: $AWS_ROLE_ARN
- run: aws s3 ls s3://
workflows:
oidc-test:
jobs:
- s3ls
おためし
おためし用のプロジェクトを用意しました。
terraformディレクトリ以下でterraform init && terraform applyすることで、AWSの中にCircleCIのID Providerの設定が生えてきます。outputにRole Arnが表示されるのでCircleCIの環境変数に登録します。プロジェクトの環境変数でもコンテキストでも問題ありません。

circleci-oidc-demo/.circleci/config.yml at main · VirtualTech-DevOps/circleci-oidc-demo · GitHub
CircleCIの設定ではaws-cli/assume_role_with_web_identityのrole_arnにAWS_ROLE_ARNを渡しています。
動かしてみるとこんな感じ

クレデンシャル情報を渡すことなくaws s3 lsの実行に成功しました。
まとめ
私が最後に試した時はクレデンシャルやトークンを自分で設定する必要があってとても面倒だったんですが、今はOrbsが担当してくれて大変楽になりました。config.ymlも完結に書けるのでいい感じです。