最近ちょっと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も完結に書けるのでいい感じです。