Firewall

AWS Firewall

AWSのFirewallは2種類

  • Subnet単位で働くネットワークACL
  • インスタンスレベルのSecurity Group

Security Group

  • OSに到達する前に、ネットワークレベルでパケットをフィルタリング可能
  • EC2やRDSなどの様々なリソースに紐付けることが可能

Security groupの作成

resource "aws_security_group" "example" {
  name   = "example"
  vpc_id = aws_vpc.example.id <========== VPCを指定
}

インバウンドのSecurity Groupのルールの作成

resource "aws_security_group_rule" "ingress_example" {
  type              = "ingress" <============ ingressの場合はインバウンド
  from_port         = "80" <===== 80番の許可
  to_port           = "80" <===== 80番の許可
  protocol          = "tcp" <==== HTTPの許可
  cidr_blocks       = ["0.0.0.0/0"]  <=========== 通信を許可するCIDRブロック。0.0.0.0/0なので全部
  security_group_id = aws_security_group.example.id
}

アウトバウンドのSecurity Groupのルール作成

resource "aws_security_group_rule" "egress_example" {
  type              = "egress"  <============ egressの場合はインバウンド
  from_port         = 0
  to_port           = 0
  protocol          = "-1" <============ -1にすると全トラフィック。その場合はfrom_portとto_portを両方0にする
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.example.id
}

セキュリティグループのモジュール可

variable "name" {}
variable "vpc_id" {}
variable "port" {}

variable "cidr_blocks" {
  type = list(string) <================ 型を明示的に指定している。指定されない場合はany
}

resource "aws_security_group" "default" {
  name   = var.name
  vpc_id = var.vpc_id
}

resource "aws_security_group_rule" "ingress" {
  type              = "ingress"
  from_port         = var.port
  to_port           = var.port
  protocol          = "tcp"
  cidr_blocks       = var.cidr_blocks
  security_group_id = aws_security_group.default.id
}

resource "aws_security_group_rule" "egress" {
  type              = "egress"
  from_port         = 0
  to_port           = 0
  protocol          = "-1"
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.default.id
}

output "security_group_id" {
  value = aws_security_group.default.id
}

module "example_sg" {
  source      = "./security_group"
  name        = "module-sg"
  vpc_id      = aws_vpc.example.id
  port        = 80
  cidr_blocks = ["0.0.0.0/0"]
}