AWS에서는 IAM (Identity & Access Manager) 이라는 서비스가 존재합니다. 이 서비스는 사용자와 롤에 대한 정책 관리를 제공합니다. 그러면 관리자는 세밀한 서비스 접근 제어를 구현할 수 있습니다.

이와 더불어 AWS Systems Manager에서는 세션 관리자 (Session Manager)라는 기능을 제공하는데, 사전에 SSM-Agent가 설치된 EC2에 대한 웹 SSH를 연결할 수 있는 기능을 제공하고 있습니다. 본 글에서 소개할 SSH 연결 방법이 바로 이것입니다.

세션 관리자를 사용하기 위해서는 EC2와 IAM, 그리고 로컬 컴퓨터에 각각의 준비가 되어있어야 합니다. 각 과정을 살펴보고 웹과 로컬에서 SSH 연결을 IAM 기반으로 수행할 수 있는 방법을 알아보도록 하겠습니다.

EC2 설정하기

세션 관리자에 EC2를 연동하기 위해서는 SSM-에이전트를 설치해야 합니다. 다음과 같은 AMI에는 SSM-에이전트가 기본적으로 설치되어 있으므로 별도의 설정이 필요하지 않습니다.

  • Windows Server 2008-2012 R2 (2016년 11월 이후에 게시된 AMI)
  • Windows Server 2016 및 2019
  • Amazon Linux
  • Amazon Linux 2
  • Ubuntu Server 16.04, 18.04 및 20.04
  • Amazon ECS 최적화 AMI

그 외의 다른 OS에서는 사용자가 직접 SSM-에이전트를 설치해야 합니다. 관련해서는 AWS의 문서 (바로가기)를 참고하셔서 손쉽게 설치할 수 있습니다.

IAM 설정하기

EC2에 에이전트를 설치하였더라도 Systems Manager와의 연결을 위해서는 롤 할당이 진행되어야 합니다. SSM-에이전트에서 필요한 정책은 AWS에서 기본적으로 제공하고 있습니다. 신규 롤을 생성하여 AmazonSSMManagedInstanceCore 정책을 할당하고, 생성된 롤을 세션 매니저에 연동하고 싶은 EC2에 연결하면 됩니다.

그리고 세션 매니저를 사용할 사용자에게도 권한을 제공해야 합니다. 개별 사용자에게 권한은 아래의 예제와 같이 EC2의 개별 리소스 단위로 제공할 수 있습니다. 자세한 내용은 AWS의 문서를 참고하시면 더 많은 방법을 확인할 수 있습니다. (바로가기)

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE",
"arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE",
"arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE"
] },
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:username}-*"
] }
] }
Code language: JSON / JSON with Comments (json)

세션 매니저 사용하기

앞선 과정들이 정상적으로 진행되었다면, Systems Manager의 관리형 인스턴스 항목에서 자동으로 추가된 EC2를 확인할 수 있어야 합니다.

알아서 추가됩니다.

그러면 좌측 메뉴의 세션 매니저 항목에서 위의 인스턴스들 중에서 하나를 선택하여 세션 시작을 진행하면 됩니다. 혹은, EC2 목록에서 해당 인스턴스를 선택하고 우측 상단의 작업 -> 연결을 눌러 세션을 시작할 수 있습니다.

권한 설정이 잘 되어있으면 위와 같이 나타납니다.

OpenSSH 사용하기

앞서 세션 매니저를 사용하는 것은 결국 웹 브라우저를 이용하는 것입니다. 대부분의 개발자들은 별도의 SSH 클라이언트를 사용하고 있을 것으로 생각됩니다. 그래서 로컬에서도 기존의 SSH 접속 방식을 이용할 수 있도록 AWS에서 플러그인 제공하고 있습니다. (바로가기)

플러그인을 설치한 이후에 AWS CLI 툴을 이용하여 다음과 같은 방식으로 SSH 연결을 진행할 수 있습니다.

–target에 인스턴스 아이디만 넣고 바로 접속이 가능합니다.

혹은 프록시 설정을 진행하시고, 기존 로그인 방식도 그대로 이용 가능합니다. 프록시 설정은 OpenSSH의 경우에는 ~/.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'"
Code language: PHP (php)

그러면 아래와 같이 기존의 SSH 명령이 그대로 사용 가능합니다. 다만, 이 경우에는 PEM키를 반드시 사용해야 합니다.

프록시를 통해서도 잘 접속이 됩니다.

장점

세션 매니저를 통해서 EC2에 SSH 연결하는 방법은 다음과 같은 장점들을 가집니다.

  • 관리자가 IAM을 통해서 권한을 철저하게 제어할 수 있습니다.
  • 모든 접근 이력이 CloudTrail에 기록됩니다.
  • 개인 키를 사용할 필요가 없습니다.
    • EC2 생성시에 키 페어를 선택할 필요가 없습니다!
  • 웹 SSH는 환경에 구애받지 않습니다.

이 정도의 장점이라면, 기존의 개인 키 SSH 연결 방식에서 IAM으로 SSH 연결하는 방식으로 전환해야 할 충분한 이유가 될 것입니다.