Amazon ECR インターフェイス VPC エンドポイント ()AWS PrivateLink - Amazon ECR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon ECR インターフェイス VPC エンドポイント ()AWS PrivateLink

インターフェイス VPC エンドポイントを使用するように Amazon ECR を設定することで、VPC のセキュリティ体制を強化できます。VPC エンドポイントは AWS PrivateLink、プライベート IP アドレスを使用して Amazon ECR API にプライベートにアクセスできるようにするテクノロジーを利用しています。 AWS PrivateLink VPC と Amazon ECR 間のすべてのネットワークトラフィックを Amazon ネットワークに制限します。インターネットゲートウェイ、NAT デバイス、または仮想プライベートゲートウェイは必要ありません。

VPC エンドポイントの詳細については AWS PrivateLink 、Amazon VPC ユーザーガイドの「VPC エンドポイント」を参照してください。

Amazon ECR VPC エンドポイントに関する考慮事項

Amazon ECR の VPC エンドポイントを設定する前に、以下の考慮事項に注意してください。

  • Amazon EC2 インスタンスでホストされる Amazon ECS タスクで Amazon ECR からプライベートイメージをプルするには、Amazon ECS 用のインターフェイス VPC エンドポイントも作成する必要があります。詳細については、『Amazon Elastic Container Service 開発者ガイド』の「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。

    重要

    Fargate でホストされる Amazon ECS タスクでは、Amazon ECS インターフェイス VPC エンドポイントは必要ありません。

  • Linux プラットフォームバージョン 1.3.0 以前を使用する Fargate でホストされる Amazon ECS タスクの場合、この機能を活用するために必要なのは、com.amazonaws.region.ecr.dkr Amazon ECR VPC エンドポイントと Amazon S3 ゲートウェイエンドポイントのみです。

  • Linux プラットフォームバージョン 1.4.0 以降を使用する Fargate でホストされる Amazon ECS タスクの場合、この機能を活用するには、com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api の両方の Amazon ECR VPC エンドポイントに加えて、Amazon S3 ゲートウェイエンドポイントが必要です。

  • Windows プラットフォームバージョン 1.0.0 以降を使用する Fargate でホストされる Amazon ECS タスクの場合、この機能を活用するには、com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api の両方の Amazon ECR VPC エンドポイントに加えて、Amazon S3 ゲートウェイエンドポイントが必要です。

  • Amazon ECR からコンテナイメージをプルする Fargate でホストされる Amazon ECS タスクでは、条件キーをタスクのタスク実行 IAM ロールに追加することによって、タスクが使用する特定の VPC へのアクセス、およびサービスが使用する VPC エンドポイントへのアクセスを制限することができます。詳細については、Amazon Elastic Container Service デベロッパーガイドの「インターフェイスエンドポイントを介して Amazon ECR をプルする Fargate タスクの最適な IAM アクセス許可」を参照してください。

  • Fargate でホストされ、Amazon ECR からコンテナイメージを取得し、awslogsログドライバーを使用してログ情報をログに送信する Amazon ECS タスクには、 CloudWatch Logs VPC エンドポイントが必要です。 CloudWatch 詳細については、「Logs エンドポイントを作成します。 CloudWatch 」を参照してください。

  • VPCエンドポイントにアタッチされたセキュリティグループでは、VPCのプライベートサブネットから、ポート 443 で着信接続を許可する必要があります。

  • 現在、VPC エンドポイントはクロスリージョンリクエストをサポートしていません。Amazon ECR に対して API コールを発行するリージョンと同じリージョンに VPC エンドポイントを作成してください。​

  • 現在、VPC エンドポイントは Amazon ECR パブリックリポジトリをサポートしていません。プルスルーキャッシュルールを使用して、VPC エンドポイントと同じリージョンにあるプライベートリポジトリでパブリックイメージをホストすることを検討してください。詳細については、「プルスルーキャッシュルールの使用」を参照してください。

  • VPC エンドポイントは Amazon Route 53 AWS を通じて提供された DNS のみをサポートします。独自の DNS を使用したい場合は、条件付き DNS 転送を使用できます。詳細については、Amazon VPC ユーザーガイドDHCP Options Setsを参照してください。

  • コンテナに Amazon S3 への既存の接続がある場合、Amazon S3 ゲートウェイエンドポイントを追加すると接続が一時的に中断される場合があります。この中断を回避するには、Amazon S3 ​ゲートウェイエンドポイントを使用する新しい VPC を作成してから、Amazon ECS クラスターとそのコンテナを新しい VPC に移行します。

  • 初めてプルスルーキャッシュルールを使用してイメージをプルするとき、 AWS PrivateLink を使って、インターフェイス VPC エンドポイントを使用するように Amazon ECR を設定した場合、NAT ゲートウェイを使用して、同じ VPC 内にパブリックサブネットを作成し、プルが機能するように、プライベートサブネットから NAT ゲートウェイへのすべてのアウトバウンドトラフィックをインターネットにルーティングする必要があります。その後のイメージプルでは、これは必要ありません。詳細については、Amazon Virtual Private Cloud ユーザーガイドの「シナリオ: プライベートサブネットからインターネットにアクセスする」を参照してください。

Windows イメージに関する考慮事項

Windows オペレーティングシステムに基づくイメージには、ライセンスによって配布が制限されているアーティファクトが含まれます。デフォルトでは、Windows イメージを Amazon ECR リポジトリにプッシュすると、これらのアーティファクトを含むレイヤーは外部レイヤーと見なされるため、プッシュされません。アーティファクトが Microsoft によって提供されている場合、外部レイヤーは Microsoft Azure インフラストラクチャから取得されます。このため、コンテナがこれらの外部レイヤーを Azure からプルできるようにするには、VPC エンドポイントを作成する以外に、追加のステップが必要です。

Docker デーモンの --allow-nondistributable-artifacts フラグを使用して、Windowsイメージを Amazon ECR にプッシュするときに、この動作をオーバーライドすることができます。有効にすると、このフラグはライセンスされたレイヤーを Amazon ECR にプッシュします。これにより、Azure への追加アクセスを必要とすることなく、これらのイメージを VPC エンドポイント経由で Amazon ECR からプルすることができます。

重要

この --allow-nondistributable-artifacts フラグを使用しても、Windows コンテナベースイメージライセンスの条項に従う義務が排除されるわけではありません。したがって、パブリックまたはサードパーティーによる再配布のために Windows コンテンツを投稿することはできません。お客様自身の環境内での使用は許可されています。

Docker インストールでこのフラグを使用できるようにするには、Docker デーモン設定ファイルを変更する必要があります。通常は Docker インストールに応じて、[Docker エンジン] セクションの設定または環境設定メニューで設定するか、直接 C:\ProgramData\docker\config\daemon.json ファイルを編集できます。

以下に示しているのは、必要な設定の例です。イメージをプッシュするリポジトリ URI に値を置き換えます。

{ "allow-nondistributable-artifacts": [ "111122223333.dkr.ecr.us-west-2.amazonaws.com" ] }

Docker デーモン設定ファイルを変更したら、イメージをプッシュする前に Docker デーモンを再起動する必要があります。ベースレイヤーがリポジトリにプッシュされたことを確認して、プッシュが成功したことを確認します。

注記

Windows イメージのベースレイヤーは大きくなります。レイヤーサイズにより、プッシュ時間が長くなり、Amazon ECR でのこれらのイメージのストレージコストが増大します。これらの理由から、このオプションは、構築時間と継続的なストレージコストを削減することが厳密に要求される場合にのみ使用することをお勧めします。例えば、mcr.microsoft.com/windows/servercore イメージを Amazon ECR で圧縮すると、約 1.7 GiB のサイズになります。

Amazon ECR の VPC エンドポイントを作成する

Amazon ECR サービスの VPC エンドポイントを作成するには、Amazon VPC ユーザーガイドインターフェイスエンドポイント作成の手順を使用します。

Amazon EC2 インスタンスでホストされる Amazon ECS タスクの場合、Amazon ECR エンドポイントと Amazon S3 ゲートウェイエンドポイントの両方が必要です。

プラットフォームバージョン 1.4.0 以降を使用する Fargate でホストされる Amazon ECS タスクの場合、Amazon ECR VPC エンドポイントと Amazon S3 ゲートウェイエンドポイントの両方が必要です。

プラットフォームバージョン 1.3.0 以前を使用する Fargate でホストされる Amazon ECS タスクの場合、必要なのは com.amazonaws.region.ecr.dkr Amazon ECR VPC エンドポイントと Amazon S3 ゲートウェイエンドポイントのみです。

注記

エンドポイントが作成される順序は重要ではありません。

com.amazonaws.region.ecr.dkr

このエンドポイントは、Docker Registry API に使用されます。pushpull などの Docker クライアントコマンドでは、このエンドポイントが使用されます。

このエンドポイントを作成する際に、プライベート DNS ホスト名を有効にする必要があります。​ これを行うには、VPC エンドポイントを作成するときに、Amazon VPC コンソールで [プライベート DNS 名を有効にする] オプションが選択されていることを確認します。

com.amazonaws.region.ecr.api
注記

指定されたリージョンは、Amazon ECR AWS がサポートするリージョン (米国東部 (オハイオ) リージョンなどus-east-2) のリージョン識別子を表します。

このエンドポイントは、Amazon ECR API への呼び出しに使用されます。DescribeImagesCreateRepository などの API アクションは、このエンドポイントに移動します。

このエンドポイントを作成すると、プライベート DNS ホスト名を有効にするオプションが使用可能になります。VPC エンドポイントの作成時に VPC コンソールで [プライベート DNS 名を有効にする] を選択して、この設定名を有効にします。VPC エンドポイントのプライベート DNS ホスト名を有効にする場合は、SDK または使用時にエンドポイント URL AWS CLI AWS CLI を指定する必要がないように、SDK または最新バージョンに更新してください。

プライベート DNS ホスト名を有効にし、2019 年 1 月 24 日より前にリリースされた SDK AWS CLI またはバージョンを使用している場合は、--endpoint-urlパラメータを使用してインターフェイスエンドポイントを指定する必要があります。次の例は、エンドポイント URL の形式を示しています。

aws ecr create-repository --repository-name name --endpoint-url https://api.ecr.region.amazonaws.com

VPC エンドポイントでプライベート DNS ホスト名を有効にしない場合は、インターフェイスエンドポイントで VPC エンドポイント ID を指定する --endpoint-url パラメータを​使用する必要があります。次の例は、エンドポイント URL の形式を示しています。

aws ecr create-repository --repository-name name --endpoint-url https://VPC_endpoint_ID.api.ecr.region.vpce.amazonaws.com

Amazon S3 ゲートウェイエンドポイントを作成する

Amazon ECS タスクで Amazon ECR からプライベートイメージをプルするには、Amazon S3 のゲートウェイエンドポイントを作成する必要があります。Amazon ECR は Amazon S3 を使用してイメージレイヤーを保存するため、ゲートウェイエンドポイントが必要です。Amazon ECR からイメージをダウンロードするコンテナは、Amazon ECR にアクセスしてイメージマニフェストを取得してから Amazon S3 にアクセスして実際のイメージレイヤーをダウンロードする必要があります。​ 各 Docker イメージのレイヤーを含む Amazon S3 バケットの Amazon リソースネーム (ARN) を以下に示します。

arn:aws:s3:::prod-region-starport-layer-bucket/*

Amazon ECR に以下の Amazon S3 ゲートウェイエンドポイントを作成するには、Amazon VPC ユーザーガイドゲートウェイエンドポイントの作成手順を使用します。エンドポイントを作成するときは、必ず VPC のルートテーブルを選択してください。

com.amazonaws.region.s3

Amazon S3 ゲートウェイエンドポイントは IAM ポリシードキュメントを使用してサービスへのアクセスを制限します。​ このポリシーには、タスクの IAM ロールまたはその他の IAM ユーザーポリシーに設定された制限が引き続き優先して適用されるので、フルアクセスポリシーを使用できます。Amazon S3 バケットアクセスを Amazon ECR を使用するための最小限のアクセス許可に制限する場合は、「Amazon ECR の最小 Amazon S3 バケットアクセス許可」を参照してください。

Amazon ECR の最小 Amazon S3 バケットアクセス許可

Amazon S3 ゲートウェイエンドポイントは IAM ポリシードキュメントを使用してサービスへのアクセスを制限します。​ Amazon ECR に最低限の Amazon S3 バケットアクセス許可のみを許可するには、エンドポイントの IAM ポリシードキュメントを作成するときに Amazon ECR が使用する Amazon S3 バケットへのアクセスを制限します。

次の表は、Amazon ECR に必要な Amazon S3 バケットポリシーアクセス許可を示しています。

アクセス許可 説明

arn:aws:s3:::prod-region-starport-layer-bucket/*

各 Docker イメージのレイヤーを含む Amazon S3 バケットへのアクセスを提供します。米国東部 (オハイオ) リージョンの us-east-2 のように、Amazon ECR でサポートされている AWS リージョンのリージョン識別子を表します。

以下の例は、Amazon ECR オペレーションに必要な Amazon S3 バケットへのアクセスを提供する方法を示しています。

{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::prod-region-starport-layer-bucket/*"] } ] }

Logs エンドポイントを作成します。 CloudWatch

Fargate 起動タイプを使用する Amazon ECS タスクで、インターネットゲートウェイなしで VPC を使用し、awslogsログドライバーを使用してログ情報をログに送信する場合は、com.amazonaws を作成する必要があります。 CloudWatch リージョン.logsインターフェースログ用のVPC エンドポイント。 CloudWatch 詳細については、Amazon CloudWatch Logs ユーザーガイドの「インターフェイス VPC CloudWatch エンドポイントでのログの使用」を参照してください。

Amazon ECR VPC エンドポイントのエンドポイントポリシーを作成する

VPC エンドポイントポリシーは、エンドポイントの作成時または変更時にエンドポイントに加える国際機械技術者協会 (IAM) のリソースポリシーです。エンドポイントの作成時にポリシーをアタッチしない場合、 AWS サービスへのフルアクセスを許可するデフォルトポリシーがアタッチされます。エンドポイントポリシーは、 ユーザーポリシーやサービス固有のポリシーを上書き、または置き換えません。これは、評価項目から指定されたサービスへのアクセスを制御するための別のポリシーです。評価項目のポリシーは、JSON形式で記載する必要があります。詳細については、「Amazon VPCユーザーガイド」の「VPC評価項目によるサービスのアクセス制御」を参照してください。

1 つの IAM リソースポリシーを作成し、両方の Amazon ECR VPC エンドポイントにアタッチすることをお勧めします。

Amazon ECR API のエンドポイントポリシーの例を次に示します。このポリシーは、特定の IAM ロールが Amazon ECR からイメージをプルできるようにします。

{ "Statement": [{ "Sid": "AllowPull", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Effect": "Allow", "Resource": "*" }] }

次のエンドポイントポリシーの例では、指定されたリポジトリが削除されないようにしています。

{ "Statement": [{ "Sid": "AllowAll", "Principal": "*", "Action": "*", "Effect": "Allow", "Resource": "*" }, { "Sid": "PreventDelete", "Principal": "*", "Action": "ecr:DeleteRepository", "Effect": "Deny", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" } ] }

次のエンドポイントポリシーの例では、前述の 2 つの例を 1 つのポリシーにまとめています。

{ "Statement": [{ "Sid": "AllowAll", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" }, { "Sid": "PreventDelete", "Effect": "Deny", "Principal": "*", "Action": "ecr:DeleteRepository", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" }, { "Sid": "AllowPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }
Amazon ECR の VPC エンドポイントポリシーを変更するには
  1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. ナビゲーションペインで、[Endpoints] (エンドポイント) を選択します。

  3. Amazon ECR の VPC エンドポイントをまだ作成していない場合は、「Amazon ECR の VPC エンドポイントを作成する」を参照してください。

  4. ポリシーを追加する Amazon ECR VPC エンドポイントを選択し、画面の下部にある [ポリシー] タブを選択します。

  5. [ポリシーの編集] を選択してポリシーを変更します。

  6. [保存] を選択してポリシーを保存します。

共有サブネット

自分と共有されているサブネットで VPC エンドポイントを作成、説明、変更、または削除することはできません。ただし、VPC エンドポイントを使用することはできます。