🌪️
【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