🚷
AWS CDKでデフォルトでアウトバウンドを許可しないSGを使う
はじめに
タイトルの通りです。小ネタです。
AWS CDKに限らず、セキュリティグループをデフォルトの設定で作成すると以下のようになります。
- インバウンド
- ルールなし
- アウトバウンド
- すべてのプログラムとすべての宛先を許可
個人的に、IConnectableがあるAWS CDKではセキュリティグループのアウトバウンド制御がやりやすくなっていると感じており、デフォルト値でallowAllOutbound
がfalseなセキュリティグループを作りました。
以下でいろいろ書いてます。
GitHubリポジトリはこれです。
NoOutboundTrafficSecurityGroup
以下がすべてです。
allowAllOutbound
がfalseになるようにSecurityGroupをextendsしています。
もちろん、もとのSecurityGroupのPropsも利用可能です。
import { SecurityGroup, SecurityGroupProps } from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
export class NoOutboundTrafficSecurityGroup extends SecurityGroup {
constructor(scope: Construct, id: string, props: SecurityGroupProps) {
super(scope, id, {
...props,
allowAllOutbound: false,
});
}
}
使い方
SecurityGroupを作成するのと変わりません。
import { NoOutboundTrafficSecurityGroup } from './utils/default-security-group';
export class MyStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps = {}) {
super(scope, id, props);
const vpc = new Vpc(this, 'Vpc', {
natGateways: 0,
});
const sgA = new NoOutboundTrafficSecurityGroup(this, 'SecurityGroupA', {
vpc: vpc,
});
}
おわりに
デフォルトでアウトバウンドがfalseなセキュリティグループを作りました。
こういった自分たちで使うデフォルト値が異なる設定が作れるのもIaCの良さだなぁ、と思います。
Discussion