最近ネットワークに興味を持ち始めたCI部の古川(智)です。
AWS re:Invent 2021 で発表された「Amazon VPC Network Access Analyzer」を実際に使ってみました!
Amazon VPC Network Access Analyzerとは
AWS公式には以下の記載があります。(ドキュメントが英語だったので、日本語に訳しています。)
Network Access Analyzerは、AWS上のお客様のリソースへの意図しないネットワークアクセスを特定する機能です。Network Access Analyzerを使用して、ネットワークアクセスの要件を指定し、指定した要件を満たさない潜在的なネットワークパスを特定することができます。
簡単に言うと意図しないネットワークパスを特定できるサービスということみたいですね。
ユースケース
具体的にどんな場面で使えるサービスなんでしょうか?AWS公式から具体的な例が出ていたので、ご紹介します。(こちらもドキュメントを日本語に訳しています。)
本番環境のVPCと開発環境のVPCが相互に分離されていることを確認したいとき。
インターネットからのアクセスを受け入れているリソースを特定し、インターネットからアクセスする必要性があるリソースのみに限定されているかを検証したいとき。
リソースとインターネットゲートウェイ間のすべてのネットワークパスに、ネットワークファイアウォールやNATゲートウェイなどの適切なネットワーク制御が行われているかを確認したいとき。
ネットワークにアクセスできるリソースが、特定の要件を満たしているものに限定されていることを確認したいとき。
2021年12月8日現在、要件としては以下が指定できます。- 個々のリソースID(vpc-01234567など)
- AWS::EC2::InternetGatewayなど、特定のタイプのアカウント内のすべてのリソース
- AWS Resource Groupsを使用した、指定のタグを持つすべてのリソース
- IPアドレスの範囲、ポートの範囲、およびトラフィックプロトコル
セキュリティの観点から、厳しいアクセス管理が必要な場合に活躍しそうです!
Network Access Scopesとは
Network Access Analyzerでは「Network Access Scope」を使用してネットワークアクセス要件を指定することができます。
Network Access Scope
AWS公式ドキュメントでは以下のように説明されています。(こちらもドキュメントを日本語に訳しています。)
Network Access Scopeはアウトバウンドおよびインバウンドのトラフィック・パターンを定義するものです。各Network Access Scopeは、1つまたは複数のMatchPathエントリと0個以上のExcludePathエントリで構成されます。
参考: Working with Network Access Scopes - Amazon Virtual Private Cloud
つまりNetwork Access Scopeは、インバウンド通信とアウトバウンド通信を一致条件と除外条件(任意)で定義するものみたいです。(後で出てくるJSONを見ると分かりやすいです!)
Network Access Scopeは自分で定義することもできますし、AWSが用意したものを使用することも可能です。
AWSが用意するNetwork Access Scopeは以下の4つです(2021年12月13日現在)。
名前 | 説明 |
---|---|
AWS-VPC-Ingress | インターネットゲートウェイ、ピアリング接続、VPCサービスエンドポイント、VPN、トランジットゲートウェイからVPCへの入力パスを特定します。 |
AWS-IGW-Egress | すべてのネットワークインターフェイスからインターネットゲートウェイへの出力パスを特定します。 |
AWS-VPC-Egress | すべてのVPCからインターネットゲートウェイ、ピアリング接続、VPCエンドポイント、VPN、トランジットゲートウェイへの出力パスを特定します。 |
All-IGW-Ingress | インターネットゲートウェイからすべてのネットワークインターフェイスへの入力パスを特定します。 |
使ってみた
実際にAmazon VPC Network Access Analyzerを使ってみました。
VPCコンソール画面の左ペインから「Network Access Analyzer」を選択し、【使用を開始する】を選択します。
AWSが作成したNetwork Access Scopeを使用する
今回は「AWS-VPC-Egress」を選択してみます。
チェックを付けて、【分析】を選択します。
数分待つと…!!出てきました!!!
VPC内のリソースからInternetGatewayへと接続されているパスが出てきましたね。(私の環境にはピアリング接続、VPCエンドポイント、VPN、トランジットゲートウェイが無いためInternetGateway向きの通信のみ出てきています。)
送信元から送信先までのパスが絵付きで表示されているのでとても分かりやすいですね。
リソースIDでリソースを絞ることもできるみたいです。便利かも!!
Network Access Scope の定義を見てみます!JSON形式ですね。
{ "networkInsightsAccessScopeId": "nis-041bcbf44de533545", "matchPaths": [ { "source": { "resourceStatement": { "resources": [], "resourceTypes": [ "AWS::EC2::NetworkInterface" ] } }, "destination": { "resourceStatement": { "resources": [], "resourceTypes": [ "AWS::EC2::InternetGateway", "AWS::EC2::VPCPeeringConnection", "AWS::EC2::VPCEndpoint", "AWS::EC2::TransitGatewayAttachment", "AWS::EC2::VPNGateway" ] } } } ], "excludePaths": [] }
アウトバウンド通信(destinationがAWS::EC2::InternetGateway・AWS::EC2::VPCPeeringConnection・AWS::EC2::VPCEndpoint・AWS::EC2::TransitGatewayAttachment"・AWS::EC2::VPNGatewayとなっているもの)を一致条件(matchPaths)で定義しているのが分かります。
こんな感じのJSONを書けば自分でもネットワーク要件を定義できるということですね~。
料金
評価の一環として分析された Elastic Network Interface (ENI) ごとに 0.002 USD
お安い!!!!最高!!!!!
おわりに
予想以上にブログが長くなってきたので、「自分でNetwork Access Scopeを作成してみよう編」は次回書こうと思います!!
古川智絵 (執筆記事の一覧)
2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁