Terraform module to create a Security Group with ingress and egress rules in one go.
| Name | Description | Type | Default | Required | 
|---|---|---|---|---|
| description | Description of the Security Group. | string | null | no | 
| egress_rules | Egress rules to add to the Security Group. See examples for usage. | list(object({ | [] | no | 
| ingress_rules | Ingress rules to add to the Security Group. See examples for usage. | list(object({ | [] | no | 
| name | Name of the Security Group and Prefix. | string | n/a | yes | 
| name_prefix | Whether to use the name as prefix or regular name. | bool | true | no | 
| revoke_rules_on_delete | Instruct Terraform to revoke all of the Security Groups attached ingress and egress rules before deleting the rule itself. This is normally not needed. | bool | false | no | 
| tags | Tags to add to the Security Group. | map(any) | {} | no | 
| vpc_id | The VPC ID where resources are created. | string | n/a | yes | 
| Name | Description | 
|---|---|
| security_group_id | Security Group ID | 
| Name | Version | 
|---|---|
| aws | >= 4.36 | 
- resource.aws_security_group.main (main.tf#6)
- resource.aws_security_group_rule.main_egress (main.tf#35)
- resource.aws_security_group_rule.main_ingress (main.tf#18)
module "vpc" {
  source  = "registry.terraform.io/terraform-aws-modules/vpc/aws"
  version = "~> 5.0.0"
  name = "${var.name}-main"
  cidr = "10.100.0.0/16"
}
module "source_security_group" {
  source = "../../"
  name   = var.name
  vpc_id = module.vpc.vpc_id
}
resource "aws_ec2_managed_prefix_list" "test" {
  name           = "All VPC CIDR-s"
  address_family = "IPv4"
  max_entries    = 5
  entry {
    cidr        = "10.100.0.0/16"
    description = "Primary"
  }
}
module "full" {
  source = "../../"
  vpc_id      = module.vpc.vpc_id
  name        = var.name
  description = "Testing Terraform full example"
  ingress_rules = [
    # To/From ports are the same
    {
      port        = 3306
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    },
    # Different To/From ports
    {
      from_port   = 3306
      to_port     = 54321
      protocol    = "tcp"
      cidr_blocks = ["127.0.0.0/8", "10.0.0.0/8"]
    },
    # Allow other SG instead of CIDR
    {
      port                     = 3306
      protocol                 = "udp"
      source_security_group_id = module.source_security_group.security_group_id
    },
    # Using self
    {
      port     = 3306
      protocol = "udp"
      self     = true
    }
  ]
  egress_rules = [
    # To/From ports are the same
    {
      port        = 3306
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    },
    # Different To/From ports
    {
      from_port   = 3306
      to_port     = 54321
      protocol    = "tcp"
      cidr_blocks = ["127.0.0.0/8", "10.0.0.0/8"]
    },
    # Allow other SG instead of CIDR
    {
      port                     = 3306
      protocol                 = "udp"
      source_security_group_id = module.source_security_group.security_group_id
    },
    # Using self
    {
      port     = 3306
      protocol = "udp"
      self     = true
    },
    # Using prefix list
    {
      port            = 443
      protocol        = "tcp"
      prefix_list_ids = [aws_ec2_managed_prefix_list.test.id]
    }
  ]
}