[CircleCI] AWS ECR からOIDCでイメージをプルできます！

こんにちは！CircleCIカスタマーサクセスのチヨです。
8月に入り暑い日が続いていますが、いかがお過ごしでしょうか。
オールシーズン山を走っているのですが、この季節は途中で滝に飛び込んだりして週末を楽しんでいます。

## はじめに ##
今回は先日GAになったAWSのECRのイメージをOIDCからプルする方法を紹介します。今までCircleCI上に登録していたシークレットキーの管理がなくなり、より安全にCircleCIと連携することができます。
AWS使っているけどOIDCの連携はまだという方は同じチームのシゲさんが以前詳しく解説しておりますので、[CircleCIとAWSをOpenID Connect 認証で連携する](https://qiita.com/suzucir/items/5b76ae7d80944d5d3c85)をご覧ください。
またこちらの[AWS ECRからOIDCでイメージをプルする方法](https://circleci.com/docs/ja/pull-an-image-from-aws-ecr-with-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でイメージをプルができなかった今までは以下の方法で対応していました：
1. CircleCI 標準のプライベート環境変数を使用して、AWS 認証情報を設定する
2. `aws_auth` を使用して、`.circleci/config.yml` に AWS 認証情報を指定する

お馴染みの方法で承認情報を設定する場合はOrganization setting>Context>環境変数へ入力していました。
![Screenshot 2023-07-28 at 2.18.15 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/aa8c692c-9c57-b285-5be8-2cc08c04405b.png)
随分前に登録しっぱなしでローテンションしてないのがバレバレですね。

## OIDCの設定をします ##
さあOIDCの設定から始めます。すでにOIDCを設定済みの方は[config.ymlを更新しイメージをプル](https://qiita.com/supermonkey_chocolate/private/ba0d179ce28acdb0ae37#configyml%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%97%E3%83%AB)までスキップしてください
1. AWSのIAMからIDプロバイダーを選択します。
![Screenshot 2023-07-28 at 2.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/80942e13-6a75-3cf1-14dc-0ba52b0820f2.png)
プロバイダー URL はhttps://oidc.circleci.com/org/<<font color="#1e90ff">your-organization-id</font>> と入力します。organization_id には、CircleCIのorganizationIDを入力します。
![Screenshot 2023-07-28 at 2.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/74066fe8-79ce-9bcd-11ef-a7a608e8d5f5.png)

2. 作成したIDを選択しプロバイダーに権限をつけていきます。
![Screenshot 2023-07-25 at 4.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/be143e90-7ec6-73a6-cdc1-61960e3bff52.png)
許可ポリシーの検索バーから付与したい権限を探します。今回はECRのフルアクセスをつけています。
![Screenshot 2023-07-31 at 16.18.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/c380777e-b4f7-3143-55b9-bcb3ec3c17dd.png)


## config.ymlを更新しイメージをプル #
`.circleci/config.yml`の中でECRに保存されているイメージを使用したいジョブを特定し、ジョブを更新します。
`oidc_role_arn`はロールに表示されているARNを記入してください。
![Screenshot 2023-07-31 at 16.37.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/7cf1a2f0-5d9f-aedc-3d63-d36cb0da8811.png)


```php
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
```
設定後ビルドを走らせると。。。
![Screenshot 2023-07-31 at 15.40.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/1ffbf69b-eaba-6773-c3bb-c4a7afca2125.png)
テストが通りました！

## 終わりに ##
本ブログを作成するにあたり、[AWS Elastic Container Service入門](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-ECS-2022-confirmation_012.html)からイメージを実際に作成しECRにアップロードするプロジェクトを作成しました。サポートいただいたエンジニアのMakotoさん大変ありがとうございました。これからもAWSを使ったグリーンビルドを続けていきたいです。ご質問等ありましたら、[サポートセンター](https://support.circleci.com/hc/ja)までご連絡ください。