[aws] Session Manager를 통해 private EC2 접속하기

2022. 8. 21. 15:32✅ STUDY/AWS

안녕하세요 :)
EC2에 접속하기 위한 방법 중 하나인 AWS Systems Manager의 기능인 Session Manager를 소개합니다.
특히 인터넷이 되는 EC2 환경과 인터넷이 되지 않는 EC2 환경에서 Session Manager 설정의 차이가 있는데요,
이를 어떻게 설정해야 하는지 자세히 적어보겠습니다.


AWS Systems Manager

AWS Systems Manager(구 SSM)는 AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스입니다. Systems Manager 콘솔을 사용하여 여러 AWS 서비스의 운영 데이터를 보고 AWS 리소스에서 운영 태스크를 자동화할 수 있습니다. Systems Manager는 관리형 노드를 스캔하고 탐지된 정책 위반을 보고하거나 시정 조치를 취해서 보안 및 규정 준수를 유지하는 데 도움이 됩니다.

관리형 노드는 Systems Manager에 사용하도록 구성된 머신입니다. Systems Manager는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 엣지 디바이스, 온프레미스 서버, 다른 클라우드 환경의 VM을 포함한 가상 머신(VM)을 지원합니다. 운영 체제의 경우 Systems Manager는 Windows Server, macOS, Raspberry Pi OS(구 Raspbian) 및 여러 Linux 배포를 지원합니다.

Session Manager

Session Manager는 AWS Systems Manager의 한 기능입니다. Session Manager에서, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 엣지 디바이스, 온프레미스 서버 및 가상 머신(VM)을 관리할 수 있습니다. 대화형 원클릭 브라우저 기반 셸 또는 AWS Command Line Interface(AWS CLI)을 사용할 수 있습니다. Session Manager는 SSH 접속을 위한 인바운드 포트를 열고, bastion host 서버를 두고, SSH 키를 관리할 필요 없이 보안성과 감사 가능성을 갖춘 노드 관리 기능을 제공합니다.


Session Manager 설정하기

1) EC2 인스턴스 내부 SSM Agent 설치

대부분의 경우 SSM Agent는 다음 EC2 인스턴스와 Amazon Machine Images(AMIs)에 기본적으로 설치됩니다.

  • Amazon Linux
  • Amazon Linux 2
  • Amazon Linux 2 ECS 최적화 기본 AMIs
  • SUSE Linux Enterprise Server(SLES) 12 및 15
  • Ubuntu Server 16.04, 18.04 및 20.04

위 OS가 아닌 타 OS를 사용한다면 EC2 내부에 수동으로 설치해야 합니다.

OS별 수동 설치 매뉴얼)

CentOS : https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/agent-install-centos.html
Oracle : https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/agent-install-oracle.html
Debian : https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/agent-install-deb.html

수동으로 설치하기 위해 EC2에 SSH 접속을 하는 것은 Session Manager를 사용하는 것이 무의미해지기 때문에 아래와 같이 userdata를 사용해 인스턴스가 생성될 때 서버에 SSM Agent가 설치되도록 설정하는 것을 추천합니다.

예를 들어, ap-northeast-2 리전의 CentOS 인스턴스의 경우, userdata 스크립트는 아래처럼 구성합니다.

참고) IGW, NAT의 사용으로 인터넷이 된다면 SSM Agent가 정상적으로 설치 되겠지만, IGW, NAT의 미사용으로 인터넷이 되지 않는 환경이라면 VPC Endpoint 중, S3 Endpoint(Gateway type)을 생성한 후 진행해야 정상적으로 설치됩니다.

#!/bin/bash
sudo yum install -y https://s3.ap-northeast-2.amazonaws.com/amazon-ssm-ap-northeast-2/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

 

2) AmazonSSMManagedInstanceCore 정책 부여

AmazonSSMManagedInstanceCore 정책을 부여할 IAM 인스턴스 프로파일(IAM Role)을 생성합니다.

이후, 접속하고자 하는 EC2의 IAM Role을 위에서 생성한 Role로 설정합니다.

 

IGW, NAT의 사용으로 인터넷이 되는 EC2 인스턴스의 경우 위의 2가지 설정만 진행하여도 Session Manager 사용이 가능합니다.
그러나, IGW와 NAT 사용이 불가한 인터넷이 되지 않는 EC2의 경우 아래의 3번 설정을 추가로 진행해야 합니다.

3) (인터넷이 되지 않는 EC2의 경우) VPC Endpoint 구성

IGW, NAT가 없는 환경에서 VPC Endpoint를 사용해야 합니다.

VPC Endpoint란, Amazon 네트워크를 벗어나지 않도록 VPC를 리전 내 다른 공간의 서비스와 연결해주는 것 입니다.
예를 들어, S3 Endpoint를 생성하면 EC2에서 Amazon 네트워크를 벗어나지 않고 private 하게 리전 내 S3에 접속할 수 있게 해줍니다.

Session Manager 또한 인터넷이 되지 않는 환경에서 사용하기 위해서는 3가지 VPC Endpoint를 생성해야 합니다.

  • 시스템 관리자: com.amazonaws.region.ssm
  • 세션 관리자: com.amazonaws.region.ssmmessages
  • EC2 관리자: com.amazonaws.region.ec2messages

Endpoint가 생성되려면 VPC의 DNS host name과 DNS resolution 속성이 모두 활성화 되어있어야 합니다.
DNS host name : VPC가 퍼블릭 IP 주소가 있는 인스턴스에 퍼블릭 DNS 호스트 이름을 할당하도록 할 것인지 (기본값: false)
DNS resolution : VPC가 Amazon에서 제공하는 DNS 서버를 통해 DNS 확인을 할 것인지 (기본값: true)


추가로, Endpoint가 사용할 보안그룹을 미리 생성합니다.
(인바운드) https - 443 - 보안그룹 ID 로 설정
자기 자신을 self chaining 하도록 설정합니다.


4개의 VPC Endpoint를 생성합니다.
생성 시에 보안그룹은 위에서 생성한 보안그룹으로 설정합니다.

 


EC2 생성 ( CentOS )

위에서 설정한 내용을 바탕으로 EC2를 생성합니다.

보안 그룹 - VPC Endpoint에 설정한 보안그룹을 선택

IAM 인스턴스 프로파일 - 위에서 생성한 IAM Role 선택

사용자 데이터(userdata) - centOS는 SSM Agent가 기본적으로 설치되어 있지 않으므로, 아래와 같이 스크립트를 작성해 줍니다.


결과 확인

 

sh를 bash로 변경하는 방법 )

Amazon EC2 Linux 인스턴스의 세션 관리자 세션은 기본적으로 Bourne 셸(sh) 을 사용합니다. 하지만 주요 Linux 배포판의 기본 셸은 bash입니다. sh보다 bash를 사용하는 것이 더 편하다면 구성 가능한 셸 프로파일을 사용하여 기본 세션 관리자 셸을 bash로 변경할 수 있습니다.

AWS Systems Manager >> 세션 관리자 >> 기본 설정 >> Shell profiles >> Linux shell profile


참고) https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/what-is-systems-manager.html

 

AWS Systems Manager란 무엇입니까? - AWS Systems Manager

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager.html

 

AWS Systems Manager Session Manager - AWS Systems Manager

AWS Systems Manager Session Manager Session Manager는 종합 관리형 AWS Systems Manager 기능입니다. Session Manager에서, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 엣지 디바이스, 온프레미스 서버 및 가상 머신(VM)을

docs.aws.amazon.com

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/

 

Systems Manager를 사용하여 인터넷 액세스 없이 프라이빗 EC2 인스턴스 관리

Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스가 인터넷에 액세스할 수 없습니다. AWS Systems Manager를 사용하여 인스턴스를 관리하려면 어떻게 해야 합니까?

aws.amazon.com

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ssm-session-manager-change-shell/

 

EC2 Linux 인스턴스에서 세션 관리자 셸을 bash로 변경

기본적으로 세션 관리자는 “/usr/bin” 디렉터리에서 시작됩니다. 셸 프로파일에 명령을 추가하여 Linux 인스턴스에서 /usr 디렉터리를 변경할 수 있습니다. 예를 들어 다음과 같습니다. 셸 프로파

aws.amazon.com