AWS Elastic Beanstalk 환경의 EC2 인스턴스에 대하여 SSH 접근을 허용하는 소스를 정의하려면 어떻게 하나요?

4 分的閱讀內容
內容層級:中級
7

본 기사는 AWS Elastic Beanstalk 환경의 SSH 액세스를 특정 소스에 한하여 접근을 허용하도록 .ebextensions configuration 파일을 통해 수정하는 방법에 대해 설명합니다.

AWS Elastic Beanstalk (EB) 서비스는 사용자가 애플리케이션 배포를 위해 필요한 AWS 클라우드 인프라를 구성하거나 그 구조에 대하여 자세히 알 필요 없이도 AWS의 클라우드 인프라에 사용자의 애플리케이션을 신속하고 편리하게 배포하고 관리할 수 있는 기능을 제공합니다.

EB 환경을 생성할 때 사용자는 아래와 같이 EC2 키 페어 (예: 'MY KEY PAIR')를 사용하도록 지정하여 EB 환경 내 EC2 인스턴스에 대하여 SSH 로그인 기능을 활성화할 수 있습니다.

Configure SSH 예시 1: EC2 인스턴스의 SSH 활성화를 위해 EC2 키 페어를 지정

SSH 로그인 기능 활성화 시에 EB 환경은 SSH 포트 (22번 포트)에 대하여 모든 소스 (0.0.0.0/0)의 접근을 허용하는 인바운드 규칙을 기본 보안 그룹에 생성합니다.

Default SG 예시 2: SSH 포트 (22번 포트)에 대하여 모든 소스 (0.0.0.0/0)의 접근을 허용하는 인바운드 규칙이 생성됨

인바운드 규칙이 SSH 포트 (22번 포트)에 대한 모든 소스 (0.0.0.0/0) 트래픽 유입을 허용하더라도 EC2 인스턴스는 사전에 정의된 키 페어 (예: 'MY KEY PAIR')만을 식별하여 사용자의 SSH 로그인을 허용하지만, 다양한 이유로 SSH 포트의 접근을 허용하는 소스를 제한하도록 인바운드 규칙을 수정할 필요가 생깁니다.

EB 환경이 애플리케이션을 배포하기 위해 생성한 대부분의 자원은 AWS에 의해 관리되므로 사용자가 EB 환경의 다양한 자원에 대하여 수정 혹은 확장 작업을 수행하길 희망하는 경우를 위해 AWS에서는 .ebextensions 구성 파일과 같은 수단을 제공하여 사용자가 이를 통해 환경을 수정 및 확장하도록 안내하고 있습니다.

따라서 본 기사에서는 EB 환경의 EC2 인스턴스에 대하여 SSH 접근이 가능한 포트와 소스 등의 정보가 정의된 기본 보안 그룹의 인바운드 규칙을 .ebextensions 구성 파일을 통해 특정 포트 및 소스에 대하여 SSH 접근을 허용하도록 정의하는 여러 방법을 다루도록 하겠습니다.

1. 특정 CIDR 블록 소스에 대하여 SSH 접근 허용
2. 특정 보안 그룹 소스에 대하여 SSH 접근 허용

.ebextensions 구성 파일을 활용하여 EB 환경의 EC2 인스턴스에 대하여 SSH 접근을 허용할 포트 및 소스를 정의하는 형식은 아래와 같습니다.

option_settings:
  aws:autoscaling:launchconfiguration:
    SSHSourceRestriction: protocol, fromPort, toPort, source_restriction

protocol: 인바운드 규칙의 프로토콜 fromPort: 외부의 접속을 허용할 포트 번호 toPort: 외부에서 유입된 트래픽이 전달될 포트 번호 (포트 포워딩 설정 시 fromPort와 toPort를 달리 정의) source_restriction: 트래픽 유입을 허락하는 소스 (CIDR 블록 혹은 보안 그룹)

참고 1: aws:autoscaling:launchconfiguration 네임스페이스의 SSHSourceRestriction 옵션에 대하여 보다 자세한 내용은 AWS의 공식 문서 ('모든 환경의 일반 옵션')를 통해 확인할 수 있습니다.

참고 2: .ebextensions 구성 파일의 여러 키에 대하여 보다 자세한 내용을 확인하길 희망하는 경우 다른 rePost 기사 'Linux OS 기반 AWS Elastic Beanstalk 환경을 위한 .ebextensions 구성 파일은 어떤 키를 지원하나요?'를 참고하여 도움을 얻을 수 있습니다.

1. 특정 CIDR 블록 소스에 대하여 SSH 접근 허용

특정 CIDR 블록에 속하는 소스 (예: 203.0.113.1/32) 트래픽에 한하여 EB 환경의 EC2 인스턴스에 22번 포트를 통해 SSH 접속을 허용하도록 정의하기 위해서는 아래와 같은 .ebextensions 구성 파일을 사용할 수 있습니다.

option_settings:
  aws:autoscaling:launchconfiguration:
    SSHSourceRestriction: tcp, 22, 22, 203.0.113.1/32

위 예시와 같은 .ebextensions 구성 파일을 포함한 애플리케이션 소스 번들을 EB 환경에 업로드하면 아래와 같이 기본 보안 그룹의 인바운드 규칙에 22번 포트로 접근을 허용하는 소스가 203.0.113.1/32로 정의됩니다.

Default SG - CIDR

2. 특정 보안 그룹 소스에 대하여 SSH 접근 허용

특정 보안 그룹에 속하는 소스 트래픽에 한하여 EB 환경의 EC2 인스턴스에 22번 포트를 통한 SSH 접속을 허용하도록 정의하기 위해서는 아래와 같이 보안 그룹의 ID를 source_restriction 값으로 정의한 .ebextensions 구성 파일을 사용할 수 있습니다.

option_settings:
  aws:autoscaling:launchconfiguration:
    SSHSourceRestriction: tcp, 22, 22, SG_ID

위 예시와 같은 .ebextensions 구성 파일을 포함한 애플리케이션 소스 번들을 EB 환경에 업로드하면 아래와 같이 보안 그룹의 인바운드 규칙에 트래픽을 허용할 소스가 'SG_ID' ID를 가진 보안 그룹으로 변경 (정의)됩니다.

Default SG - SG ID

또한, 위와 같이 SSH 접근을 허용하는 소스를 정의하는 .ebextensions 구성 파일은 EB 애플리케이션 소스 번들의 루트 디렉토리의 '.ebextensions' 디렉토리 아래에 위치하도록 하면 EB 환경에서 자동으로 소스 번들 파일에서 이를 확인하여 처리합니다.

~/your-app-directory/
|— .ebextensions	← *.config 파일을 다음 위치 아래에 위치하도록 합니다.
|     |-- 00_restrict_ssh_access.config
|     └-- 99_other_configuration.config
| 
└-- other application files or directories

이상 본 기사에서는 .ebextensions 구성 파일을 활용하여 EB 환경의 EC2 인스턴스에 대하여 SSH 접속을 허용할 소스를 정의하는 방법 및 소스 유형에 대하여 알아보았습니다.

본 기사가 re:Post 커뮤니티의 모든 사용자에게 도움이 되길 바라며, 기사 내용을 참고하여 EB 환경의 SSH 접근 포트 및 소스를 정의하는 과정에 전문적인 지원이 필요한 경우 AWS Premium Support에 도움을 요청해 주시길 바랍니다.