VPC Network Access Analyzer でネットワークセキュリティを確認してみる

AWS VPC にネットワークセキュリティを確認する [Network Access Analyzer](https://aws.amazon.com/jp/blogs/news/new-amazon-vpc-network-access-analyzer/) 機能があることに気がついたので、ちょっと試してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/09c796d0-dbbd-80a4-53bb-475143d5c192.png)
情報はこのあたりから。

* [[新機能] ネットワークがアクセス要件を満たしているか確認するのに便利な VPC Network Access Analyzer がリリースされました！ #reinvent](https://dev.classmethod.jp/articles/new-amazon-vpc-network-access-analyzer/)
* [ネットワークが目的どおりに設定されているか確認できる！Amazon VPC Network Access Analyzerとは](https://blog.serverworks.co.jp/network-access-analyzer)

# まずは用意された設定を使ってみる

以下のように4つの Network Access Scopes が作成済みだったので、とりあえず AWS-VPC-Ingress を試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/e82b91a1-99e7-ca33-d111-e2b6498814b8.png)
JSON 形式で設定内容を表示させてみた結果が以下です。
```json
{
  "networkInsightsAccessScopeId":"nis-00ada90ffc919f190",
  "matchPaths":[
    {
      "source":{
        "resourceStatement":{
          "resources":[],
          "resourceTypes":[
            "AWS::EC2::InternetGateway",
            "AWS::EC2::VPCPeeringConnection",
            "AWS::EC2::VPCEndpointService",
            "AWS::EC2::TransitGatewayAttachment",
            "AWS::EC2::VPNGateway"
          ]
        }
      },
      "destination":{
        "resourceStatement":{
          "resources":[],
          "resourceTypes":[
            "AWS::EC2::NetworkInterface"
          ]
        }
      }
    }
  ],
  "excludePaths":[]
}
```
私の今の AWS 環境は Cloud9 環境だけしか作成していないシンプルな状態なのですが、とりあえず実行した結果が以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/c9e85eed-734d-217c-9393-3e5f654a4696.png)
結果が2つ表示されていますが、比べてみたら InternetGateway でインバウンドヘッダーの送信元アドレスが違うだけのようでした。CIDR の範囲内で最大と最小のIP Address がそれぞれ表示されているので、範囲内を調べて両端の2つだけ報告してくれる感じ？ですかね。

そして各行を選択すると下に詳細が表示され、各要素をクリックすることで詳細情報の確認ができます。これは便利ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/8af86ddd-aba9-976f-1b58-ba7d7c0cb78d.png)

# 自分で設定を定義してみる

「Network Access Scope の作成」から独自の設定を定義できます。とりあえず「空のテンプレート」から始めてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/2260aa5c-1f13-71e3-2a9a-b5b9ba7050be.png)

わりとわかりやすい設定画面が開き、送信元・送信先・除外条件などを定義できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/572e887e-3351-cd92-ca67-7508301ae674.png)
とりあえず EC2 から InternetGateway への 443 ポート tcp アクセスを設定してみた結果がコチラ。
```json
{
  "networkInsightsAccessScopeId":"nis-05b34bf95e3863463",
  "matchPaths":[
    {
      "source":{
        "packetHeaderStatement":{
          "sourceAddresses":[],
          "destinationAddresses":[],
          "sourcePorts":[],
          "destinationPorts":[
            "443"
          ],
          "sourcePrefixLists":[],
          "destinationPrefixLists":[],
          "protocols":[
            "tcp"
          ]
        },
        "resourceStatement":{
          "resources":[],
          "resourceTypes":[
            "AWS::EC2::Instance"
          ]
        }
      },
      "destination":{
        "packetHeaderStatement":{
          "sourceAddresses":[],
          "destinationAddresses":[],
          "sourcePorts":[],
          "destinationPorts":[
            "443"
          ],
          "sourcePrefixLists":[],
          "destinationPrefixLists":[],
          "protocols":[
            "tcp"
          ]
        },
        "resourceStatement":{
          "resources":[],
          "resourceTypes":[
            "AWS::EC2::InternetGateway"
          ]
        }
      }
    }
  ],
  "excludePaths":[
    {
      "throughResources":[
        {
          "resourceStatement":{
            "resources":[],
            "resourceTypes":[
              "AWS::EC2::TransitGatewayAttachment"
            ]
          }
        }
      ]
    }
  ]
}
```
以下が実行結果です。想定したとおり、1種類のパスが動作していることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/15676abb-b3b4-6b29-39ea-0b60ecc0c0f5.png)
Network Access Scope の設定ですが、アドレス指定にプリフィックスリストが使えるあたり、ちょっと嬉しいかも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/ae285ff2-8334-f1e9-467f-1a124a86f19a.png)

ちなみに費用ですが「分析された Elastic Network Interface (ENI) ごとに 0.002 USD」とあり、今回の独自定義だと結果に2個と表示されているので、1ドル125円で計算し、1回あたり0.5円ぐらいかな。これぐらいの値段なら気軽に試せそうです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/c00b8329-9972-ebf6-d051-5db8fec2a015.png)

⇒ 何度か分析した結果、翌日に費用を確認したら合計で 0.02$、約 2.5 円ほど請求されていました。

# というわけで

VPC Network Access Analyzer かなり便利そうですね。

ネットワーク設定後に疎通確認したい場合など、踏み台サーバから ping 打ったりしなくても、この機能で楽々試せそうです。そしてこれが本来の使い方だと思いますが、定期的にガッツリ広範囲で確認し、遮断漏れの検知もできます。

仕事用の環境でも、いろいろ設定して確認してみようかな。

それではまた。