こんにちは!CircleCIカスタマーサクセスのチヨです。
8月に入り暑い日が続いていますが、いかがお過ごしでしょうか。
オールシーズン山を走っているのですが、この季節は途中で滝に飛び込んだりして週末を楽しんでいます。
はじめに
今回は先日GAになったAWSのECRのイメージをOIDCからプルする方法を紹介します。今までCircleCI上に登録していたシークレットキーの管理がなくなり、より安全にCircleCIと連携することができます。
AWS使っているけどOIDCの連携はまだという方は同じチームのシゲさんが以前詳しく解説しておりますので、CircleCIとAWSをOpenID Connect 認証で連携するをご覧ください。
またこちらのAWS ECRからOIDCでイメージをプルする方法を参考に設定いたしました。
今回AWS上のCloud9というIDEを使用しDocker imageを作成してECRにアップロードしています。イメージを立ち上げるとウェブサーバーとしてRun Trail!
とレスポンスしてくれるdocker imageです。CircleCIではECRサーバーに接続しDocker imageに書き込んでいる文字を出す簡単なテストをしています。
OIDCでAWSのパスワードの管理の手間が省けたというお声は聞いておりますが、さらにIAMロールのuserをOIDCロールに変更できるので、CircleCIがECRイメージを取り込む際に寄与する権限を厳密にコントロールし最小限の権限を確保できます。
OIDCがなかった頃の連携方法
ECRからOIDCでイメージをプルができなかった今までは以下の方法で対応していました:
- CircleCI 標準のプライベート環境変数を使用して、AWS 認証情報を設定する
-
aws_auth
を使用して、.circleci/config.yml
に AWS 認証情報を指定する
お馴染みの方法で承認情報を設定する場合はOrganization setting>Context>環境変数へ入力していました。
随分前に登録しっぱなしでローテンションしてないのがバレバレですね。
OIDCの設定をします
さあOIDCの設定から始めます。すでにOIDCを設定済みの方はconfig.ymlを更新しイメージをプルまでスキップしてください
-
AWSのIAMからIDプロバイダーを選択します。
プロバイダー URL はhttps://oidc.circleci.com/org/<your-organization-id> と入力します。organization_id には、CircleCIのorganizationIDを入力します。
-
作成したIDを選択しプロバイダーに権限をつけていきます。
許可ポリシーの検索バーから付与したい権限を探します。今回はECRのフルアクセスをつけています。
config.ymlを更新しイメージをプル
.circleci/config.yml
の中でECRに保存されているイメージを使用したいジョブを特定し、ジョブを更新します。
oidc_role_arn
はロールに表示されているARNを記入してください。
version: 2.1
jobs:
build:
docker:
- image: cimg/base:2023.07
- image: ご自身ののIDを使用してください.dkr.ecr.us-east-1.amazonaws.com/h4b-ecs-helloworld:0.0.2
aws_auth:
oidc_role_arn: "arn:aws:iam::ご自身のIDを使用してください:role/test-oidc-try"
steps:
- run:
name: "Testing that the server response"
command: curl http://localhost:80
workflows:
wf:
jobs:
- build:
context:
- oidc-test
終わりに
本ブログを作成するにあたり、AWS Elastic Container Service入門からイメージを実際に作成しECRにアップロードするプロジェクトを作成しました。サポートいただいたエンジニアのMakotoさん大変ありがとうございました。これからもAWSを使ったグリーンビルドを続けていきたいです。ご質問等ありましたら、サポートセンターまでご連絡ください。