

# Amazon ECS のネットワークセキュリティのベストプラクティス
<a name="security-network"></a>

ネットワークセキュリティは、いくつかのサブトピックを含む幅広いトピックです。これには、転送中の暗号化、ネットワークのセグメンテーションと分離、ファイアウォール、トラフィックルーティング、オブザーバビリティなどが含まれます。

## 転送中の暗号化
<a name="security-network-encryption"></a>

ネットワークトラフィックを暗号化することで、データがネットワーク経由で送信されるときに、権限のないユーザーにデータを傍受されて読み取られることを防ぎます。Amazon ECS では、次のいずれかの方法でネットワーク暗号化を実装できます。
+ **Nitro インスタンスを使用する:**

  デフォルトでは、C5n、G4、I3en、M5dn、M5n、P3dn、R5dn、R5n の Nitro インスタンスタイプ間のトラフィックは自動的に暗号化されます。トラフィックがトランジットゲートウェイ、ロードバランサー、または同様の仲介を経由する場合、トラフィックは暗号化されません。
  + [転送時の暗号化](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit)
  + [2019年の新発表](https://aws.amazon.com/about-aws/whats-new/2019/10/introducing-amazon-ec2-m5n-m5dn-r5n-and-r5dn-instances-featuring-100-gbps-of-network-bandwidth/)
  + [「リ・インフォース 2019」からの会話](https://youtu.be/oqHLLbOoxDg?si=Us1YhSiY4deXLFA7)
+ **Application Load Balancer で Server Name Indication (SNI) を使用する**

  Application Load Balancer (ALB) と Network Load Balancer (NLB) は、Server Name Indication (SNI) をサポートします。SNI を使用すると、複数の安全なアプリケーションを 1 つのリスナーのバックグラウンドに配置できます。そのため、各リスナーには独自の TLS 証明書があります。AWS Certificate Manager (ACM) を使用してロードバランサーの証明書をプロビジョニングし、リスナーの証明書リストに追加することをお勧めします。AWS ロードバランサーは、SNI を使用するスマート証明書の選択アルゴリズムを使用します。クライアントから提供されたホスト名と一致する証明書がリスト内にひとつだけある場合、ロードバランサーはこの証明書を選択します。クライアントが提供するホスト名と一致する証明書がリスト内に複数ある場合、ロードバランサーはクライアントがサポートできる証明書を選択します。例として、自己署名証明書や ACM を通じて生成された証明書などがあげられます。
  + [Application Load Balancer で SNI を使用する](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#https-listener-certificates)
  + [Network Load Balancer で SNI を使用する](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-listener.html)
+ **TLS 証明書を使用したエンドツーエンド暗号化:**

  これには、タスクとともに TLS 証明書をデプロイすることが含まれます。自己署名証明書でも、信頼できる認証局からの証明書でもかまいません。証明書のシークレットを参照することで証明書を取得できます。それ以外の場合は、ACM に証明書署名リクエスト (CSR) を発行し、その結果得られたシークレットを共有ボリュームにマウントするコンテナを実行することもできます。
  + [Amazon ECS でNetwork Load Balancer を使用してコンテナまでトランスポートレイヤーのセキュリティを維持する (パート 1)](https://aws.amazon.com/blogs//compute/maintaining-transport-layer-security-all-the-way-to-your-container-using-the-network-load-balancer-with-amazon-ecs/)
  + [コンテナまで Transport Layer Security (TLS) を維持する (パート 2): AWS Private Certificate Authority を使用する](https://aws.amazon.com/blogs//compute/maintaining-transport-layer-security-all-the-way-to-your-container-part-2-using-aws-certificate-manager-private-certificate-authority/)

## タスクネットワーク
<a name="security-network-task-networking"></a>

以下の推奨事項は Amazon ECS の仕組みに関する考慮したものです。Amazon ECS はオーバーレイネットワークを使用しません。代わりに、タスクは異なるネットワークモードで動作するように設定されます。たとえば、`bridge` モードを使用するように設定されたタスクは、各ホストで実行される Docker ネットワークからルーティングできない IP アドレスを取得します。`awsvpc` ネットワークモードを使用するように設定されたタスクは、ホストのサブネットから IP アドレスを取得します。`host` ネットワークを使用して構成されたタスクはホストのネットワークインターフェースを使用します。`awsvpc` が推奨ネットワークモードです。これは、タスクにセキュリティグループを割り当てるのに使用できる唯一のモードであるため推奨されます。また、Amazon ECS の AWS Fargate タスクで使用できる唯一のモードでもあります。

### タスクのセキュリティグループ
<a name="security-network-task-networking-security-group"></a>

`awsvpc` ネットワークモードを使用するようにタスクを設定することをお勧めします。このモードを使用するようにタスクを設定すると、Amazon ECS エージェントは自動的に Elastic Network Interface (ENI) をプロビジョニングしてタスクにアタッチします。ENI がプロビジョニングされると、タスクは AWS セキュリティグループに登録されます。セキュリティグループは、インバウンドトラフィックとアウトバウンドトラフィックをコントロールするための仮想ファイアウォールとして機能します。

タスクまたはサービスでカスタムファイアウォールを使用する場合は、Amazon ECS エージェント管理エンドポイント (「`ecs-a-*.region.amazonaws.com`」)、テレメトリエンドポイント (「`ecs-t-*.region.amazonaws.com`」)、および Service Connect Envoy 管理エンドポイント (「`ecs-sc.region.api.aws`」) のトラフィックを許可するアウトバウンドルールを追加します。

## AWS PrivateLink および Amazon ECS
<a name="security-network-privatelink"></a>

AWS PrivateLink は Amazon ECS を含むさまざまな AWS サービスのプライベートエンドポイントを作成できるようにするネットワーク技術です。エンドポイントは、Amazon VPC に Internet Gateway (IGW) が接続されておらず、インターネットへの代替ルートもないサンドボックス環境で必要となります。AWS PrivateLink を使用することで、Amazon ECS サービスへの呼び出しが Amazon VPC 内にとどまり、インターネットを経由しないことが保証されます。Amazon ECS およびその他の関連サービスの AWS PrivateLink エンドポイントを作成する方法については、「[Amazon ECS インターフェイス Amazon VPC エンドポイント](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/vpc-endpoints.html)」を参照してください。

**重要**  
AWS Fargate タスクには Amazon ECS の AWS PrivateLink エンドポイントは必要ありません。

Amazon ECR と Amazon ECS はどちらもエンドポイントポリシーをサポートしています。これらのポリシーにより、サービスの API へのアクセスを絞り込むことができます。たとえば、特定の AWS アカウントのレジストリにのみイメージをプッシュすることを許可する Amazon ECR のエンドポイントポリシーを作成できます。このようなポリシーは、コンテナイメージを通じてデータが流出するのを防ぎつつ、ユーザーが許可された Amazon ECR レジストリにプッシュできるようにするために使用できます。詳細については、「[VPC エンドポイントポリシーの使用](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#vpc-endpoint-policies)」を参照してください。

以下のポリシーでは、アカウントのすべての AWS プリンシパルが Amazon ECR リポジトリに対してのみ、すべてのアクションを実行できるようにします。

```
{
  "Statement": [
    {
      "Sid": "LimitECRAccess",
      "Principal": "*",
      "Action": "*",
      "Effect": "Allow",
      "Resource": "arn:aws:ecr:region:account_id:repository/*"
    },
  ]
}
```

新しい `PrincipalOrgID` プロパティを使用する条件を設定することで、これをさらに強化できます。これにより、ユーザーの AWS Organizations の一部ではない IAM プリンシパルによるイメージのプッシュやプルを防ぐことができます。詳細については、「[aws:PrincipalOrgID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)」を参照してください。

`com.amazonaws.region.ecr.dkr` と `com.amazonaws.region.ecr.api` エンドポイントの両方に同じポリシーを適用することをお勧めします。

## コンテナエージェントの設定
<a name="security-network-ecs-agent-settings"></a>

Amazon ECS コンテナエージェント設定ファイルには、ネットワークセキュリティに関連する複数の環境変数が含まれています。`ECS_AWSVPC_BLOCK_IMDS` と `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST` は、Amazon EC2 メタデータへのタスクのアクセスをブロックするために使用されます。`HTTP_PROXY` は、HTTP プロキシを経由してインターネットに接続するようにエージェントを設定するために使用されます。エージェントと Docker ランタイムをプロキシ経由でルーティングするように設定する方法については、「[HTTP プロキシ設定](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/http_proxy_config.html)」を参照してください。

**重要**  
AWS Fargate を使用する場合は、これらの設定を使用することはできません。

## ネットワークセキュリティに関する推奨事項
<a name="security-network-recommendations"></a>

Amazon VPC、ロードバランサー、ネットワークを設定するときは、次のことを行うことをお勧めします。

### Amazon ECS で必要に応じてネットワーク暗号化を使用する
<a name="security-network-recommendations-network-encryption"></a>

必要に応じてネットワーク暗号化を使用してください。PCI DSS などの特定のコンプライアンスプログラムでは、データにカード所有者のデータが含まれている場合、転送中のデータを暗号化する必要があります。ワークロードに同様の要件がある場合は、ネットワーク暗号化を設定してください。

最新のブラウザでは、安全でないサイトに接続するとユーザーに警告が表示されます。公開されているロードバランサーがサービスのフロントエンドで使用されている場合は、TLS/SSL を使用してクライアントのブラウザーからロードバランサーへのトラフィックを暗号化し、必要に応じてバックエンドで再暗号化します。

### `awsvpc` ネットワークモードとセキュリティグループを使用して、Amazon ECS のタスクと他のリソース間のトラフィックを制御する
<a name="security-network-recommendations-awsvpc-networking-mode"></a>

タスク間のトラフィック、またはタスクと他のネットワークリソース間のトラフィックを制御する必要がある場合は、`awsvpc` ネットワークモードとセキュリティグループを使用してください。サービスが ALB の内部にある場合は、セキュリティグループを使用して、ALB と同じセキュリティグループを使用する他のネットワークリソースからのインバウンドトラフィックのみを許可します。アプリケーションが NLB の背後にある場合は、Amazon VPC CIDR 範囲からのインバウンドトラフィックと NLB に割り当てられた静的 IP アドレスのみを許可するようにタスクのセキュリティグループを設定します。

セキュリティグループは、タスクと Amazon VPC 内の他のリソース (Amazon RDS データベースなど) との間のトラフィックを制御するためにも使用する必要があります。

### ネットワークトラフィックを厳密に分離する必要がある場合に、別の Amazon VPC に Amazon ECS クラスターを作成する
<a name="security-network-recommendations-separate-vpcs-for-isolated-traffic"></a>

ネットワークトラフィックを厳密に分離する必要がある場合は、別の Amazon VPC にクラスターを作成してください。セキュリティ要件が厳しいワークロードを、その要件を満たす必要のないワークロードを含むクラスターで実行することは避けてください。ネットワークの厳密な分離が必須の場合は、別の Amazon VPC にクラスターを作成し、Amazon VPC エンドポイントを使用して他の Amazon VPC にサービスを選択的に公開します。詳細については、「[VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html#concepts-vpc-endpoints)」を参照してください。

### Amazon ECS で必要に応じて AWS PrivateLink エンドポイントを設定する
<a name="security-network-privatelink-endpoints"></a>

AWS PrivateLink エンドポイントは、必要に応じて設定してください。セキュリティポリシーにより Amazon VPC にインターネットゲートウェイ (IGW) をアタッチできない場合は、Amazon ECS や Amazon ECR、AWS Secrets Manager、Amazon CloudWatch などの他のサービスの AWS PrivateLink エンドポイントを設定します。

### Amazon VPC フローログを使用して、Amazon ECS の長時間実行されるタスクとの間のトラフィックを分析する
<a name="security-network-vpc-flow-logs"></a>

長時間実行されるタスクとの間のトラフィックを分析するには、Amazon VPC フローログを使用してください。`awsvpc` ネットワークモードを使用するタスクには独自の ENI が割り当てられます。これにより、Amazon VPC フローログを使用して個々のタスクに出入りするトラフィックをモニタリングできます。Amazon VPC フローログ (v3) の最新アップデートでは、VPC ID、サブネット ID、インスタンス ID などのトラフィックメタデータがログに追加されました。このメタデータを使用して、調査を絞り込むことができます。詳細については、「[Amazon VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-basics)」を参照してください。

**注記**  
コンテナは一時的な性質を持つため、フローログは、異なるコンテナの間やコンテナとその他のネットワークリソースの間のトラフィックパターンを分析するうえで必ずしも効果的な方法であるとは限りません。