とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

OIDCでAWSとCircleCIと仲良くする

最近ちょっとCircleCIを触ることがあって、久しぶりに設定していたらaws-cliというOrbsがOIDCに対応していました。よくよく見てみるともう1年くらい前に対応してたみたいなんですが、全然キャッチアップできておらず…。せっかくなので最近の設定を試してみます。

Orbsが対応していなかった時のconfig.yml

circleci.com

OrbsがまだOIDCに対応していなかった時は、aws sts assume-role-with-web-identityを実行して、シークレットやトークンを取得していました。以下のコードを自分で実装してた感じですね。

github.com

最近の設定

バージョン3.10以上でassume_role_with_web_identityというコマンドが増えて、こちらにRoleを渡すだけで設定できるようになりました。

circleci.com

こんな感じ

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

おためし

おためし用のプロジェクトを用意しました。

github.com

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_identityrole_arnにAWS_ROLE_ARNを渡しています。

動かしてみるとこんな感じ

クレデンシャル情報を渡すことなくaws s3 lsの実行に成功しました。

まとめ

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