AWS Bastion Server 구축: 안전한 서버 관리와 SSH 접근 가이드

Ma_Seokjae·2025년 1월 18일
0
post-thumbnail

이번 포스팅에서는 AWS 퍼블릭 클라우드 환경에서 Bastion Server를 생성하고, Mac 환경에서 VSCode SSH Remote를 활용해 서버에 접속하는 과정을 단계별로 설명합니다. 차근차근 따라가며 이해하는 시간을 가져봅시다.


목차


Bastion Server란 무엇이며, 왜 필요한가?

Bastion Server는 AWS와 같은 클라우드 환경에서 프라이빗 서브넷의 리소스에 대한 보안 관리를 강화하기 위해 사용하는 중계 서버입니다.

일반적으로 Bastion Server퍼블릭 서브넷에 배치되어 외부에서 접근 가능한 유일한 서버로 동작하며, 이를 통해 프라이빗 서브넷에 있는 리소스에 SSH를 통해 안전하게 접속할 수 있습니다.

Bastion Server를 사용하는 이유

  • 보안 강화: 모든 외부 접근을 Bastion Server로 제한하여 네트워크 보안을 강화합니다.
  • 프라이빗 리소스 관리: 인터넷에 노출되지 않은 데이터베이스나 애플리케이션 서버에 안전하게 접근할 수 있습니다.
  • 관리 용이성: Bastion Server를 통해 SSH 키 관리 및 접속 기록을 통합적으로 관리할 수 있습니다.

Bastion Server 생성

1. EC2 인스턴스 생성

  1. AWS Management Console에서 EC2 서비스로 이동합니다.

  2. 인스턴스 시작 버튼을 클릭하여 새 인스턴스를 생성합니다.

  3. 인스턴스 설정:

    • 이름: bastion-server-01

    • AMI: Amazon Linux 2023

    • 인스턴스 유형: t3.micro

    • 키 페어: 새 키 페어 생성

      • 이름: bastion-key

      • .pem 파일을 로컬에 다운로드하여 안전하게 보관합니다.

        다운로드 된 pem키 잘 보관하기! (절대 삭제/수정 X)

    • 네트워크:

      • VPC: vpc-main-network
      • 서브넷: subnet-public-a
      • 퍼블릭 IP: 자동 할당 활성화 편집 클릭 설정 완료 모습
    • 보안 그룹:

      • 새 보안 그룹 생성:
        • 이름: segp-bastion-access
        • 규칙 1: SSH (22) - 소스: 내 IP
        • 규칙 2: HTTP (80) - 소스: 내 IP
  4. 설정 완료 후 인스턴스 시작을 클릭합니다.

EC2 인스턴스 생성: 왜 필요한가?

AWS에서 Bastion Server는 EC2 인스턴스로 생성됩니다.

EC2 인스턴스는 AWS에서 가상 서버를 제공하는 서비스로, Bastion Server로 사용될 인스턴스를 생성하는 것이 첫 단계입니다.

이 단계의 주요 목적:

  • Bastion Server로 사용할 서버를 생성합니다.
  • 적절한 AMI와 인스턴스 유형을 선택하여 용도에 맞는 서버 환경을 준비합니다.

보안 그룹 생성: 왜 필요한가?

보안 그룹(Security Group)은 AWS에서 가상 방화벽 역할을 수행하며, 인스턴스의 네트워크 트래픽을 제어합니다. Bastion Server를 안전하게 사용하려면 적절한 보안 규칙을 설정하여 외부로부터의 불필요한 접근을 차단해야 합니다.

이 단계의 주요 목적:

  • SSH (22번 포트): Bastion Server는 다른 서버에 접근하기 위한 중계 역할을 하기 때문에, SSH 프로토콜을 통해 안전하게 연결해야 합니다. 따라서 SSH 연결을 허용하는 규칙을 추가합니다.
  • HTTP (80번 포트): Bastion Server에서 웹 애플리케이션이나 HTTP 요청 테스트가 필요할 경우를 대비해 설정합니다.
  • 소스 IP를 사용자 IP로 제한:
    • 보안 그룹에서 SSH와 HTTP 접근을 "내 IP"로만 제한한 이유는, Bastion Server에 접근할 수 있는 IP를 사용자의 네트워크로 한정함으로써 외부의 무단 접근을 방지하기 위함입니다.
    • 이렇게 설정하면, 해당 IP에서만 Bastion Server로의 접근이 가능하여 보안성이 강화됩니다.

추가 설명:

  • AWS 보안 그룹은 기본적으로 모든 인바운드 트래픽을 차단하며, 명시적으로 허용한 규칙만 적용됩니다.
  • 규칙에서 허용한 포트와 IP 범위를 최소화함으로써 네트워크 노출을 최소화할 수 있습니다.
  • "내 IP"는 현재 사용자의 퍼블릭 IP를 자동으로 감지해 설정하는 옵션으로, 쉽게 설정할 수 있으면서도 높은 보안성을 제공합니다.

2. 네트워크 및 보안 그룹 설정

  1. 생성한 인스턴스의 퍼블릭 IPv4 주소를 확인하고 기록합니다.
    • EC2 인스턴스 목록에서 bastion-server-01을 선택 → 퍼블릭 IPv4 복사.
  2. 보안 그룹 설정을 확인하여 규칙이 올바르게 설정되었는지 검토합니다:
    • SSH 규칙: 22번 포트, 소스는 자신의 IP.
    • HTTP 규칙: 80번 포트, 소스는 자신의 IP.

네트워크 및 보안 그룹 설정: 왜 필요한가?

네트워크 설정은 Bastion Server가 올바르게 동작하기 위한 핵심입니다.

보안 그룹(Security Group)은 AWS의 방화벽 역할을 하며, Bastion Server에 대한 네트워크 트래픽을 제어합니다.

이 단계의 주요 목적:

  • Bastion Server가 퍼블릭 서브넷에 배치되며, 외부에서 접근 가능하도록 설정합니다.
  • SSH(22번 포트)HTTP(80번 포트) 트래픽을 허용하여 관리 및 테스트를 위한 기본 연결을 설정합니다.

Bastion Server 접속

1. Key Pair 생성 및 준비

  • EC2 생성 시 다운로드한 .pem 파일을 사용합니다.
  • 키 파일을 안전한 디렉토리에 저장하고 적절한 권한을 설정합니다:
    mkdir -p ~/.ssh
    mv ~/Downloads/bastion-key.pem ~/.ssh/
    chmod 400 ~/.ssh/bastion-key.pem

Key Pair 생성 및 준비: 왜 필요한가?

AWS EC2에 접속하려면 인증을 위한 Key Pair가 필요합니다.

Key Pair는 프라이빗 키와 퍼블릭 키의 쌍으로 구성되며, 프라이빗 키는 로컬에 저장하여 SSH 접속 시 사용됩니다.

이 단계의 주요 목적:

  • Bastion Server에 보안적으로 접속할 수 있는 인증 정보를 생성합니다.
  • 프라이빗 키를 안전하게 관리하여 외부의 무단 접속을 방지합니다.

2. VSCode를 사용한 SSH 연결 설정

1) VSCode 설치 및 플러그인 준비

  1. VSCode를 설치합니다.
  2. Remote - SSH 플러그인을 설치합니다.

2) SSH Config 파일 설정

  1. 터미널에서 SSH 설정 파일을 편집합니다:

    vi ~/.ssh/config
  2. 다음 내용을 추가합니다:

    Host bastion-server
        HostName [Bastion 서버 퍼블릭 IPv4]
        User ec2-user
        IdentityFile ~/.ssh/bastion-key.pem
    • [Bastion 서버 퍼블릭 IPv4]에 복사한 퍼블릭 IP를 입력합니다.
  3. 저장 후 종료합니다 (Ctrl + O → Enter → Ctrl + X).

3) VSCode에서 SSH 연결

  1. VSCode 좌측 하단의 Remote Explorer 아이콘을 클릭합니다.

  2. Remote - SSH: Connect to Host를 선택합니다.

  3. bastion-server 입력 후 Enter를 누릅니다.

  4. 연결이 성공하면 Bastion Server의 터미널이 열립니다.

참고

https://velog.io/@maasj/Mac-AWS와-VS-Code-원격-접속-방법

혹시 다음과 같은 에러가 발생한다면?

다음과 같은 권한 설정 수행

// .pem 확장자의 key가 위치한 디렉토리로 이동 후 다음 명령어 수행
chmod 600 bastion-key.pem  

참고: 에러 해결 및 보안 설정

.pem 파일과 같은 Key Pair의 권한 설정은 AWS에서 요구하는 기본 보안 정책을 준수하기 위해 필요합니다.

프라이빗 키 파일의 권한을 제한하지 않으면 SSH 접속이 거부될 수 있으므로, 반드시 설정해야 합니다.

profile
Why not change the code?

0개의 댓글