

# Amazon ECS とインターフェイス VPC エンドポイント (AWS PrivateLink)
<a name="vpc-endpoints"></a>

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

AWS PrivateLink および VPC エンドポイントの詳細については、「*Amazon VPC ユーザーガイド*」の「[VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html#concepts-vpc-endpoints)」を参照してください。

## 考慮事項
<a name="ecs-vpc-endpoint-considerations"></a>

### 2023 年 12 月 23 日以降に導入されたリージョンのエンドポイントに関する考慮事項
<a name="fargate-ecs-vpc-endpoint-region-considerations"></a>

Amazon ECS 用のインターフェイス VPC エンドポイントを設定する前に、以下の考慮事項に注意してください：
+ 次のリージョン固有の VPC エンドポイントが必要です。
**注記**  
すべてのエンドポイントを設定しなかった場合、トラフィックが経由するのは VPC エンドポイントではなく、パブリックエンドポイントになります。
  + `com.amazonaws.region.ecs-agent`
  + `com.amazonaws.region.ecs-telemetry`
  + `com.amazonaws.region.ecs`

  例えば、カナダ西部 (カルガリー) (ca-west-1) リージョンでは、次の VPC エンドポイントが必要です。
  + `com.amazonaws.ca-west-1.ecs-agent`
  + `com.amazonaws.ca-west-1.ecs-telemetry`
  + `com.amazonaws.ca-west-1.ecs`
+ テンプレートを使用して新しいリージョンに AWS リソースを作成する際に、2023 年 12 月 23 日以前に導入されたリージョンのテンプレートをコピーした場合は、コピー元のリージョンに応じて次のいずれかの操作を実行してください。

  例えば、コピー元のリージョンが米国東部 (バージニア北部) (us-east-1) であるとします。コピー先のリージョンは、カナダ西部 (カルガリー) (ca-west-1) です。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/vpc-endpoints.html)

### Fargate の Amazon ECS VPC エンドポイントに関する考慮事項
<a name="fargate-ecs-vpc-endpoint-considerations"></a>

Fargate タスクがデプロイされているのと同じ VPC に `ecr.dkr` および `ecr.api` の VPC エンドポイントがある場合は、その VPC エンドポイントが使用されます。VPC エンドポイントがない場合は、Fargate インターフェースが使用されます。

Amazon ECS 用のインターフェイス VPC エンドポイントを設定する前に、以下の考慮事項に注意してください：
+ Fargate を使用するタスクでは、Amazon ECS 用のインターフェイス VPC エンドポイントは必要ありませんが、以下のように Amazon ECR のインターフェイス VPC エンドポイント、Secrets Manager、または Amazon CloudWatch Logs が必要になる場合があります。
  + Amazon ECR からプライベートイメージをプルできるようにするには、Amazon ECR 用のインターフェイス VPC エンドポイントを 作成する必要があります。詳細については、*Amazon Elastic Container Registry ユーザーガイド*の「[インターフェイス VPC エンドポイント (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)」を参照してください。
**重要**  
インターフェイス VPC エンドポイントを使用するよう Amazon ECR を設定する場合、特定の VPC または VPC エンドポイントへのアクセスを制限する条件キーを含むタスク実行ロールを作成できます。詳細については、「[インターフェイスエンドポイントのアクセス許可によって Amazon ECR イメージをプルする Fargate タスクです。](task_execution_IAM_role.md#task-execution-ecr-conditionkeys)」を参照してください。
タスクが IPv6 のみの設定で、Amazon ECR デュアルスタックイメージ URI を使用している場合、Amazon ECR はデュアルスタックインターフェイス VPC エンドポイントに対応しませんので注意してください。詳しくは *Amazon Elastic Container Registry ユーザーガイド*の「[IPv6 を使用したリクエストの実行の開始方法](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ecr-requests.html#ipv6-access-getting-started)」をご確認ください。
  + タスクで Secrets Manager から機密データをプルできるようにするには、Secrets Manager 用のインターフェイス VPC エンドポイントを作成する必要があります。詳細については、[AWS Secrets Manager ユーザーガイド](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)の *VPC EndpointでSecrets Managerを使用する* を参照してください。
  + VPC にインターネットゲートウェイがなく、タスクで `awslogs` ログドライバーを使用してログ情報を CloudWatch Logs に送信する場合は、CloudWatch Logs 用のインターフェイス VPC エンドポイントを作成する必要があります。詳細については、[Amazon CloudWatch Logs ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html)の「*インターフェイス VPC エンドポイントでの CloudWatch Logs の使用*」を参照してください。
+ 現在、VPC エンドポイントはクロスリージョンリクエストをサポートしていません。Amazon ECS に対して API コールを発行するリージョンと同じリージョンにエンドポイントを作成してください。​ 例えば、タスクを米国東部 (バージニア北部) で実行することを考えてみます。その場合、Amazon ECS VPC エンドポイントは、米国東部 (バージニア北部) に作成する必要があります。他のリージョンで作成された Amazon ECS VPC エンドポイントは、米国東部 (バージニア北部) 内のタスクを実行できません。
+ VPC エンドポイントでは、Amazon Route 53 を介して Amazon 提供の DNS のみがサポートされています。独自の DNS を使用したい場合は、条件付き DNS 転送を使用できます。詳細については、*Amazon VPC ユーザーガイド* の [DHCP Options Sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) を参照してください。
+ VPC エンドポイントにアタッチされたセキュリティグループは、VPCのプライベートサブネットからの着信接続をポート 443 で許可する必要があります。
+ Envoy プロキシの Service Connect 管理では、`com.amazonaws.region.ecs-agent` VPC エンドポイントを使用します。VPC エンドポイントを使用しない場合、Envoy プロキシの Service Connect 管理は、そのリージョンの `ecs-sc` エンドポイントを使用します。各リージョンの Amazon ECS エンドポイントのリストについては、「[Amazon ECS のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html)」を参照してください。 

### EC2 の Amazon ECS VPC エンドポイントに関する考慮事項
<a name="ec2-ecs-vpc-endpoint-considerations"></a>

Amazon ECS 用のインターフェイス VPC エンドポイントを設定する前に、以下の考慮事項に注意してください：
+ EC2 を使用するタスクでは、起動されたコンテナインスタンスが Amazon ECS コンテナエージェントのバージョン `1.25.1` 以降を実行する必要があります。詳細については、「[Amazon ECS Linux コンテナインスタンスの管理](manage-linux.md)」を参照してください。
+ タスクで Secrets Manager から機密データをプルできるようにするには、Secrets Manager 用のインターフェイス VPC エンドポイントを作成する必要があります。詳細については、[AWS Secrets Manager ユーザーガイド](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)の *VPC EndpointでSecrets Managerを使用する* を参照してください。
+ VPC にインターネットゲートウェイがなく、タスクで `awslogs` ログドライバーを使用してログ情報を CloudWatch Logs に送信する場合は、CloudWatch Logs 用のインターフェイス VPC エンドポイントを作成する必要があります。詳細については、[Amazon CloudWatch Logs ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html)の「*インターフェイス VPC エンドポイントでの CloudWatch Logs の使用*」を参照してください。
+ 現在、VPC エンドポイントはクロスリージョンリクエストをサポートしていません。Amazon ECS に対して API コールを発行するリージョンと同じリージョンにエンドポイントを作成してください。​ 例えば、タスクを米国東部 (バージニア北部) で実行することを考えてみます。その場合、Amazon ECS VPC エンドポイントは、米国東部 (バージニア北部) に作成する必要があります。他のリージョンで作成された Amazon ECS VPC エンドポイントは、米国東部 (バージニア北部) 内のタスクを実行できません。
+ VPC エンドポイントでは、Amazon Route 53 を介して Amazon 提供の DNS のみがサポートされています。独自の DNS を使用したい場合は、条件付き DNS 転送を使用できます。詳細については、*Amazon VPC ユーザーガイド* の [DHCP Options Sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) を参照してください。
+ VPC エンドポイントにアタッチされたセキュリティグループは、VPCのプライベートサブネットからの着信接続をポート 443 で許可する必要があります。

## Amazon ECS エンドポイントの命名パターンについて
<a name="ecs-endpoint-naming-patterns"></a>

Amazon ECS エージェントは、次のような番号付きサフィックスを備えたエンドポイントにリクエストを行う場合があることを理解することが重要です。
+ エージェントエンドポイントの場合 `ecs-a-1.region.amazonaws.com`、`ecs-a-2.region.amazonaws.com` など
+ テレメトリエンドポイントの場合 `ecs-t-1.region.amazonaws.com`、`ecs-t-2.region.amazonaws.com` など

この動作は、Amazon ECS エージェントが [DiscoverPollEndpoint](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DiscoverPollEndpoint.html) API を使用して接続する特定のエンドポイントを動的に決定するため発生します。VPC エンドポイントがこれらの番号付きエンドポイントのバリエーションを適切に処理しない場合、ベース名に VPC エンドポイントを設定していても、エージェントはパブリックエンドポイントの使用にフォールバックします。

### DiscoverPollEndpoint API の役割
<a name="ecs-discoverpollendpoint-role"></a>

[DiscoverPollEndpoint](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DiscoverPollEndpoint.html) API は、タスクをポーリングする適切なエンドポイントを検出するため Amazon ECS エージェントによって使用されます。エージェントがこの API を呼び出すと、番号付きサフィックスを含む場合がある特定のエンドポイント URL を受け取ります。VPC エンドポイントが正しく動作するようにするには、ネットワーク設定でエージェントに以下を許可する必要があります。

1. DiscoverPollEndpoint API へのアクセス

1. 番号付きサフィックスを含む、返されたエンドポイント URL への接続

VPC エンドポイントの接続の問題をトラブルシューティングする場合は、エージェントがベースエンドポイントと、DiscoverPollEndpoint API によって返される可能性のある番号付きバリエーションの両方に到達できることを確認します。

## Amazon ECS 用の VPC エンドポイントの作成
<a name="ecs-setting-up-vpc-create"></a>

Amazon ECS サービス用の VPC エンドポイントを作成するには、「*Amazon VPC ユーザーガイド*」の「[インターフェイス VPC エンドポイント手順を使用して AWS サービスにアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」の手順を使用して、以下のエンドポイントを作成します。VPC 内に既存のコンテナインスタンスがある場合は、一覧表示されている順にエンドポイントを作成する必要があります。VPC エンドポイントが作成された後にコンテナインスタンスを作成する場合、順序は関係ありません。

**注記**  
すべてのエンドポイントを設定しなかった場合、トラフィックが経由するのは VPC エンドポイントではなく、パブリックエンドポイントになります。  
エンドポイントを作成すると、Amazon ECS はエンドポイントのプライベート DNS 名も作成します。例えば、ecs-agent の `ecs-a.region.amazonaws.com` とecs-telemetry の `ecs-t.region.amazonaws.com` です。
+ `com.amazonaws.region.ecs-agent`
+ `com.amazonaws.region.ecs-telemetry`
+ `com.amazonaws.region.ecs`

**注記**  
*region* は、米国東部 (オハイオ) リージョンの `us-east-2` のように、Amazon ECS でサポートされている AWS リージョンのリージョン識別子を表します。

`ecs-agent` エンドポイントは `ecs:poll` API を使用し、`ecs-telemetry` エンドポイントは `ecs:poll` および `ecs:StartTelemetrySession` API を使用します。

EC2 起動タイプを使用する既存のタスクがある場合は、VPC エンドポイントを作成した後に、各コンテナインスタンスで新しい設定が選択される必要があります。そのためには、各コンテナインスタンスを再起動するか、各コンテナインスタンスで Amazon ECS コンテナエージェントを再起動する必要があります。コンテナエージェントを再起動するには、以下を実行します。<a name="procedure_restart_ecs_agent"></a>

**Amazon ECS コンテナエージェントを再起動するには**

1. SSH 経由でコンテナインスタンスにログインします。

1. コンテナエージェントを停止します。

   ```
   sudo docker stop ecs-agent
   ```

1. コンテナエージェントを開始します。

   ```
   sudo docker start ecs-agent
   ```

VPC エンドポイントを作成し、各コンテナインスタンスで Amazon ECS コンテナエージェントを再起動したら、新しく起動されるすべてのタスクで新しい設定が選択されます。

## Amazon ECS 用の VPC エンドポイントポリシーの作成
<a name="vpc-endpoint-policy"></a>

VPC エンドポイントに Amazon ECS へのアクセスをコントロールするエンドポイントポリシーをアタッチできます。このポリシーでは、以下の情報を指定します。
+ アクションを実行できるプリンシパル。
+ 実行可能なアクション。
+ アクションを実行できるリソース。

詳細については、*Amazon VPC ユーザーガイド*の「[VPC エンドポイントによるサービスのアクセスコントロール](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

**例: Amazon ECS アクションの VPC エンドポイントポリシー**  
Amazon ECS のエンドポイントポリシーの例を次に示します。このポリシーは、エンドポイントに接続すると、クラスターの作成や一覧表示が行えるようにアクセスを許可します。`CreateCluster` と `ListClusters` のアクションはリソースを受け入れないため、すべてのリソースでリソース定義は \$1 に設定されます。

```
{
   "Statement":[
    {
      "Principal":"*",
      "Effect": "Allow",
      "Action": [
        "ecs:CreateCluster",
        "ecs:ListClusters"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```