

# 転送時の VPC 暗号化を強制する
<a name="vpc-encryption-controls"></a>

VPC 暗号化コントロールは、トラフィックフローの暗号化ステータスをモニタリングするための一元的な権限制御を提供するセキュリティおよびコンプライアンス機能です。これにより、クリアテキスト通信が可能なリソースを特定し、最終的にはリージョンでの VPC 内での転送、および複数の VPC 間での転送時に暗号化を強制するメカニズムを提供できるようになります。

VPC 暗号化コントロールでは、アプリケーションレイヤー暗号化と組み込み暗号化の両方を AWS Nitro System ハードウェアの転送機能で使用して、暗号化を確実に強制できるようにします。また、この機能により、ネイティブハードウェアレイヤー暗号化が最新の Nitro インスタンスから Fargate、Application Load Balancer、Transit Gateway などの他の AWS サービスにまで拡張されます。

この機能は、すべてのトラフィックの暗号化ステータスで可視性と制御を確保する必要がある、すべてのユーザー向けに設計されています。HIPAA、FedRamp、PCI DSS などのコンプライアンス基準を満たすためにデータ暗号化が最優先される業界では、特に便利な機能です。セキュリティ管理者とクラウドアーキテクトは、この機能を使用して AWS 環境全体で転送時の暗号化ポリシーを一元的に実践できます。

この機能は、モニタリングモードと強制モードという 2 つのモードで使用できます。

## 暗号化コントロールのモード
<a name="encryption-controls-modes"></a>

**モニタリングモード**  
モニタリングモードでは、暗号化コントロールによって、VPC 内および VPC 間の AWS リソース間のトラフィックフローの暗号化ステータスが可視化されます。また、転送時に暗号化が強制されない VPC リソースを特定することもできます。VPC フローログを設定すると、トラフィックが暗号化されているかどうかを示すエンリッチされたフィールド (`encryption-status`) を出力できます。また、コンソールまたは `GetVpcResourcesBlockingEncryptionEnforcement` コマンドを使用して、転送時に暗号化が強制されていないリソースを特定することもできます。

**注記**  
既存の VPC は、最初はモニタリングモードでのみ有効にできます。これにより、クリアテキストトラフィックであるリソース、またはクリアテキストトラフィックが可能なリソースを可視化できます。VPC で強制モードを有効にすることができるのは、これらのリソースが暗号化の強制を開始したとき (または暗号化に対する除外を作成したとき) のみです。

**強制モード**  
強制モードでは、VPC 暗号化コントロールにより、VPC 境界内で暗号化されていないトラフィックを許可する機能やサービスを使用できなくなります。既存の VPC では、強制モードで暗号化コントロールを直接有効にすることはできません。まず、モニタリングモードで暗号化コントロールを有効にし、非準拠のリソースを特定および変更のうえ転送時に暗号化を強制してから、強制モードを有効にする必要があります。ただし、新規 VPC の場合は、作成時に強制モードで暗号化コントロールを有効にすることができます。

有効にしても、強制モードでは、ネイティブの組み込み暗号化をサポートしていない古い EC2 インスタンスやインターネットゲートウェイなど、暗号化されていない VPC リソースの作成やアタッチはできません。暗号化が強制された VPC で非準拠のリソースを実行する場合は、そのリソースに対して除外を作成する必要があります。

## トラフィックフローの暗号化ステータスのモニタリング
<a name="monitoring-encryption-status"></a>

VPC フローログの `encryption-status` フィールドを使用して、VPC 内のトラフィックフローの暗号化ステータスを監査できます。以下のイベント値があります。
+ `0` = 暗号化なし
+ `1` = Nitro 暗号化 (VPC 暗号化コントロールによって管理)
+ `2` = アプリケーション暗号化 
  +  AWS サービスへのインターフェイスエンドポイントに対する TCP ポート 443 のフロー\$1 
  +  ゲートウェイエンドポイントに対する TCP ポート 443 のフロー\$1 
  +  VPC エンドポイント経由で暗号化された Redshift クラスターに対するフロー\$1\$1 
+ `3` = Nitro 暗号化とアプリケーション暗号化の両方
+ `(-)` = 不明な暗号化ステータスまたは VPC 暗号化コントロールがオフ

**メモ:**

\$1 インターフェイスエンドポイントとゲートウェイエンドポイントの場合、AWS はパケットデータを調べて暗号化ステータスを判断するのではなく、暗号化ステータスを引き受けるために使用されるポートに依存します。

\$1\$1 指定された AWS マネージドエンドポイントの場合、AWS はサービス設定の TLS の要件に基づいて暗号化ステータスを決定します。

**VPC フローログの制限事項**
+ VPC 暗号化コントロールのフローログを有効にするには、encryption-status フィールドを使用して新しいフローログを手動で作成する必要があります。encryption-status フィールドは、既存のフローログに自動的に追加されません。
+ フローログの詳細を確認するには、\$1\$1traffic-path\$1 フィールドと \$1\$1flow-direction\$1 フィールドをフローログに追加することをお勧めします。

  例:

  ```
  aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-12345678901234567 \
  --traffic-type ALL \
  --log-group-name my-flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::123456789101:role/publishFlowLogs
  --log-format '${encryption-status} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${traffic-path} ${flow-direction} ${reject-reason}'
  ```

## VPC 暗号化コントロールの除外
<a name="vpc-encryption-controls-exclusions"></a>

VPC 暗号化コントロールの強制モードでは、VPC 内のすべてのリソースに暗号化を強制する必要があります。これにより、リージョンの AWS 内で確実に暗号化が実行されます。ただし、インターネットゲートウェイ、NAT ゲートウェイ、仮想プライベートゲートウェイなど、お客様がエンドツーエンドの暗号化の設定と維持を担当する AWS のネットワーク以外への接続を許可するリソースが含まれている場合があります。これらのリソースを暗号化が強制された VPC で実行するには、リソースの除外を作成できます。除外では、顧客が暗号化の維持を担うリソース (通常はアプリケーションレイヤー) に対して監査可能な例外が作成されます。

VPC 暗号化コントロールでサポートされている除外は 8 つのみです。VPC にこれらのリソースがあり、強制モードに移行する場合は、モニタリングモードから強制モードに切り替えるときにこれらの除外を追加する必要があります。他のリソースは除外できません。これらのリソースの除外を作成することで、VPC を強制モードに移行できます。これらのリソースとの間で送受信されるトラフィックフローの暗号化については、お客様の責任となります。
+ インターネットゲートウェイ
+ NAT Gateway
+ Egress-only インターネットゲートウェイ
+ 暗号化が強制されていない VPC への VPC ピアリング接続 (詳細なシナリオについては、「VPC ピアリングサポート」セクションを参照してください)
+ 仮想プライベートゲートウェイ
+ VPC 内の Lambda 関数
+ VPC Lattice
+ Elastic File System

## 実装ワークフロー
<a name="implementation-workflow"></a>

1. **モニタリングを有効化** - モニタリングモードで VPC 暗号化コントロールを作成します

1. **トラフィックの分析** - フローログを確認して、トラフィックフローの暗号化ステータスをモニタリングします

1. **リソースの分析** - コンソールまたは `GetVpcResourcesBlockingEncryptionEnforcement` コマンドを使用して、転送時に暗号化が強制されていないリソースを特定します。

1. **準備 (オプション)** - 強制モードを有効にする場合に、リソースの移行と必要な除外について計画します

1. **強制 (オプション)** - 必要な除外が設定された状態で強制モードに切り替えます

1. **監査** - フローログによる継続的なコンプライアンスのモニタリング

詳細なセットアップ手順については、ブログ記事「[VPC 暗号化コントロールのご紹介: リージョンの VPC 内および VPC 間での転送中の暗号化の強制](https://aws.amazon.com/blogs/aws/introducing-vpc-encryption-controls-enforce-encryption-in-transit-within-and-across-vpcs-in-a-region)」を参照してください。

## VPC 暗号化コントロールの状態
<a name="vpc-encryption-controls-states"></a>

VPC 暗号化コントロールは、次のいずれかの状態になります。

**作成中**  
VPC 暗号化コントロールが VPC に作成されています。

**変更中**  
VPC 暗号化コントロールが VPC で変更されています

**削除中**  
VPC 暗号化コントロールが VPC で削除されています

**利用可能**  
VPC 暗号化コントロールが VPC でのモニタリングモードまたは強制モードの実装に成功しました

## AWS サービスのサポートと互換性
<a name="aws-service-support-compatibility"></a>

暗号化に準拠するには、ハードウェアレイヤーまたはアプリケーションレイヤーでリソースが常に転送時の暗号化を強制する必要があります。ほとんどのリソースでは、お客様によるアクションは必要ありません。

### 自動コンプライアンスによるサービス
<a name="services-automatic-compliance"></a>

クロスリージョン接続の PrivateLinks など、PrivateLinks でサポートされているほとんどの AWS サービスが、アプリケーションレイヤーで暗号化されたトラフィックを受け入れます。これらのリソースを変更する必要はありません。AWS によって、アプリケーションレイヤーで暗号化されていないトラフィックは自動的にドロップされます。いくつかの例外として、Redshift クラスターなどがあります (プロビジョニング済みとサーバーレスの両方。基盤となるリソースを手動で移行する必要があります)。

### 自動的に移行するリソース
<a name="resources-migrate-automatically"></a>

Network Load Balancer、Application Load Balancer、Fargate クラスター、EKS Control Plane は、モニタリングモードを有効にすると、暗号化をネイティブにサポートするハードウェアに自動的に移行します。これらのリソースを変更する必要はありません。AWS で自動的に移行が処理されます。

### 手動による移行が必要なリソース
<a name="resources-requiring-manual-migration"></a>

特定の VPC リソースおよびサービスでは、基盤となるインスタンスタイプを選択する必要があります。最新の EC2 インスタンスでは、すべて転送中の暗号化がサポートされています。お使いのサービスで既に最新の EC2 インスタンスを使用している場合は、変更を加える必要はありません。コンソールまたは GetVpcResourcesBlockingEncryptionEnforcement コマンドを使用して、これらのサービスのいずれかが古いインスタンスを使用しているかどうかを特定できます。このようなリソースを特定する場合は、Nitro System ハードウェアのネイティブ暗号化をサポートする最新の EC2 インスタンスにアップグレードする必要があります。これらのサービスには、EC2 インスタンス、Auto Scaling グループ、RDS (すべてのデータベースおよびドキュメント DB)、プロビジョニングされた Elasticache、Amazon Redshift でプロビジョニングされたクラスター、EKS、ECS-EC2、プロビジョニングされた OpenSearch、EMR が含まれます。

**互換性のあるリソース:**  
次のリソースは VPC 暗号化コントロールと互換性があります。
+ [Nitro ベースの EC2 インスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit)
+ Network Load Balancer (制限付き)
+ アプリケーション ロード バランサー
+ AWS Fargate クラスター
+ Amazon Elastic Kubernetes Service (EKS)
+ Amazon EC2 Auto Scaling グループ
+ Amazon Relational Database Service (RDS: すべてのデータベース)
+ Amazon ElastiCache のノードベースのクラスター
+ Amazon Redshift でプロビジョニングされたクラスターとサーバーレスクラスター
+ Amazon Elastic Container Service (ECS) - EC2 コンテナインスタンス
+ Amazon OpenSearch Service
+ Amazon Elastic MapReduce (EMR)
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ VPC 暗号化コントロールにより、PrivateLink 経由でアクセスされるすべての AWS サービスに対して、アプリケーションレイヤーで暗号化が強制されます。アプリケーションレイヤーで暗号化されていないトラフィックは、VPC 内でホストされている PrivateLink エンドポイントと強制モードの暗号化コントロールによってドロップされます。

### サービス固有の制限
<a name="service-specific-limitations"></a>

**Network Load Balancer の制限**  
TLS 設定: 含まれる VPC で暗号化コントロールを強制する場合に、TLS リスナーを使用して、暗号化と復号の作業をロードバランサーにオフロードすることはできません。ただし、TLS 暗号化と復号を実行するようにターゲットを設定できます。

**プロビジョニングされた Redshift とサーバーレスの Redshift**  
既存のクラスター/エンドポイントが含まれる VPC で、顧客が強制モードに移行することはできません。Redshift で VPC 暗号化コントロールを使用するには、スナップショットからクラスターまたは名前空間を復元する必要があります。プロビジョニングされたクラスターの場合は、既存の Redshift クラスターのスナップショットを作成し、クラスタースナップショットからの復元オペレーションを使用してスナップショットから復元します。サーバーレスクラスターの場合は、既存の名前空間のスナップショットを作成し、サーバーレスワークグループのスナップショットからの復元オペレーションを使用してスナップショットから復元します。VPC 暗号化コントロールは、スナップショットと復元プロセスを実行しないと、既存のクラスターまたは名前空間で有効にできないことに注意してください。スナップショットの作成については、[Amazon Redshift のドキュメント](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html)を参照してください。

**Amazon MSK (Managed Streaming for Apache Kafka)**  
この機能は、独自の VPC の 4.1 に対応する、新しいクラスターでサポートされています。次の手順は、MSK で VPC 暗号化を使用する際に役立ちます。
+ 顧客は、他に MSK クラスターのない VPC で VPC 暗号化を有効にします
+ 顧客は、Kafka バージョン 4.1 を使用し、インスタンスタイプを M7g としてクラスターを作成します

### リージョンとゾーンの制限
<a name="regional-zone-limitations"></a>
+ **ローカルゾーンサブネット**: 強制モードではサポートされていません - VPC から削除する必要があります

### VPC ピアリングサポート
<a name="vpc-peering-support"></a>

2 つの VPC 間で VPC ピアリングを使用して転送時の暗号化を確実に実行するには、2 つの VPC が同じリージョンに存在し、暗号化コントロールが除外なく強制モードで有効になっている必要があります。暗号化が強制された VPC を、別のリージョンに存在する、または強制モードで暗号化コントロールが有効になっていない (除外のない) 別の VPC にピアリングする場合は、ピアリングの除外を作成する必要があります。

2 つの VPC が強制モードで相互にピアリングしている場合、強制モードからモニタリングモードに変更することはできません。VPC 暗号化コントロールでモニタリングモードに変更する前に、まずピアリングの除外を作成する必要があります。

### Transit Gateway 暗号化サポート
<a name="transit-gateway-encryption-support"></a>

暗号化コントロールが有効になっている VPC 間のトラフィックを暗号化するには、Transit Gateway で暗号化サポートを明示的に有効にする必要があります。既存の Transit Gateway で暗号化を有効にすると、既存のトラフィックフローが中断されることなく、暗号化されたレーンへの VPC アタッチメントの移行がシームレスかつ自動的に実行されます。強制モード (除外なし) では、Transit Gateway を介した 2 つの VPC 間のトラフィックは、100% 暗号化されたレーンを通過します。また、Transit Gateway での暗号化によって、異なる暗号化コントロールモードでも同様に 2 つの VPC を接続できます。これは、暗号化が強制されていない VPC に接続する暗号化コントロールを VPC に強制するときに使用する必要があります。このようなシナリオでは、VPC 間トラフィックを含む、暗号化が強制された VPC 内のすべてのトラフィックが暗号化されます。VPC 間トラフィックは、暗号化が強制された VPC 内のリソースと Transit Gateway の間で暗号化されます。さらに、暗号化は、トラフィックが強制されていない VPC で送信されるリソースに依存し、暗号化が保証されません (VPC は強制モードではないため)。すべての VPC は同じリージョンに存在する必要があります (詳細は[こちら](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html)をご覧ください)。

![\[暗号化コントロールのステータスが異なる VPC 間のトラフィックフロー\]](http://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/images/vpc-enc-control-arch.png)

+ この図では、VPC 1、VPC 2、VPC3 の暗号化コントロールが強制モードで実行され、暗号化コントロールがモニタリングモードで実行されている VPC 4 に接続されます。
+ VPC1、VPC2、VPC3 間のすべてのトラフィックが暗号化されます。
+ 具体的には、VPC 1 のリソースと VPC 4 のリソース間のトラフィックが、Nitro System ハードウェアによって提供される暗号化を使用する Transit Gateway まで暗号化されます。さらに、暗号化ステータスは VPC 4 のリソースに依存し、暗号化される保証はありません。

Transit Gateway 暗号化サポートの詳細については、[Transit Gateway ドキュメント](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html)を参照してください。

## 料金
<a name="pricing"></a>

料金については、「[Amazon VPC の料金](https://aws.amazon.com/vpc/pricing/)」を参照してください。

## AWS CLI コマンドリファレンス
<a name="cli-commands-reference"></a>

### セットアップと設定
<a name="setup-configuration"></a>
+ [aws ec2 create-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-encryption-control.html)
+ [aws ec2 modify-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-encryption-control.html)
+ [aws ec2 tgw modify-transit-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-transit-gateway.html)

### モニタリングとトラブルシューティング
<a name="monitoring-troubleshooting"></a>
+ [aws ec2 describe-vpc-encryption-controls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-encryption-controls.html)
+ [aws ec2 get-vpc-resources-blocking-encryption-enforcement](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-vpc-resources-blocking-encryption-enforcement.html)
+ [aws ec2 create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)
+ [aws ec2 describe-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-flow-logs.html)
+ [aws logs query](https://docs.aws.amazon.com/cli/latest/reference/logs/query.html)

### クリーンアップ
<a name="cleanup"></a>
+ [aws ec2 delete-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-vpc-encryption-control.html)

## その他のリソース
<a name="additional-resources"></a>

詳細なセットアップ手順については、ブログ記事「[VPC 暗号化コントロールのご紹介: リージョンの VPC 内および VPC 間での転送中の暗号化の強制](https://aws.amazon.com/blogs/aws/introducing-vpc-encryption-controls-enforce-encryption-in-transit-within-and-across-vpcs-in-a-region)」を参照してください。

API 情報の詳細については、「[EC2 API リファレンスガイド](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html)」を参照してください。