Amazon Elastic Container Registry と IAM が連動するしくみ - Amazon ECR

Amazon Elastic Container Registry と IAM が連動するしくみ

IAM を使用して Amazon ECR へのアクセスを管理する前に、Amazon ECR で使用できる IAM 機能について理解しておく必要があります。Amazon ECR およびその他の AWS のサービスが IAM と連携する方法の概要を把握するには、IAM ユーザーガイドの「IAM と連携する AWS のサービス」を参照してください。

Amazon ECR のアイデンティティベースのポリシー

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、アクションを許可または拒否する条件を指定できます。Amazon ECR は、特定のアクション、リソース、および条件キーをサポートしています。JSON ポリシーで使用するすべての要素については、「IAM ユーザーガイド」の「IAM JSON ポリシーの要素のリファレンス」を参照してください。

アクション

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどんなリソースにどんな条件アクションを実行できるかということです。

JSON ポリシーのAction要素には、ポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。ポリシーアクションの名前は通常、関連する AWS API オペレーションと同じです。一致する API オペレーションのない許可のみのアクションなど、いくつかの例外があります。また、ポリシーに複数のアクションが必要なオペレーションもあります。これらの追加アクションは、依存アクションと呼ばれます。

このアクションは、関連付けられたオペレーションを実行するための権限を付与するポリシーで使用されます。

Amazon ECR のポリシーアクションは、アクションの前にプレフィックス ecr: を使用します。たとえば、Amazon ECR CreateRepository API オペレーションを使用して Amazon ECR リポジトリを作成するアクセス許可を付与するには、ポリシーに ecr:CreateRepository アクションを含めます。ポリシーステートメントには、Action または NotAction エレメントを含める必要があります。Amazon ECR は、このサービスで実行できるタスクを記述する独自のアクションのセットを定義します。

単一ステートメントに複数アクションを指定するには、次のようにカンマで区切ります:

"Action": [ "ecr:action1", "ecr:action2"

ワイルドカード (*) を使用して複数アクションを指定できます。例えば、Describe という単語で始まるすべてのアクションを指定するには、次のアクションを含めます。

"Action": "ecr:Describe*"

Amazon ECR アクションのリストについては、IAM ユーザーガイドの「Amazon Elastic Container Registry のアクション、リソース、および条件キー」を参照してください。

リソース

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどのリソースにどのような条件アクションを実行できるかということです。

Resource JSON ポリシー要素は、アクションが適用されるオブジェクトを指定します。ステートメントには、Resource または NotResource 要素を含める必要があります。ベストプラクティスとして、Amazon リソースネーム (ARN) を使用してリソースを指定します。これは、リソースレベルの許可と呼ばれる特定のリソースタイプをサポートするアクションに対して実行できます。

オペレーションのリスト化など、リソースレベルの権限をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (*) を使用します。

"Resource": "*"

Amazon ECR リポジトリリソースには、次の ARN があります。

arn:${Partition}:ecr:${Region}:${Account}:repository/${Repository-name}

ARN の形式の詳細については、「Amazon リソースネーム (ARN) と AWS サービスの名前空間」を参照してください。

たとえば、ステートメントの us-east-1 リージョン で my-repo リポジトリを指定するには、次の ARN を使用します。

"Resource": "arn:aws:ecr:us-east-1:123456789012:repository/my-repo"

特定のアカウントに属するすべての リポジトリを指定するには、ワイルドカード (*) を使用します。

"Resource": "arn:aws:ecr:us-east-1:123456789012:repository/*"

複数リソースを単一ステートメントで指定するには、ARN をカンマで区切ります。

"Resource": [ "resource1", "resource2"

Amazon ECR リソースタイプとその ARN のリストを表示するには、IAM ユーザーガイドの「Amazon Elastic Container Registry で定義されるリソースタイプ」を参照してください。各リソースの ARN を指定できるアクションについては、「Amazon Elastic Container Registry で定義されるアクション」を参照してください。

条件キー

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどんなリソースにどんな条件アクションを実行できるかということです。

Condition 要素 (または Condition ブロック) を使用すると、ステートメントが有効な条件を指定できます。Condition 要素はオプションです。イコールや未満などの 条件演算子 を使用して条件式を作成することで、ポリシーの条件とリクエスト内の値を一致させることができます。

1 つのステートメントに複数の Condition 要素を指定する場合、または 1 つの Condition 要素に複数のキーを指定する場合、AWSでは AND 論理演算子を使用してそれらを評価します。単一の条件キーに複数の値を指定する場合、AWS では OR 論理演算子を使用して条件を評価します。ステートメントの権限が付与される前にすべての条件が満たされる必要があります。

条件を指定する際にプレースホルダー変数も使用できます。例えば IAM ユーザーに、IAM ユーザー名がタグ付けされている場合のみリソースにアクセスできる権限を付与することができます。詳細については、IAM ユーザーガイドの‭‬IAM ポリシーの要素: 変数およびタグ‭‬を参照してください。

AWS はグローバル条件キーとサービス固有の条件キーをサポートしています。すべての AWS グローバル条件キーを確認するには、「IAM ユーザーガイド」の「AWS グローバル条件コンテキストキー」を参照してください。

Amazon ECR では独自の条件キーが定義されており、また一部のグローバル条件キーの使用がサポートされています。すべての AWS グローバル条件キーを確認するには、IAM ユーザーガイドの「AWS グローバル条件コンテキストキー」を参照してください。

ほとんどの Amazon ECR アクションは、aws:ResourceTagecr:ResourceTag の条件キーをサポートします。詳細については、「タグベースのアクセスコントロールを使用する」を参照してください。

Amazon ECR 条件キーのリストについては、IAM ユーザーガイドの「Amazon Elastic Container Registry の条件キー」を参照してください。条件キーを使用できるアクションとリソースについては、「Amazon Elastic Container Registry で定義されるアクション」を参照してください。

Amazon ECR でのアイデンティティベースのポリシーの例は、「Amazon Elastic Container Registry のアイデンティティベースのポリシーの例」を参照してください。

Amazon ECR のリソースベースのポリシー

リソースベースのポリシーとは、Amazon ECR リソース上で指定するプリンシパルとしてのどのアクションをどの条件で実行できるかを指定する JSON ポリシードキュメントです。Amazon ECR は、Amazon ECR リポジトリのリソースベースのアクセス許可ポリシーをサポートします。リソースベースのポリシーでは、リソースごとに他の アカウントに使用許可を付与することができます。リソースベースのポリシーを使用して、Amazon ECR リポジトリへのアクセスを AWS サービスに許可することもできます。

クロスアカウントアクセスを有効にするには、アカウント全体、または別のアカウントの IAM エンティティをリソースベースのポリシーのプリンシパルとして指定します。リソースベースのポリシーにクロスアカウントのプリンシパルを追加しても、信頼関係は半分しか確立されない点に注意してください。プリンシパルとリソースが異なる AWS アカウントにある場合は、リソースにアクセスするためのアクセス許可をプリンシパルエンティティにも付与する必要があります。アクセス許可は、アイデンティティベースのポリシーをエンティティにアタッチすることで付与します。ただし、リソースベースのポリシーで、同じアカウントのプリンシパルへのアクセス権が付与されている場合は、ID ベースのポリシーをさらに付与する必要はありません。詳細については、IAM ユーザーガイドの「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

Amazon ECR サービスでは、リポジトリポリシーと呼ばれるリソースベースのポリシーのタイプを 1 つのみサポートしており、これがリポジトリにアタッチされます。このポリシーは、リポジトリに対してアクションを実行できるプリンシパルエンティティ (アカウント、ユーザー、ロール、フェデレーティッドユーザー) を定義します。リソースベースのポリシーをリポジトリにアタッチする方法については、「Amazon ECR でのプライベートリポジトリポリシー」を参照してください。

注記

Amazon ECR リポジトリポリシーでは、ポリシー要素 Sid は IAM ポリシーではサポートされていない追加の文字とスペースをサポートします。

Amazon ECR リソースベースのポリシーの例を表示するには、「Amazon ECR でのプライベートリポジトリポリシーの例」を参照してください。

Amazon ECR タグに基づく認可

タグは、Amazon ECR リソースにアタッチするか、Amazon ECR へのリクエストで渡すことができます。タグに基づいてアクセスを管理するには、ecr:ResourceTag/key-nameaws:RequestTag/key-name、または aws:TagKeys の条件キーを使用して、ポリシーの 条件要素でタグ情報を提供します。Amazon ECR リソースのタグ付けの詳細については、「Amazon ECR でのプライベートリポジトリのタグ付け」を参照してください。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースポリシーの例を表示するには、「タグベースのアクセスコントロールを使用する」を参照してください。

Amazon ECR のIAM ロール

IAM ロールは AWS アカウント内のエンティティで、特定の許可を持っています。

Amazon ECR での一時的な認証情報の使用

一時的な認証情報を使用して、フェデレーションでサインインする、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、AssumeRole または GetFederationToken などの AWS STS API オペレーションを呼び出します。

Amazon ECR では、一時認証情報が使用できます。

サービスリンクロール

サービスリンクロールは、AWS サービスが他のサービスのリソースにアクセスしてお客様の代わりにアクションを完了することを許可します。サービスリンクロールは IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスリンクロールの許可を表示できますが、編集することはできません。

Amazon ECR は、サービスにリンクされたロールをサポートしています。詳細については、「Amazon ECR でのサービスにリンクされたロールの使用」を参照してください。