はじめに
イメージを作成してコンテナとして起動するというユースケースは頻繁に行われるものです。その際のレジストリとしてECRを使用すると思いますが簡単にまとめてみました。意外と知られていない機能もあると思うのでお時間があるときにチェックしてみてはいかがでしょうか。
ECRとは
-
コンテナイメージレジストリのマネージドサービス
-
Docker CLIコマンドを利用することが可能
-
コンテナイメージ/アーティファクトはS3に保存
-
サポートされる形式
- Dockerイメージ(v1,v2)
- Open Container Initiative (OCI)イメージ
- OCI互換 artifacts
-
機能
-
レジストリ
- AWSアカウントごとに用意される
- イメージを保存するためのリポジトリを複数作成可能
-
Dockerクライアント
を認証して利用
-
リポジトリ
- Dockerイメージ、OCIイメージ、OCIC互換アーティファクトを保存
- リポジトリポリシー
- リポジトリとリポジトリ内のイメージへのアクセス権を制御
- 認証トークン
- IAM認証情報を利用して、レジストリに対して認証をする
-
-
アクセスタイプ
- プライベートレジストリ
- 利用するにはIAMベースの認証が必須
- パブリックレジストリ
- ECR Public
- 認証なしでもイメージのpullが可能
- 公開されているイメージを検索可能
- プライベートレジストリ
-
ECR Docker Credential Helper
- Docker Deamon向けのcredential helper
- Dockerクライアントからより簡単にECRを利用することが可能
- プライベートレジストリ/パブリックレジストリ共に利用可能
Replication (※Private Only.)
- コンテナイメージを別リージョン・別AWSアカウントにレプリケーションすることが可能
- イメージをpushした際に自動でレプリケーションされる
- 脆弱性の検出結果はレプリケーションされない
Pull Through Cache(※ Private Only.)
- パブリックレジストリのイメージをECR Privateでキャッシュ
- リモートレジストリと自動同期
- アップストリームのパブリックレジストリとしてECR PublicとQuay.ioをサポート
Repository creation template
透過的なリポジトリ作成が行われた際の初期設定値を リポジトリ作成テンプレート 機能によってコントロール(自動でセットアップ)できるようになりました。
Scanning(※ Private Only.)
ECRにpushされたコンテナイメージの脆弱性の検出をする
(1)Basic scanning
- 検出対象 : OSパッケージ
- スキャン実行 : on push / マニュアル実行(任意のタイミング可)
- 追加料金なしで利用可能
- スキャンエンジン : Clairと呼ばれるオープンソースの脆弱性データベースを使用
- スキャンの結果の重要度は2パターンで評価
- 1.アップストリームディストリビューションのCVE番号
- 2.CVSS(共通脆弱性評価システム)スコア
※update
(2)Enhanced scanning
- 検出対象 : OSパッケージ、プログラミング言語パッケージ (ここも対応しているのが肝)
- スキャン実行
- プッシュ時
- 継続的なスキャン : Inspectorの脆弱性データベースにCVEが追加されたタイミングでスキャンが実施
- スキャンエンジン : Inspector (+Synk)
- AWS統合サービス : Organizations、SecurityHub、EventBridge
Inspector Classic と v2 について
ECR Public Gallery
- ECR public で公開されているコンテナイメージを検索
- Docker公式イメージも利用可能
- App Runnerサービスを直接起動することも可能
参考文献
かなりニッチなECR情報。興味がある方はぜひ