🚷

AWS CDKでデフォルトでアウトバウンドを許可しないSGを使う

2024/06/27に公開

はじめに

タイトルの通りです。小ネタです。

AWS CDKに限らず、セキュリティグループをデフォルトの設定で作成すると以下のようになります。

  • インバウンド
    • ルールなし
  • アウトバウンド
    • すべてのプログラムとすべての宛先を許可

個人的に、IConnectableがあるAWS CDKではセキュリティグループのアウトバウンド制御がやりやすくなっていると感じており、デフォルト値でallowAllOutboundがfalseなセキュリティグループを作りました。

以下でいろいろ書いてます。
https://zenn.dev/lea/articles/706e01b60d7b46

GitHubリポジトリはこれです。
https://github.com/raihalea/cdk-no-outbound-security-group/tree/main?tab=readme-ov-file

NoOutboundTrafficSecurityGroup

以下がすべてです。
allowAllOutboundがfalseになるようにSecurityGroupをextendsしています。

GitHub上の該当箇所

もちろん、もとの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を作成するのと変わりません。

GitHub上のmain.ts

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