보안그룹 설정하기(feat.bastion)

hyuckhoon.ko·2021년 1월 7일
0

What I learned in first year

목록 보기
46/146

AWS ec2 인스턴스는
(iam 유저의 역할을 부여할 때와 마찬가지로)
최소한의 네트워크 접근만 허용해야 한다.

물론 보안상의 이유때문이다.

"Best practice to always give the minimal access that is required for a service."



1. 보안그룹 생성


보안그룹을 설정하자.

  • 인바운드 규칙은 port 22 SSH,
  • 아웃바운드 규칙은 port 443(HTTPS), 80(HTTP), 5432(DB)



주의사항

ingress의 cidr_blocks를 모든 ip로 셋팅했다.

하지만 회사의 static IP(고정 ip)로 지정하는 것이

보안상 권장된다.

아래의 강의 샘플 코드는 모든 ip로 셋팅됐다.


  • bastion.tf 파일 수정

resource "aws_security_group" "bastion" {
  description = "Control bastion inbound and outbound access"
  name = "${local.prefix}-bastion"
  vpc_id = aws_vpc.main.id

  ingress {
    protocol = "tcp"
    from_port = 22
    to_port = 22
    cidr_blocks = ["0.0.0.0/0"]
  } 
  egress {
    protocol = "tcp"
    from_port = 443
    to_port = 443
    cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
    protocol = "tcp"
    from_port = 80
    to_port = 80
    cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
    protocol = "tcp"
    from_port = 5432
    to_port = 5432
    cidr_blocks = [
      aws_subnet.private_a.cidr_block,
      aws_subnet.private_b.cidr_block
    ]
  }
  tags = local.common_tags
}



아웃바운드 규칙을 ["0.0.0.0/0"]으로 설정하는 것은 권장되지 않는다.

만약 bastion 인스턴스가 해킹됐을 때,
우리가 모르는 다른 서버와의 접촉으로 2, 3차 파장을 초래하기 때문이다.






2. EC2 인스턴스에 적용

  • bastion.tf 재수정

(생략)


resource "aws_instance" "bastion" {
  ami                  = data.aws_ami.amazon_linux.id
  user_data            = file("./templates/bastion/user-data.sh")
  instance_type        = "t2.micro"
  iam_instance_profile = aws_iam_instance_profile.bastion.name
  key_name             = var.bastion_key_name
  subnet_id            = aws_subnet.public_a.id
  vpc_security_group_ids = [
    aws_security_group.bastion.id
  ]
  
  tags = merge(
    local.common_tags,
    map("Name", "${local.prefix}-bastion")
  )
}






3. 데이터베이스에 적용

  • database.tf 재수정

(생략)


resource "aws_security_group" "rds" {
  description = "Allow access to the RDS database instance"
  name        = "${local.prefix}-rds-inbound-access"
  vpc_id      = aws_vpc.main.id

  ingress {
    protocol  = "tcp"
    from_port = 5432
    to_port   = 5432
    
    security_groups = [
        aws_security_group.bastion.id
    ]
  }
  tags = local.common_tags
}

0개의 댓글