AWS CDK で VPC Block Public Access を設定する
こんにちは、製造ビジネステクノロジー部の若槻です。
Amazon VPC Block Public Access (BPA) を使用すると、リージョン内のすべての VPC に対するインターネットアクセスをアカウントレベルで制御できます。Internet Gateway や Egress-only Internet Gateway を介したインターネットとの通信を、インバウンド、アウトバウンド、または双方向でブロックすることが可能です。
VPC Block Public Access は 2024 年 11 月に Amazon VPC の新機能としてリリースされました。この機能により、組織全体のセキュリティポスチャを強化し、意図しないインターネット接続のリスクを軽減することができます。
VPC Block Public Access を設定しない場合は Security Hub で下記の MEDIUM レベルのコンプライアンス違反が検出されるため、有効化することが推奨されています。
- [EC2.172] EC2 VPC ブロックパブリックアクセス設定は、インターネットゲートウェイトラフィックをブロックする必要があります
今回は、VPC Block Public Access の設定を AWS CDK で行う方法を確認してみました。
実装
AWS CDK による VPC Block Public Access の設定は CfnVPCBlockPublicAccessOptions L1 コンストラクトクラスを使用します。L2 コンストラクトは提供されていないため、CloudFormation のリソースを直接操作する必要があります。
設定可能なプロパティは internetGatewayBlockMode
のみで、以下の 2 つのブロックモードが選択可能です。
block-bidirectional
: 双方向のトラフィックをブロックblock-ingress
: インバウンドトラフィックのみをブロック
双方向のトラフィックをブロックする
まずブロックモード block-bidirectional
を指定して VPC Block Public Access を有効化してみます。
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
export class VpcBlockPublicAccessConstruct extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// VPC Block Public Access の設定
new ec2.CfnVPCBlockPublicAccessOptions(this, "VpcBlockPublicAccess", {
internetGatewayBlockMode: "block-bidirectional", // 双方向のトラフィックをブロック
});
}
}
上記をデプロイして VPC ダッシュボードを確認すると、双方向のトラフィックをブロックするモードで Block Public Access が有効化されていることが確認できます。
また「Public access is restricted」という警告メッセージが表示されていますが、これは警告というよりも、むしろ設定が正しく機能していることを示す通知です。
インバウンドトラフィックのみをブロックする
次に、ブロックモード block-ingress
を指定して VPC Block Public Access を有効化してみます。
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
export class VpcBlockPublicAccessConstruct extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// VPC Block Public Access の設定
new ec2.CfnVPCBlockPublicAccessOptions(this, "VpcBlockPublicAccess", {
internetGatewayBlockMode: "block-ingress", // インバウンドトラフィックのみをブロック
});
}
}
cdk diff コマンドで internetGatewayBlockMode
変更前後の差分を確認します。
Resources
[~] AWS::EC2::VPCBlockPublicAccessOptions VpcBlockPublicAccess/VpcBlockPublicAccess VpcBlockPublicAccess2C621A3D
└─ [~] InternetGatewayBlockMode
├─ [-] block-bidirectional
└─ [+] block-ingress
上記変更を CDK デプロイします。VPC Block Public Access の初回設定時に比べてすぐにデプロイが完了しました。
VPC ダッシュボードを確認すると、ステータスが「Updating settings」となっています。L1 コンストラクトだとこういう場合もあるようです。
1,2分待つと、インバウンドトラフィックのみをブロックするモードで Block Public Access が有効化されていることが確認できました。
おわりに
AWS CDK で VPC Block Public Access を設定する方法を確認してみました。
ちなみに今回はアカウント全体設定のみを紹介しましたが、CfnVPCBlockPublicAccessExclusion を使用することで、特定の VPC やサブネットをブロック設定から除外することも可能です。こちらは次回以降に紹介したいと思います。
以上