1. はじめに
- AWSの新機能まとめを確認していて、「VPC暗号化コントロール」という機能が2025/11から出ていて、2026/3から有料になるよという記事を見た。
- 暗号化を強制するってどうやって?という点が気になったので、実際に動作を確認してみる。
2. VPC暗号化コントロールとは(自分の理解)
- 「VPC内の通信が全て暗号化されていないとNG」ということなので、例えばサーバ間の通信が ssh や https ならOK、telnet や http だったらNG、みたいなことが分かるものなのかな? そんなことをパケットを見て判断できるのかな?」と最初想像した。
- 機能としてはそういうわけではなくて、「VPC内のリソースがNitroベースのEC2インスタンスやRDSのみで構成されていて、AWS基盤レイヤでの透過的な暗号化が行われているかどうか?」を監視もしくは強制する機能の様子。
3. やったこと
- VPC を VPC暗号化コントロール機能ON(監視モード)で作成する。
- 通信が暗号化されているかどうかを判別できるように、判別に必要なフィールドを含むVPCフローログを作成する。
- 以下の通信パターンが暗号化コントロール的にはどう判断されるのか確認する。
| # | SRC | DST | Protocol |
|---|---|---|---|
| 1 | 自宅PC | nginx(t3.micro) | http |
| 2 | 自宅PC | nginx(m7i.large) | http |
| 3 | 自宅PC | nginx(t3.micro) | https |
| 4 | 自宅PC | nginx(m7i.large) | https |
| 5 | VPC内curlクライアント(t3.micro) | nginx(t3.micro) | http |
| 6 | VPC内curlクライアント(m7i.large) | nginx(m7i.large) | http |
| 7 | VPC内curlクライアント(t3.micro) | nginx(t3.micro) | https |
| 8 | VPC内curlクライアント(m7i.large) | nginx(m7i.large) | https |
- VPC暗号化コントロールのモードを強制に変更する。
4. 構成図
5. 手順
5.1 VPC暗号化コントロール付きVPCの作成
- VPC暗号化コントロールを有効にしたVPCを作成する(最初は監視モード)。VPC作成時に指定するだけでよい。
5.2 試験用インスタンスの作成
- nginx をインストールしたインスタンスを2台(t3.micro, m7i.large) 用意する。
- nginxにはサーバ証明書を入れて、httpsも待ち受け可能にする。(「ACM エクスポート証明書を使った EC2 上の SSL 証明書自動更新」などを参照)
- curlクライアント用のインスタンスを2台(t3.micro, m7i.large) 用意する。
- 自動暗号化に対応・非対応のインスタンスタイプをそれぞれ用意する。Nitroベースだったらなんでもよいわけではなく、対応のインスタンスタイプリストがある。t3はNitroだけど非対応。
5.3 VPCフローログの作成
- 通信が暗号化済判定されているかどうかを判別するために、VPCフローログを設定する。ログをカスタムフォーマットにして、「${encryption-status}」フィールドを含める。
5.4 試験用通信と判定結果
-
手元のPCおよびcurl用インスタンスから、nginxへcurlで疎通確認する。
-
コマンド例は以下の通り。
> curl http://x.x.x.x
> curl -k https://x.x.x.x (-k はIPアドレスでアクセスする際に証明書検証をスキップさせるため)
- 疎通確認して、encryption-status フィールドの結果は以下の通り。「0」は暗号化されていない、「1」はNitroにより暗号化されているという意味。
| # | SRC | DST | Protocol | 結果 |
|---|---|---|---|---|
| 1 | 自宅PC | nginx(t3.micro) | http | 0 |
| 2 | 自宅PC | nginx(m7i.large) | http | 0 |
| 3 | 自宅PC | nginx(t3.micro) | https | 0 |
| 4 | 自宅PC | nginx(m7i.large) | https | 0 |
| 5 | VPC内curlクライアント(t3.micro) | nginx(t3.micro) | http | 0 |
| 6 | VPC内curlクライアント(m7i.large) | nginx(m7i.large) | http | 1 |
| 7 | VPC内curlクライアント(t3.micro) | nginx(t3.micro) | https | 0 |
| 8 | VPC内curlクライアント(m7i.large) | nginx(m7i.large) | https | 1 |
-
Nitro暗号化対応インスタンス間の通信のみが「1」判定になる。
-
PCとインスタンス間、またVPC内のインスタンス間でhttpsで通信していても、この「VPC 暗号化コントロール」のチェック観点では、暗号化しているという判定にはならない。
-
VPCフローログの例は以下の通り。最後の数値が encryption-status フィールドの値。
パターン1: 自宅PC->nginx(t3.micro) http

パターン6: VPC内curlクライアント(m7i.large) -> nginx(m7i.large) http

5.5 強制モードへの切り替え
-
強制モードに切り替えるには、以下に表示されているように、Internet Gatewayと、暗号化非対応のENI(t3.microインスタンスのもの)の対応を行う必要がある。

-
2つのインスタンスのタイプをm7i.largeに変更し、Internet Gateway は除外設定を行うことで「強制モード」への切り替えを行うことができる。
6. 参考記事
- AWS公式ブログ。だいたいこれを見たらなんとなく雰囲気は分かった。
- 監視から強制へ切り替えるとどうなるかなどが検証されている記事。
7. 所感
- 自分のシステムでこの機能を使うことは当分ないかな、、と思ったが、インスタンス間通信などを全て暗号化してしまうNitroはすごいなと思った。




