Blog

Session Manager 알아보기

Session Manager

AWS SSM (System Manager) 는 EC2, S3, RDS 인스턴스 를 모니터링 & 관리 를 할 수 있는 서비스 이다.
이 서비스 중 한가지 기능으로 Session Manager 라는 기능이 2018년에 추가 되었는데, 사용법을 까먹을가봐 정리해두려 한다.

주절주절

보통 VPC 를 구성할 때 Public Subnet, Private Subnet 을 나눠서 구성한다.
Private Subnet 은 외부 네트워크와 통신하기 위해 NAT ( Gateway 혹은 Instance ) 를 두는데, 이 Subnet 안에서 생성된 인스턴스들은 퍼블릭 IP 가 없기 때문에 외부에서 바로 접속할 수 없다.
서비스를 운영하다보면 SSH 로 서버에 직접 접속할 일들이 생기게 되는데, Private Subnet 에 있는 서버에 접속할 수 없다보니 Public Subnet 에 Bastion 을 띄우고 Bastion 을 통해 Private Subnet 에 있는 서버에 접속하게 된다.
Bastion Host 에 아무나 접속하면 안되기 때문에 Vault 나 다른 서비스를 통해 인증 과정을 거치기도 하지만, 일반적으로 가장 간단한 PEM 파일을 이용하여 접속한다.
1명에서 서버를 관리할 땐 PEM 파일을 가지고 접속할 수 있지만, 팀원이 증가하면서 PEM 파일을 공유해야 하는 문제가 발생한다. ( PEM 파일이 사라지거나 유출되는 경우 상상도 하기 싫다. )
이러한 문제를 쉽게 해결하기 위해 나온게 Session Manager 이다.
Session Manager 는 Shell 수준의 접근을 지원하는 서비스인데, IAM 권한으로 인증을 하며 Cloud Trail 로 모든 접근에 대한 모니터링을 할 수 있다.

SSM Agent

Session Manager 을 사용하기 위해서는 SSM Agent 가 설치되어 있어야 한다.
Amazon Linux 기반 AMI(날짜: 2017.09), Amazon Linux 2, Ubuntu Server 16.04, Ubuntu Server 18.04 LTS 는 기본적으로 설치되어 있다.

수동 설치

IAM Role 적용

인스턴스가 SSM 에 접근할 수 있도록 IAM Role 을 부여해줘야 한다.
기존 Instance Role 이 적용되어 있다면 아래의 정책을 추가해준다.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssmmessages:*", "ssm:UpdateInstanceInformation", "ec2messages:*" ], "Resource": "*", "Effect": "Allow" } ] }
JSON
복사
Instance Role 을 부여한 이후 amazon-ssm-agent 를 재시작해야 한다.
Linux
$ sudo restart amazon-ssm-agent
Shell
복사
Ubuntu
$ sudo systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent.service
Shell
복사

Session Manager 시작

AWS Management Console 에서 System Manager 에 들어가면 좌측에 세션 매니저 (Session Manager) 에 들어가서 시작하면 된다.

Terminal 에서 접속하는 방법

~/.ssh/config 에 아래의 내용을 추가해준다
# SSH over Session Manager host i-* mi-* ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
Shell
복사
접속할 EC2 Instance 의 ID 를 찾아낸 후 SSH 접속하면 된다
$ ssh ec2-user@i-00000000000000000
Shell
복사

참고