본문으로 건너뛰기

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"
}
]
}

Instance Role 을 부여한 이후 amazon-ssm-agent 를 재시작해야 한다.

  • Linux

    $ sudo restart amazon-ssm-agent
  • Ubuntu

    $ sudo systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent.service

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'"
  • 접속할 EC2 Instance 의 ID 를 찾아낸 후 SSH 접속하면 된다

    $ ssh ec2-user@i-00000000000000000

참고​