📖

ECRのレジストリポリシーとリポジトリポリシーの違い(初学者むけ)

2025/03/21に公開
1

こんにちは。

terraformでECRのコードを書こうとhashcorpのドキュメントを読んでいたところ、
レジストリポリシーリポジトリポリシーという非常に似ている用語が出てきて
一瞬困惑したので調べました。

ECRとは

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/what-is-ecr.html

そもそも、ECRの正式名称は「Elastic Container Registry(レジストリ)」なんですね。
ECRを触りはじめてもう1年以上経ちますが、
てっきり「Elastic Containerリポジトリ」かと思っていました。思い込みって恐ろしい。。
AWSアカウントごとにひとつレジストリが割り当てられており、その中に複数のリポジトリを作成しているイメージですね。

リポジトリポリシー

リポジトリ単位で設定するポリシーです。
端的に言うと、IAMロールなどの権限を利用してリポジトリへのアクセス制御をする仕組みですね。
ユーザやロール単位で、どのようなアクションをリポジトリに対して実行できるかを指定できます。
ECRのポリシー制御と聞いて、イメージしやすいのはこちらではないでしょうか。
私もこれまでなんとなく使っていました。
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/repository-policies.html

さて、レジストリポリシーってなんだ?

マネジメントコンソール上で画面左側ツリーのプライベートレジストリ>レポジトリ>を押下すると、「レジストリの許可」画面で設定するのが、レジストリポリシーです。

AWS ECR コンソールの Private registry >Features & Settings>Permissions (アクセス許可) ページで「Generate statement」を押すと、Policy type (ポリシータイプ) のドロップダウンが表示されます。主に2つのタイプがあります。

ポリシータイプ

- Replication – cross account
- Pull through cache policy

Replication – cross account

他アカウントから自分のレジストリへイメージをレプリケート(クロスアカウントアクセス付与)する際に利用。これはなんとなく利用イメージも湧きやすいので割愛。

Pull through cache policy

外部レジストリ(Docker Hub/ECR Public など)からキャッシュされたイメージをプライベートレジストリに取り込む権限付与する際に利用

Pull through cache policyとは

私は恥ずかしながら、これまでプルスルーキャッシュというワードに触れたことがなかったので、調べてみました。
以下、ChatGPT先生の回答です。

Pull through cache(プルスルーキャッシュ)とは
Docker Hub、Amazon ECR Public、Quay.io 等の 外部レジストリ からコンテナイメージを引き出> し、あなたの プライベート ECR に自動でキャッシュ(複製)

プルスルーキャッシュについては、以下の記事によくまとまっています。
https://dev.classmethod.jp/articles/ecr-pull-through-cache-repositories/
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html

ざっと見る限り、インターネットへの直接アクセスが制限された(プライベートサブネット上の)ECSタスクが、Amazon ECR Public(または Docker Hub 等) のイメージを間接的に取得するために使えそうな機能ですね。

外部のリポジトリと直接コンテナが通信しなくても、
欲しいイメージをプライベートリポジトリに複製してこれるのね。これは便利だ!

今日もまた一つ勉強になりました。

1

Discussion