コンテンツにスキップ

VPC Block Public Access

本ページは手順書の段階です。Organizations で直接適用した場合の finding への影響は今後検証し、結果に基づいて更新します。
本ページの情報は 2026 年 4 月時点のものです。

概要

VPC Block Public Access(BPA)は EC2 の宣言型ポリシー の属性の一つで、VPC / サブネットの IGW 経由のインターネットアクセスを組織全体でブロックする。

Control Tower 予防コントロールとの関係

CT.EC2.PV.8 は内部的に本属性の宣言型ポリシーを使用している。Organizations で直接適用する場合は、モードや Exclusions(除外)をより柔軟に設定できる。Control Tower を使わない環境では本ページの手順で Organizations ポリシーを直接設定する。

モード

モード効果
offVPC BPA 無効
block-ingressインバウンドのインターネットトラフィックをブロック(NAT Gateway / Egress-only IGW 経由のアウトバウンドは許可)
block-bidirectionalIGW / Egress-only IGW 経由の全トラフィックをブロック

Exclusions(除外)

  • VPC 単位またはサブネット単位で除外を設定可能
  • ポリシーで exclusions_allowedenabled / disabled に設定
  • 除外の作成はアカウント側で行う(ポリシー内では除外の作成はできない)

ポリシーの形式

{
    "ec2_attributes": {
        "vpc_block_public_access": {
            "internet_gateway_block": {
                "mode": {
                    "@@assign": "block_bidirectional"
                },
                "exclusions_allowed": {
                    "@@assign": "disabled"
                }
            }
        }
    }
}

ポリシーの content 値はアンダースコア区切り(block_bidirectional / block_ingress)。API レスポンスはハイフン区切り(block-bidirectional)。

VPC BPA はパブリック IP の付与や IGW 経由のインターネットアクセスが意図した設計である可能性もあり、実環境への投入時には影響評価が必要である。

Security Hub finding への影響

VPC BPA はインターネット通信をブロックするが、パブリック IP の付与自体や起動テンプレート・起動設定の設定値は変更しない。そのため、VPC BPA を有効化しても以下のコントロールの finding はいずれも変化しないと想定される。

コントロール評価方式宣言型ポリシーの影響(想定)
EC2.9設定ベース(パブリック IP の有無)FAILED のまま変化しない(パブリック IP の付与自体は止めないため)
EC2.25設定ベース(起動テンプレートの設定値)FAILED のまま変化しない(設定値自体は変更しないため)
Autoscaling.5設定ベース(起動設定の設定値)FAILED のまま変化しない(設定値自体は変更しないため)。ただし当アカウントでは起動設定の作成が不可のため検証不可
ECS.2設定ベース(パブリック IP 自動割り当て)未検証
ECS.16設定ベース(パブリック IP 自動割り当て)未検証
EMR.1設定ベース(パブリック IP の有無)未検証
RDS.46設定ベース(パブリックサブネット配置)未検証
SageMaker.1設定ベース(インターネットアクセス設定)未検証

結果

検証後に記載する。

検証の流れ

    flowchart LR
    A[1. ポリシー作成・アタッチ] --> B[2. EC2.9 / EC2.25<br>の FAILED 状態を作成]
    B --> C[3. FAILED 確認]
    C --> D[4. ポリシーを再アタッチ]
    D --> E[5. FAILED のまま<br>変化しないことを確認]
    E --> F[6. デタッチ・削除]
    F --> G[7. クリーンアップ]
  

--profile 指定がない場合は Workload アカウントで実行する。export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。ポリシーの作成・アタッチ・デタッチ・削除は --profile Master(Organizations 管理アカウント)で実行する。

1. ポリシー作成・アタッチ

宣言型ポリシーの作成(block-bidirectional)

aws organizations create-policy \
  --name vpc-bpa-test \
  --type DECLARATIVE_POLICY_EC2 \
  --content '{
    "ec2_attributes": {
      "vpc_block_public_access": {
        "internet_gateway_block": {
          "mode": {
            "@@assign": "block_bidirectional"
          },
          "exclusions_allowed": {
            "@@assign": "disabled"
          }
        }
      }
    }
  }' \
  --description "VPC BPA test" \
  --query 'Policy.PolicySummary.{Id:Id,Name:Name,Type:Type}' \
  --region ap-northeast-1 --profile Master
{
    "Id": "<ポリシー ID>",
    "Name": "vpc-bpa-test",
    "Type": "DECLARATIVE_POLICY_EC2"
}

OU にアタッチ

aws organizations attach-policy \
  --policy-id <ポリシー ID> \
  --target-id <OU ID> \
  --region ap-northeast-1 --profile Master
(出力なし)

VPC BPA が有効になったことを確認

aws ec2 describe-vpc-block-public-access-options \
  --region ap-northeast-1
{
    "VpcBlockPublicAccessOptions": {
        "InternetGatewayBlockMode": "block-bidirectional",
        "State": "default-state",
        "ManagedBy": "declarative-policy"
    }
}

2. EC2.9 / EC2.25 の FAILED 状態を作成

VPC BPA が有効な状態でも、パブリック IP 付きインスタンスの起動やパブリック IP 割り当て設定の起動テンプレート作成は可能(VPC BPA はインターネット通信をブロックするだけで、設定自体は止めない)。

パブリック IP 付きインスタンスの起動(EC2.9)

aws ec2 describe-images \
  --owners amazon \
  --filters Name=name,Values=al2023-ami-2023*-x86_64 Name=state,Values=available \
  --query 'sort_by(Images,&CreationDate)[-1].ImageId' \
  --output text \
  --region ap-northeast-1
<AMI ID>
aws ec2 describe-subnets \
  --filters Name=default-for-az,Values=true \
  --query 'Subnets[0].SubnetId' \
  --output text \
  --region ap-northeast-1
<サブネット ID>
aws ec2 run-instances \
  --image-id <AMI ID> \
  --instance-type t3.micro \
  --subnet-id <サブネット ID> \
  --associate-public-ip-address \
  --query 'Instances[].{InstanceId:InstanceId,State:State.Name}' \
  --region ap-northeast-1
[
    {
        "InstanceId": "<インスタンス ID>",
        "State": "pending"
    }
]

パブリック IP 割り当て設定の起動テンプレート作成(EC2.25)

aws ec2 create-launch-template \
  --launch-template-name cspm-vpc-bpa-test \
  --launch-template-data '{
    "NetworkInterfaces": [{
      "DeviceIndex": 0,
      "AssociatePublicIpAddress": true,
      "SubnetId": "<サブネット ID>"
    }],
    "ImageId": "<AMI ID>",
    "InstanceType": "t3.micro"
  }' \
  --query 'LaunchTemplate.{Id:LaunchTemplateId,Name:LaunchTemplateName}' \
  --region ap-northeast-1
{
    "Id": "<起動テンプレート ID>",
    "Name": "cspm-vpc-bpa-test"
}

3. FAILED 確認

EC2.9

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ec2-instance-no-public-ip-<サフィックス> \
  --region ap-northeast-1
(出力なし)
aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ec2-instance-no-public-ip-<サフィックス> \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<インスタンス ID>",
        "ComplianceType": "NON_COMPLIANT"
    }
]

EC2.25

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ec2-launch-template-public-ip-disabled-<サフィックス> \
  --region ap-northeast-1
(出力なし)
aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ec2-launch-template-public-ip-disabled-<サフィックス> \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<起動テンプレート ID>",
        "ComplianceType": "NON_COMPLIANT"
    }
]

4. VPC BPA が有効な状態で FAILED のまま変化しないことを確認

VPC BPA は既にアタッチ済み(ステップ 1)。Config ルールを再トリガーして、finding が変化しないことを確認する。

EC2.9

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ec2-instance-no-public-ip-<サフィックス> \
  --region ap-northeast-1
(出力なし)
aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ec2-instance-no-public-ip-<サフィックス> \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<インスタンス ID>",
        "ComplianceType": "NON_COMPLIANT"
    }
]

EC2.25

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ec2-launch-template-public-ip-disabled-<サフィックス> \
  --region ap-northeast-1
(出力なし)
aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ec2-launch-template-public-ip-disabled-<サフィックス> \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<起動テンプレート ID>",
        "ComplianceType": "NON_COMPLIANT"
    }
]

VPC BPA が有効でも、パブリック IP の付与や起動テンプレートの設定値自体は変更されないため、finding は NON_COMPLIANT のまま変化しない。

5. デタッチ・削除

aws organizations detach-policy \
  --policy-id <ポリシー ID> \
  --target-id <OU ID> \
  --region ap-northeast-1 --profile Master
(出力なし)
aws organizations delete-policy \
  --policy-id <ポリシー ID> \
  --region ap-northeast-1 --profile Master
(出力なし)

6. クリーンアップ

インスタンス終了

aws ec2 terminate-instances \
  --instance-ids <インスタンス ID> \
  --query 'TerminatingInstances[].{InstanceId:InstanceId,CurrentState:CurrentState.Name}' \
  --region ap-northeast-1
[
    {
        "InstanceId": "<インスタンス ID>",
        "CurrentState": "shutting-down"
    }
]

起動テンプレート削除

aws ec2 delete-launch-template \
  --launch-template-id <起動テンプレート ID> \
  --query 'LaunchTemplate.{Id:LaunchTemplateId,Name:LaunchTemplateName}' \
  --region ap-northeast-1
{
    "Id": "<起動テンプレート ID>",
    "Name": "cspm-vpc-bpa-test"
}

Amazonアソシエイトリンク