🌪️

【AWS】TerraformとCFnで違うセキュリティグループのデフォルト挙動

に公開

結論

  • Terraformでインバウンドルールのみのセキュリティグループを作ると、アウトバウンドは全て拒否になる(アウトバウンドルールが作成されない)
  • CloudFormationでインバウンドルールのみのセキュリティグループを作ると、アウトバウンドは全て許可になる(デフォルトのアウトバウンドルールが作成される)

サンプルコード

TerraformとCloudFormationそれぞれインバウンドルールのみのSGを作成する

Terraform

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 6.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

# リージョン情報の取得
data "aws_region" "current" {}

# VPC
resource "aws_vpc" "this" {
  cidr_block = "10.0.0.0/24"
  region     = data.aws_region.current.id
  tags = {Name = "sample-vpc"}
}

# セキュリティグループ
resource "aws_security_group" "only_ingress" {
  name   = "sample-sg-terraform"
  vpc_id = aws_vpc.this.id
}

# インバウンドルール
resource "aws_vpc_security_group_ingress_rule" "allow_https" {
  from_port         = 443
  to_port           = 443
  ip_protocol       = "tcp"
  cidr_ipv4         = aws_vpc.this.cidr_block
  security_group_id = aws_security_group.only_ingress.id
}

CloudFormation

AWSTemplateFormatVersion: "2010-09-09"

Resources:
  # VPC
  SampleVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.1.0/24
      Tags:
        - Key: Name
          Value: sample-vpc-cfn

  # セキュリティグループ
  SmapleSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow only HTTPS
      GroupName: sample-sg-cfn
      VpcId: !Ref SampleVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0

確認

Terraform

CloudFormation

おわり

これまでCloudFormationばかり使っており、アウトバウンドルールを意識することはあまりありませんでした。
Terraformでも何も考えずにインバウンドルールだけを定義したところ、アウトバウンドルールが作成されず「なんで??」となりました。
備忘として残しておきます。

Discussion