VPC Block Public Access
概要
VPC Block Public Access(BPA)は EC2 の宣言型ポリシー の属性の一つで、VPC / サブネットの IGW 経由のインターネットアクセスを組織全体でブロックする。
Control Tower 予防コントロールとの関係
CT.EC2.PV.8 は内部的に本属性の宣言型ポリシーを使用している。Organizations で直接適用する場合は、モードや Exclusions(除外)をより柔軟に設定できる。Control Tower を使わない環境では本ページの手順で Organizations ポリシーを直接設定する。
モード
| モード | 効果 |
|---|---|
off | VPC BPA 無効 |
block-ingress | インバウンドのインターネットトラフィックをブロック(NAT Gateway / Egress-only IGW 経由のアウトバウンドは許可) |
block-bidirectional | IGW / Egress-only IGW 経由の全トラフィックをブロック |
Exclusions(除外)
- VPC 単位またはサブネット単位で除外を設定可能
- ポリシーで
exclusions_allowedをenabled/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)。
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"
}