[AWS] Private EC2 연결 방법 : Bastion Host & SSM & Instance Connect Endpoint

Private Subnet에 위치한 EC2는 인터넷 게이트웨이(IGW)와 퍼블릭 IP가 없기 때문에 외부에서 직접 접근할 수 없다. 따라서 인스턴스에 접속하거나 접근하려면 우회적인 방식을 사용해야 한다.
이번 포스팅에서는 Private EC2에 접근할 수 있는 3가지 방식을 소개하려고 한다.
1. Bastion Host
2. SSM (Systems Manager Session Manager)
3. EC2 Instance Connect Endpoint
4. Bastion Host로 Private EC2 접속
5. SSM으로 Private EC2 접속
6. Instance Connect Endpoint로 Private EC2 접속
Bastion Host

Public EC2 인스턴스를 Bastion Host(배스천 호스트)로 두고 이 호스트를 통해 Private EC2에 SSH 접속하는 방식이다.
즉 같은 VPC 내부에서는 Private Subnet에 접근 가능한 점을 활용하여 Public EC2에 접속해서 그 안에서 Private Subnet에 접속하는 방식이다.
SSM (Systems Manager Session Manager)

SSM 연결 방식은 AWS Systems Manager의 기능으로 Agent 기반의 EC2 접속을 지원한다.
System Manager의 기능들을 지원받으며 인스턴스에 접근할 수 있는 방법이다. (Private EC2 접속에서만 국한되지 않은 연결 방식이다)
1. AWS API 기반으로 EC2와 직접 SSH 없이 통신하는 방식이다.
2. IAM 인증 방식을 통해서 AWS API를 호출한다.
3. 연결 및 세션 감사 가능 : CloudTrail & CloudWatch를 활용하여 연결 및 세션 사용 기록 모니터링 및 감사가 가능하다.
장점
- SSH 없이 EC2에 안전하게 접근 가능, IAM을 통한 세분화된 접근 제어
- CloudTrail 및 CloudWatch 로그 활성화 시 세션과 명령 실행 기록을 감사 가능
- VPC Endpoint를 활용하여 Private 네트워크 내에서도 AWS API를 통해 안전한 원격 접근 가능
단점
- 초기 설정이 복잡하다. IAM 역할, SSM 에이전트 설치, VPC Endpoint 구성(Private 환경) 등의 사전 작업이 필요
- 네트워크 비용 발생, Private 환경에서는 VPC Endpoint 사용으로 추가적인 비용이 든다.
- SSM을 지원하지 않는 특정 환경이나 OS에서는 사용 제한
연결 요구사항
- EC2 인스턴스에 SSM 에이전트 설치 (Amazone Linux에는 기본적으로 설치되어 있음)
- IAM 역할 : AmazonSSMManagedInstanceCore 정책이 포함된 Role 적용
- 3가지의 SSM API 명령을 수행할 수 있는 권한 정책 부여.
- ssm (SSM 서비스와 관련된 주요 API 호출 권한), ec2messages, ssmmessages (명령 송수신 및 세션 연결 지원)
- Private 인스턴스의 경우 VPC Endpoint 프로비전 필요 (비용 발생)
- 기본적으로 Endpoint 3개 생성 필요 : ssm, ssmmessages, ec2messages
- 3가지의 API 명령을 Private Network에서 수행되도록 엔드포인트를 지정해야 한다. (인터페이스 엔드포인트)
- 추가적으로 2개의 Endpoint 활용 가능 : logs(로깅 활성화 시), s3(s3 로깅 활성화 시)
- 기본적으로 Endpoint 3개 생성 필요 : ssm, ssmmessages, ec2messages
- Outbound 포트 활성화 : 443 포트
<함께 보기> VPC Endpoint
https://sjh9708.tistory.com/255
[AWS] VPC Endpoint : Private 네트워크에서 AWS 서비스 접근
AWS에서 S3, DynamoDB 등의 대부분의 서비스에 접근할 때, 기본적으로 퍼블릭 인터넷을 거쳐야 한다.하지만 VPC Endpoint를 사용하면 퍼블릭 IP 없이 AWS 내부망을 통해 통신이 가능하므로 보안성과 성능
sjh9708.tistory.com
EC2 Instance Connect Endpoint

인터넷 없이 Private EC2 인스턴스에 SSH 또는 RDP로 안전하게 연결할 수 있는 기능을 제공한다. AWS API를 활용하여 엔드포인트 기반으로 접속하게 된다.
1. VPC Endpoint를 통해 퍼블릭 인터넷 없이 Private EC2 인스턴스에 직접 연결하는 방식.
2. IAM 인증 방식 사용 , SSH 또는 RDP를 통해 EC2 인스턴스에 연결
3. CloudTrail로 연결 기록 감사 가능 (SSM과 달리 사용 기록은 감사 불가능)
연결 요구사항
1. VPC Endpoint 프로비전 필요 : Private Network 및 Endpoint 기반의 접근 방식이기 때문에 프로비전이 필요하다.
- EC2 Instance Connect EndPoint를 특정 서브넷에 프로비전
2. 보안그룹 설정 : Instance Connect Endpoint에 연결되는 트래픽은 보안 그룹 규칙을 준수해야 한다.
Bastion Host로 Private EC2 접속하기

- 10.0.0.13 IP의 Public EC2에서 SSH 접속을 통해서 10.0.1.187 IP의 Private EC2에 접속한 모습이다.
SSM으로 Private EC2 접속하기
1. Role 생성

SSM 방식을 사용하기 위해서 IAM 역할 기반의 인증이 필요하다고 하였다. 따라서 Role을 생성해주자.
1. AmazonSSMManagedInstanceCore : SSM에서 EC2 인스턴스 관리를 위해 필요한 기능 사용을 위한 최소한의 권한
- ssm (SSM 서비스와 관련된 주요 API 호출 권한), ec2messages, ssmmessages (명령 송수신 및 세션 연결 지원) 권한 포함
2. CloudWatchAgentServerPolicy (선택) : CloudWatch 에이전트가 메트릭, 로그, 지표 데이터를 수집 및 전송하기 위한 권한
2. EC2 인스턴스 생성 시 Role 부여

- EC2 인스턴스를 생성할 때 위에서 생성했던 IAM Role을 프로파일로 부여해주자.
- Amazone Linux 기반의 AMI가 아니라면 따로 SSM 에이전트를 설치해야 한다. (포스팅에서는 Amazone Linux 사용)
3. 엔드포인트 생성

- 현재 Private EC2에는 접근할 수 없는 상태이다. 왜냐하면 Public IP가 없기 때문에 Public Network로의 통신은 불가능하고, Private Network를 통해 SSM 통신을 할 수 있도록 설정하지 않았기 때문이다.
- 따라서 3가지의 SSM API 명령을 Private Network에서 수행되도록 엔드포인트를 지정해주자.
- ssm, ssmmessages, ec2messages에 대한 엔드포인트를 지정해주자.
1. 아래의 엔드포인트 설정 과정에서는 AWS 서비스 유형을 제외하고는 동일하다. 서비스에서 ssm, ssmmessages, ec2messages를 각각 설정하여 3가지의 엔드포인트를 생성해주자.
2. 추가적으로 Cloudwatch 감사를 위해서 logs 서비스의 엔드포인트를 생성해주었다.
3. 엔드포인트는 Interface Endpoint이다. 따라서 서브넷 선택 시 같은 VPC 안에 있는 서브넷 중 하나를 선택해주면 된다.
(Private Subnet과 같은 서브넷이 아니어도 된다.)
엔드포인트 생성 과정 (펼쳐보기)



4. SSM 방식으로 EC2 접속
위의 과정을 마쳤다면 이제 SSM 방식으로 EC2에 접근이 가능해진다.


Appendix : SessionManager의 CloudWatch 연동
SSM 연결 시 세션 접속 및 사용 기록을 모니터링하기 위해서 CloudWatch Logging 기능과 연동하는 과정을 추가적으로 해보려고 한다.
1. CloudWatch에서 로그 그룹 생성

- CloudWatch에서 SSM 로그들을 보관할 저장소인 로그 그룹을 생성해주자.
2. 엔드포인트 추가 생성

3. Session Manager에서 CloudWatch logging 활성화


- Cloudwatch에서 감사 로그를 수집하기 위해서 기본적으로 비활성화되어있는 로깅 옵션을 활성화시켜주자.
- 앞서 생성했던 로그 그룹을 연동시켜주자.
4. CloudWatch에서 로그 확인

- 이제 CloudWatch에서 해당 SSM 사용 기록을 감사할 수 있다.
Instance Connect Endpoint로 Private EC2 접속하기

- 현재 기본적인 Public Network를 통한 EC2 인스턴스 연결이 비활성화되어있는 것을 볼 수 있다.
- EC2 인스턴스 연결 시 엔드포인트를 활용하여 연결하는 옵션이 있다. 즉 Private Network 기반의 접근 방식을 사용할 때 엔드포인트를 선택하여 연결한다.
- 우리는 EC2 Instance Connect EndPoint가 없기 때문에 엔드포인트 생성을 통해 새로 만들어주자.

- 서비스 유형으로 EC2 Instance Connect EndPoint를 선택하여 엔드포인트를 생성해주자.

- 엔드포인트를 설정하여 Private EC2 인스턴스에 연결이 가능해졌다.
References
https://docs.aws.amazon.com/
docs.aws.amazon.com
쉽게 설명하는 AWS 기초 강의 강의 | AWS 강의실 - 인프런
AWS 강의실 | AWS 여정을 시작하기 위해 가장 필요한 내용을 담았습니다., 안녕하세요. AWS 강의실입니다.AWS 공식 커뮤니티 빌더이자 2만명의 구독자를 보유한 AWS Only 강의 유튜브의 경험으로 AWS를
www.inflearn.com
'Backend > AWS' 카테고리의 다른 글
[AWS] S3 : 기본 개념과 버킷 설정 (스토리지 클래스, 버킷정책, 버전관리, 수명주기, 암호화) (0) | 2025.02.14 |
---|---|
[AWS] VPC : 네트워크 연결 방법과 VPC Peering (0) | 2025.02.10 |
[AWS] VPC Endpoint : Private 네트워크에서 AWS 서비스 접근 (0) | 2025.02.04 |
[AWS] VPC : 보안 그룹과 NACL(Network Access Control List) (0) | 2025.02.04 |
[AWS] VPC : 서브넷과 구성 요소 (Public/Private Subnet, IGW, NAT Gateway) (0) | 2025.02.04 |