
AWS CLIとコンソールでVPC Network Access Analyzerをしてみた。
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Network Access Analyzerとは?
Network Access Analyzerを使用すると、AWS上のリソースへの意図しないネットワークアクセスを特定することができます。Network Access Analyzerを使用して、ネットワークアクセス要件を指定し、指定した要件を満たさない可能性のあるネットワークパスを特定することができます。ネットワークアクセス要件は、ネットワークアクセススコープとして指定することができます。ネットワークアクセススコープは、Findingsの種類を決定します。
ネットワークアクセススコープのフィールド :
- MatchPaths フィールド : MatchPathsフィールドは、分析によって生成されるネットワークパスのタイプを定義します。
 - ExcludePaths フィールド : MatchPathsフィールドは、除外するネットワークパスのタイプを定義します。
 
この記事では、AWS CLIとコンソールでVPC Network Access Analyzerをしてみました。ここで、プライベートインスタンスがNATゲートウェイを経由してのみインターネットゲートウェイに到達できるかどうかを試してみました。

やってみた
AWS サービスの作成
- VPCを作成することも、既存のVPCを利用することもできます。
 - この設定で プライベートEC2インスタンスを作成しておきます。
- AMI : Amazon Linux 2 AMI
 - インスタンスタイプ : t2.micro
 - サブネット:プライベートサブネット
 
 

- Elastic IPを割り当て、パブリックサブネット上にNATゲートウェイを作成しておきます。
 

- プライベートサブネットのルートテーブルに、ターゲットをNATゲートウェイとするルートを追加しておきます。
 
コンソールでネットワークアクセスを分析する
- [Get started]をクリックしてネットワークアクセススコープを作成しておきます。
 - [Get started]をクリックしてネットワークアクセススコープを作成すると、Amazonはデフォルトでアクセススコープ用に作成されます。
 - 以下の画像は、Amazonが作成したネットワークアクセススコープです。
 

- 上記のネットワークアクセススコープを使用するか、独自のスコープを作成することができます。
 - ここで、プライベートインスタンスがNATゲートウェイを経由してのみインターネットゲートウェイに到達できるかどうかを試します。このユースケースの場合、分析には[AWS-IGW-Egress]ネットワークアクセススコープを使用することができます。
 - [Analyze]をクリックして分析を開始します。分析結果では、Findingsが検出されたことを確認できます。
 

Findings

- Findingsのパスを選択すると、ルートの詳細を確認できます。ここで、プライベートインスタンスがNATゲートウェイを介してインターネットゲートウェイに到達できることを確認できます。
 

AWS CLIでネットワークアクセスを分析する
- Network Access Analyzerコマンドは最新バージョンのAWS CLIで使用できるため、AWS CLIを最新バージョンに更新しておきます [Update AWS CLI]。
 
aws --version aws-cli/2.5.6 Python/3.9.11 Darwin/......
- コマンドを使用して、ネットワークアクセススコープを作成しておきます。
- Match Paths Source : Private Subnet Id
 - Match Paths Destination : Internet Gateway Id
 
 
//Create Network Access Scope
aws ec2 create-network-insights-access-scope --match-paths 'Source={ResourceStatement={Resources=subnet-01000000000}}' 'Destination={ResourceStatement={Resources=igw-0700000000000}}' --region us-east-1
//Output
{
    "NetworkInsightsAccessScope": {
        "NetworkInsightsAccessScopeId": "nis-0d000000000001",
        "NetworkInsightsAccessScopeArn": "arn:aws:ec2:us-east-1:xxxxxxxxx:network-insights-access-scope/nis-0d000000000001",
        "CreatedDate": "2022-04-20T02:29:19.059000+00:00",
        "UpdatedDate": "2022-04-20T02:29:19.060000+00:00"
    },
    "NetworkInsightsAccessScopeContent": {
        "NetworkInsightsAccessScopeId": "nis-0d000000000001",
        "MatchPaths": [
            {
                "Source": {
                    "ResourceStatement": {
                        "Resources": [
                            "subnet-01000000000"
                        ]
                    }
                }
            },
            {
                "Destination": {
                    "ResourceStatement": {
                        "Resources": [
                            "igw-0700000000000"
                        ]
                    }
                }
            }
        ]
    }
}
- [NetworkInsightsAccessScopeId]を使用してスコープを分析しておきます。
 
//Analyze Network Access Scope
aws ec2 start-network-insights-access-scope-analysis --network-insights-access-scope-id nis-0d000000000001 --region us-east-1
//Output
{
    "NetworkInsightsAccessScopeAnalysis": {
        "NetworkInsightsAccessScopeAnalysisId": "nisa-0d000000000001",
        "NetworkInsightsAccessScopeAnalysisArn": "arn:aws:ec2:us-east-1:xxxxxxxx:network-insights-access-scope-analysis/nisa-0d000000000001",
        "NetworkInsightsAccessScopeId": "nis-0d000000000001",
        "Status": "running",
        "StartDate": "2022-04-20T02:32:41.525000+00:00",
        "AnalyzedEniCount": 0
    }
}
- 次のコマンドを使用して、分析の結果をみることができます。
 
//Describe the Network Access Scope analysis 
aws ec2 describe-network-insights-access-scope-analyses --network-insights-access-scope-analysis-id nisa-0d000000000001 --region us-east-1
//Output
{
    "NetworkInsightsAccessScopeAnalyses": [
        {
            "NetworkInsightsAccessScopeAnalysisId": "nisa-0d000000000001",
            "NetworkInsightsAccessScopeAnalysisArn": "arn:aws:ec2:us-east-1:xxxxxxxxxx:network-insights-access-scope-analysis/nisa-0d000000000001",
            "NetworkInsightsAccessScopeId": "nis-0d000000000001",
            "Status": "succeeded",
            "WarningMessage": "...",
            "StartDate": "2022-04-20T02:32:41.525000+00:00",
            "FindingsFound": "true",
            "AnalyzedEniCount": 2,
            "Tags": []
        }
    ]
}
- [ "FindingsFound": "true"] : Findingsが検出されたことを示します。
 - [AnalyzedEniCount] : 検出された分析の数を示します。
 - 次のコマンドを使用して、Findingsのルートの詳細を確認できます。
 
//Get the Network Access Scope analysis 
aws ec2 get-network-insights-access-scope-analysis-findings --network-insights-access-scope-analysis-id nisa-0d000000000001 --max-results 1 --region us-east-1
//Output
{
    "NetworkInsightsAccessScopeAnalysisId": "nisa-0d000000000001",
    "AnalysisStatus": "succeeded",
    "AnalysisFindings": [
        {
            "NetworkInsightsAccessScopeAnalysisId": "nisa-0d000000000001",
            "NetworkInsightsAccessScopeId": "nis-0d000000000001",
            "FindingId": "AnalysisFinding-1",
            "FindingComponents": [
                {
                    "SequenceNumber": 1,
       	             ....... [eni]
                        "Name": "private-instance"
                     ...........      
                },
                {
                    "SequenceNumber": 2,
                    ........
                        "Name": "private-instance-security-group"
                    ........
                },
                {
                    "SequenceNumber": 3,
                    "AclRule"
                    .........
                },
                {
                    "SequenceNumber": 4,
                    ..........
                        "Name": "Private Route Table"
                 },
                {
                    "SequenceNumber": 5,
                    "AclRule"
	             .........
                },
                {
                    "SequenceNumber": 6,
                    "AttachedTo": {
                     .......  [eni]..........
                 },
                {
                    "SequenceNumber": 7,
                    "Component": {
                        "Id": "nat-000000000",
                        ..........
                },
                {
                    "SequenceNumber": 8,
                    "AttachedTo": {
                      ........  [eni]..........
                },
                {
                    "SequenceNumber": 9,
                    "AclRule": 
                    ..........
                },
                {
                    "SequenceNumber": 10,
                    "Component": {
                     ........
                        "Name": "Public Route Table"
                     .........
                },
                {
                    "SequenceNumber": 11,
                    "Component": {
                       ...........
                        "Name": "VPC Internet Gateway"
                      ............
	 }
                ],
    "NextToken": "........."
}
- 上記の出力から、プライベートインスタンスがNATゲートウェイを介してインターネットゲートウェイに到達できることを確認できます。
 
スコープの削除
- スコープを削除する前に、すべての分析を削除する必要があります。
 - 以下のコマンドを使用して、分析とスコープを削除しておきます。
 
//Delete Analysis
aws ec2 delete-network-insights-access-scope-analysis --network-insights-access-scope-analysis-id nisa-0d000000000001 --region us-east-1
//Output
{
    "NetworkInsightsAccessScopeAnalysisId": "nisa-0d000000000001"
}
//Delete Scope
aws ec2 delete-network-insights-access-scope --network-insights-access-scope-id nis-0d000000000001 --region us-east-1                     
//Output
{
    "NetworkInsightsAccessScopeId": "nis-0d000000000001"
}
まとめ
この記事では、AWS CLIとコンソールでVPC Network Access Analyzerをしてみました。Network Access Analyzerを使用して、ネットワークセキュリティを理解、検証、および改善できます。Network Access Analyzerを使用して、AWS上のネットワークが特定のコンプライアンス要件を満たしていることを示すこともできます。
Reference : Network Access Analyzer using the AWS CLI






