カピバラ好きなエンジニアブログ

ITのこととか趣味のカメラのことなどを赴くままに書いていきます。カピバラの可愛さこそ至高。

CFnでSecurityGroupを作成する

自分の備忘と動確のために記事にしておきます。

Cloudformationを使用してAWSのSecurityGroupを作成します。
docs.aws.amazon.com


この記事で作成したCFnは以下に格納しています。
github.com

実施作業

準備

元となるCFnを作成します。
インバウンドだけを設定した場合、アウトバウントはどう設定されるのか見てみます。

AWSTemplateFormatVersion: "2010-09-09"
Description: >
  Create SecurityGroup

Resources:
  TestSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: test-sg-01
      GroupName: test-sg-01
      SecurityGroupIngress: 
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 10.0.0.0/8
      VpcId: vpc-0000000000000000


デプロイ実行

以下のコマンドを実行して、Cloudformationを実行します。

$ aws cloudformation package --template test_sg.yaml --s3-bucket test-tmp-20210301 --output-template-file test-sg-packaged.yaml
$ aws cloudformation deploy --template-file test-sg-packaged.yaml  --stack-name test-sg-stack

SecurityGroupが作成されています。
f:id:live-your-life-dd18:20210315211103p:plain

ルール確認

  • インバウンドルール

CFnで設定したインバウンドルールが想定通りに設定されています。
f:id:live-your-life-dd18:20210315211158p:plain

  • アウトバウントルール

CFnには何も設定していなかったので、デフォルト値が設定されていました。
f:id:live-your-life-dd18:20210315211228p:plain

ルール変更(インバウンドルール→アウトバウントルール)

ではCFnのインバウンドルールの指定をアウトバウントルールに変更するとどうなるでしょうか。

AWSTemplateFormatVersion: "2010-09-09"
Description: >
  Create SecurityGroup

Resources:
  TestSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: test-sg-01
      GroupName: test-sg-01
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 10.0.0.0/8
      VpcId: vpc-0000000000000000


ルール確認(インバウンドルール未設定時)

  • インバウンドルール

CFnにインバウンドルールがされていない場合、作成されたSecurityGroupにはインバウンドルールが設定されません。
f:id:live-your-life-dd18:20210315211651p:plain

  • アウトバウントルール

アウトバウントルールには想定したものが設定されています。
f:id:live-your-life-dd18:20210315211724p:plain


以下のドキュメントにはアウトバウントのルールにはデフォルトで作成されると言及がありますが、インバウンドルールについては記載がありませんでした。
docs.aws.amazon.com

VPCセキュリティグループを指定すると、Amazon EC2は、すべてのポートとIPプロトコルで任意の場所への出力トラフィックを許可するデフォルトの出力ルールを作成します。デフォルトのルールは、1つ以上の出力ルールを指定した場合にのみ削除されます。デフォルトのルールを削除し、出力トラフィックをローカルホスト(127.0.0.1 / 32)のみに制限する場合は、次の例を使用します。


感想及び所感

設定しないときに何がデフォルトで設定されるのかを確認したかったので試してみました。
インバウンドルールは未設定だと作成されないので設定忘れしないように注意が必要です。