意図しないネットワークアクセスを特定　Network Access Analyzerを触ってみた

#はじめに
re:invent2021にて「意図しないネットワークアクセスを簡単に特定できる Network Access Analyzer」が発表されたのでさわりだけ触れてみる。

#目次
- Network Access Analyzerとは
- 事前準備したリソースの構成図
- 実際に使用してみる
- 意図通りの構成の場合
- 意図通りではないの構成の場合
- 除外設定を入れてみる
- まとめ

#Network Access Analyzerとは
>AWS上のリソースへの意図しないネットワークアクセスを識別する機能です。Network Access Analyzerを使用して、ネットワークアクセス要件を指定し、指定した要件を満たさない可能性のあるネットワークパスを特定できます。
IGWやエンドポイント、NatGatewayなどのインバウンドやアウトバウンドを対象にし分析できます。

https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-vaa.html

つまり意図したネットワーク構成ができているかを確認できるサービスになります。

##事前準備したリソースの構成図
今回分析するリソース群として以下構成図の内容を準備しました。
分析結果を出すため、意図しないネットワークがあるリソースとないリソースを作成しました。（一つはWeb用のサブネットをパブリックサブネットにしています。）

**意図しないネットワークがない構成図**
![スクリーンショット 2021-12-23 17.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/a34003af-c1a9-3e52-1f95-ad00903b40d2.png)

**意図しないネットワークがある構成図**
![スクリーンショット 2021-12-23 17.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/42569c56-cec3-8bc7-d129-51ff5d3f40ca.png)

※緑のサブネットがパブリック、青のサブネットがプライベート
##実際に使用してみる
今回はIGWへのアウトバウンドのみを検証してみます。
###意図通りの構成の場合
デフォルトでAWSから用意されているスコープがありますが、
今回Network Access Scopes作成からしていきます。

・Network Access Scopesの作成
Network Access Scope を作成をクリック
![スクリーンショット 2021-12-23 17.25.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/97127abf-8767-55db-28d5-01222dc61fe3.png)

5つのテンプレートと独自で作成できます。
今回検証するのはIGWからのアウトバウンド通信なので「インターネットゲートウェイへのアクセスを識別」を選択
![スクリーンショット 2021-12-23 18.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/facb2049-ccf5-a834-2c8e-e3417c8f4c0d.png)


対象がEC2インスタンスのみなので、
一致条件を送信元EC2インスタンス、送信先IGWで設定します。
すべてのインスタンス調べたいので除外設定は入れません。
![screencapture-ap-northeast-1-console-aws-amazon-vpc-home-2021-12-23-18_00_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/6f44e460-b14c-1565-3485-1b42068304f2.png)


内容を確認し作成します。
![screencapture-ap-northeast-1-console-aws-amazon-vpc-home-2021-12-23-18_00_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/8dc67903-31a7-5629-4095-d8d0e311123a.png)

こちらから分析ボタンを押します。
![スクリーンショット 2021-12-23 18.04.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/1dc88346-b6c5-b9b9-3a7d-ac69ba5fd353.png)

数分経つと分析結果が表示されます。
このようにパブリックサブネットにあるインスタンスのENIのみ通信できていることを確認できます。
この結果から意図しないネットワークがないことが確認できました。
![スクリーンショット 2021-12-23 18.08.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/8b0eefba-88c3-38dd-103a-3a04373b1719.png)

###意図通りではないの構成の場合
では次に意図通りではないを試したいと思います。
ルートテーブルを編集しappサブネットをパブリックにし、
先ほど作成したNetwork Access Scopesを使い分析します。

結果、ルートテーブルを編集したサブネットにあるインスタンスが分析結果に表示されました。
本来パブリックと想定しないインスタンスが表示されているので特定できました。
![スクリーンショット 2021-12-23 18.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/1e8ec9ba-9ea6-3c7d-a6be-2bc3629d64f3.png)

###除外設定を入れてみる
アウトバウンドできるパブリックサブネットにあるインスタンスは分析結果に表示されなくていいので除外設定を入れてみます。
先ほど作成したもの選択し、「アクション」→「複製と変更」を押します。
![スクリーンショット 2021-12-23 18.27.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/7992c336-932a-4fd4-f9e3-1bc702f373f0.png)


除外設定を追加します。
パブリックサブネットからのアウトバウンドは分析結果に含めたくないので、送信元に「リソースID」から「サブネット」、「パブリックサブネットのID」を選択し送信先はIGWを設定します。
![screencapture-ap-northeast-1-console-aws-amazon-vpc-home-2021-12-23-18_28_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/d43683f2-412a-4cf9-1277-e8bf98258b1d.png)

その結果、パブリックインスタンスは排除され意図しないインスタンスのENIのみ分析結果に表示されました。
![スクリーンショット 2021-12-23 18.35.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/4d93ac2d-19aa-249a-5e68-d3b79f416d60.png)

###おまけ
意図通りの構成で除外設定を入れて分析してみたところ何も表示されませんでした。
![スクリーンショット 2021-12-23 19.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/69835c8e-96f9-f756-6108-1ce7fa8bc99c.png)


##まとめ
もう少しネットワークが複雑な構成の場合有効だなと感じました。

##参考
https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-vaa.html
https://aws.amazon.com/jp/blogs/news/new-amazon-vpc-network-access-analyzer/