Cloud/AWS

[AWS] Private Subnet에 있는 인스턴스 접속 방법 (feat. AWS SSM)

혬수 2024. 11. 29. 23:08

Bastion Host  vs AWS SSM 📌

카카오테크 부트캠프에서 프로젝트를 진행하던 중,

Private Subnet에 있는 Nginx 인스턴스에 접근해서 설정해줘야하는 문제가 발생했다.

 

 

위: Bastion Host / 아래: AWS SSM

 

보통 이런 경우, Bastion Host 방식을 사용하곤 하는데

간편한 대신 public에 불필요한 인스턴스가 하나 필요하고 보안 이슈가 있다는 단점이 있다.

따라서, AWS SSM 방식으로 진행하였다.

 

 

SSM 구성 방법 📌

  1. IAM Role 생성
    1. 정책: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
  2. EC2 인스턴스에 역할 할당
  3. VPC Endpoint 생성(옵션)
  4. 인스턴스 - 연결 버튼을 통해 EC2 Console에 접속

 

Terraform 코드

# IAM Role for SSM
resource "aws_iam_role" "ssm_role" {
  name               = "dododocs-ssm-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Service = "ec2.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      },
    ]
  })
}

resource "aws_iam_policy_attachment" "ssm_policy_attachment" {
  name       = "ssm-policy-attachment"
  roles      = [aws_iam_role.ssm_role.name]
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_instance_profile" "ssm_instance_profile" {
  name = "dododocs-ssm-instance-profile"
  role = aws_iam_role.ssm_role.name
}

resource "aws_instance" "nginx_instance" {
  ami                    = "ami-0de20b1c8590e09c5"
  instance_type          = "t2.micro"
  subnet_id              = aws_subnet.private_a.id
  key_name               = "dododocs-key"
  vpc_security_group_ids = [aws_security_group.nginx_sg.id]
  associate_public_ip_address = false
  iam_instance_profile   = aws_iam_instance_profile.ssm_instance_profile.name

  depends_on = [aws_security_group.nginx_sg]

  tags = {
    Name = "dododocs-nginx-instance"
  }
}

 

 

VPC Endpoint

  • AWS 서비스와 인터넷을 경유하지 않고 안전하게 통신하기 위해 VPC내에서 생성되는 네트워크 구성 요소
  • VPC 내부의 리소스가 인터넷 게이트웨이, NAT 게이트웨이, 또는 퍼블릭 IP 없이도 AWS 서비스에 접근할 수 있도록 설정

 

 

참조

https://sharplee7.tistory.com/157

https://medium.com/@nagarjun_nagesh/terraform-private-ec2-instance-with-ssm-access-fa7f074965e3