본문 바로가기

개발관련/AWS

AWS SSM(Session Manager)을 이용하여 Pem key 필요 없이 AWS EC2에 접속하는 방법

반응형

AWS EC2를 생성하여 이용하다 보면, ssh 접속을 위해 pem key를 발급받아야 한다.

아니면 기존에 사용하던 pem key를 그대로 사용하기도 한다.

 

이런 방식은 pem key가 탈취될 경우 누구든지 AWS EC2에 접속하게 될 수 있기 때문에 보안상 굉장히 위험할 수 있다.

이런 보안 위험상황을 방지하기 위해서 AWS에서는 Session Manager(이하 SSM)라는 서비스를 제공한다.

 

이 서비스를 이용하면 pem key 없이도 ssh 접속이 가능하며, ssh 접속을 수행하는 클라이언트 PC와 EC2 인스턴스 사이의 모든 통신은 TLS 1.2 방식으로 패킷이 암호화되어 주고받게 된다.

게다가 Private subnet에 존재하는 EC2 인스턴스, 즉 Public ip를 할당받지 않은 EC2 인스턴스로도 손쉽게 ssh 접속이 가능하다.

 

또한, SSM을 사용하여 ssh 접속을 수행하려면 IAM 계정에 알맞은 권한을 부여받아야 한다.

이는 인프라 관리 측면에서 사용자 별로 인스턴스 접근 권한을 손쉽게 할당하고 회수할 수 있다는 장점이 있다.

 

따라서 AWS에서는 IAM 권한을 이용하여 SSM 서비스를 이용해 인스턴스에 접속할 수 있는 권한을 부여받은 IAM 계정에 한해서만 인스턴스에 접근할 수 있도록 하는 방법을 권장하고 있다.

 

이러한 방법은 아래와 같은 요구사항이 있을 때 사용하면 좋다.

  • 어떤 EC2 인스턴스에 누가, 언제 접속했는지 알고 싶다.
  • 어떤 EC2 인스턴스에 누가 어떤 작업을 했는지 알고 싶다.
  • 사용자별로 EC2 인스턴스 접근 권한을 손쉽게 할당하고 회수하고 싶다.

SSM을 사용하여 인스턴스에 접근하는 방식은 별도의 비용이 요구되지 않는다.

자세한 내용은 아래 링크를 참고한다.

 

 

AWS Systems Manager 요금 – Amazon Web Services(AWS)

 

aws.amazon.com

 


 

 

AWS SSM 서비스를 사용하려면 먼저 awscli와 Session Manager Plugin을 설치해야 한다.

또한 awscli를 통해 커맨드라인 명령을 수행할 때 사용할 IAM 계정이 있어야 한다.

해당 문서에서는 IAM 계정은 존재한다고 가정한다.

 

 

환경 구성

awscli 설치 가이드

먼저 설치하려는 PC에 이미 awscli가 설치되어있는지 확인하기 위해 터미널에서 아래 명령어를 실행한다.

$ aws --version
aws-cli/1.16.260 Python/3.7.4 Darwin/19.3.0 botocore/1.12.250

위처럼 결과가 나오면 이미 awscli가 설치되어 있는 것이다.

만약 Command 'aws' not found 와 비슷한 문구를 출력한다면 PC에 awscli가 설치되어 있지 않은 것이다.

 

awscli는 버전1과 버전2가 있으며, AWS에서는 버전2의 설치를 권장하고 있다.

aws는 공식 문서가 잘 정리되어 있다.

aws에서 제공하는 cli나 plugin들의 경우 지속적으로 버전이 업그레이드 되기 때문에 공식 문서를 따르는 것이 가장 좋다.

 

awscli version 1 운영체제별 설치 가이드 공식 문서

 

Installing the AWS CLI version 1 - AWS Command Line Interface

AWS CLI version 1 no longer supports Python versions 2.6 and 3.3. All versions of the AWS CLI version 1 released after January 10th, 2020, starting with 1.17, require Python 2.7, Python 3.4, or a later version. This change does not affect the Windows MSI i

docs.aws.amazon.com

 

awscli version 2 운영체제별 설치 가이드 공식 문서

 

Installing the AWS CLI version 2 - AWS Command Line Interface

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

 

Session Manager Plugin 설치 가이드

awscli에서 SSM의 기능을 이용하려면 플러그인을 설치해야 한다.

공식 문서를 참고하여 설치하도록 한다.

 

(Optional) Install the Session Manager Plugin for the AWS CLI - AWS Systems Manager

이 플러그인을 사용하려면 Python 2.6.5 이상 또는 Python 3.3 이상이 필요합니다. 기본적으로 설치 스크립트는 시스템 기본 버전의 Python에서 실행됩니다. 대체 버전의 Python을 설치하고 이를 사용하여

docs.aws.amazon.com

 


 

 

Session Manager 실습

테스트 수행 절차는 아래와 같다.

  • 테스트용 EC2 인스턴스 생성
  • 테스트용 EC2 인스턴스에 SSM Agent 설치 유무 확인
  • 테스트용 EC2 인스턴스에 AmazonSSMManagedInstanceCore 정책 할당
  • SSM 접속을 시도할 IAM 계정에 테스트용 EC2 인스턴스로 접속할 수 있는 정책을 만들어 할당
  • awscli를 이용하여 ssm 접속 테스트

 

테스트용 EC2 인스턴스 생성

우선 테스트를 진행하려면 EC2 인스턴스가 한개 필요하다.

따라서 테스트용으로 t2.micro 타입의 원하는 운영체제를 선택하여 EC2 인스턴스를 생성한다.

 

테스트용 EC2 인스턴스에 SSM Agent 설치 유무 확인

생성한 테스트전용 EC2 인스턴스로 SSM 서비스를 통해 ssh 접속이 가능하게 하려면 인스턴스 내에 SSM Agent가 셋업되어 있어야 한다.

기본적으로 SSM Agent가 셋업되어있는 운영체제 타입은 아래와 같다.

  • Amazon Linux
  • Amazon Linux 2
  • Ubuntu Server 16.04
  • Ubuntu Server 18.04
  • Amazon ECS-Optimized

이에 대한 자세한 내용은 아래 링크를 통해 공식 문서 내용을 참고한다.

 

Manually install SSM 에이전트 on EC2 instances for Linux - AWS Systems Manager

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

docs.aws.amazon.com

 

EC2 인스턴스 내부에 SSM Agent가 셋업되어있는지 확인하려면 인스턴스에 ssh 접속을 한 후, 아래 명령을 실행해본다.

$ systemctl status amazon-ssm-agent -l
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-08-20 05:50:54 UTC; 51min ago
 Main PID: 2411 (amazon-ssm-agen)

 

위와 같이 amazon-ssm-agent 라는 프로세스가 잘 돌아가고 있다면 셋업 되어 있는 것이다.

만약 amazon-ssm-agent 라는 서비스를 찾을 수 없다면 셋업되어 있지 않은 것이다.

만약 인스턴스에 SSM Agent가 셋업되어 있지 않다면, 직접 수동으로 설치해야 한다.

그 방법은 아래 공식 문서를 참고하여 진행한다.

 

Manually install SSM 에이전트 on EC2 instances for Linux - AWS Systems Manager

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

docs.aws.amazon.com

 

 

테스트용 EC2 인스턴스에 AmazonSSMManagedInstanceCore 정책 할당

EC2 인스턴스에서 ssm으로 접속을 허용하기 위해서는 인스턴스에 AmazonSSMManagedInstanceCore 정책이 할당되어 있어야 한다.

AmazonSSMManagedInstanceCore 정책은 AWS에서 기본적으로 제공하는 IAM 정책이다.

EC2에 IAM 정책을 할당하는 방법에 대해서는 아래 링크를 참고한다.

 

EC2 인스턴스에 IAM 역할 할당

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 할당하려는 Identity and Access Management(IAM) 역할이 있습니다. 어떻게 해야 합니까? 

aws.amazon.com

 

 

 

SSM 접속을 시도할 IAM 계정에 테스트용 EC2 인스턴스로 접속할 수 있는 정책을 만들어 할당

IAM 계정에 아래와 같은 내용으로 정책을 만들어 할당한다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:<리전>:<AWS Account>:instance/i-xxx",
                "arn:aws:ec2:<리전>:<AWS Account>:instance/i-yyy",
                "arn:aws:ec2:<리전>:<AWS Account>:instance/i-zzz"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}

 

 

 

awscli를 이용하여 ssm 접속 테스트

이제 모든 환경구성과 권한 할당이 완료되었으므로, 직접 SSM을 이용하여 EC2 인스턴스에 접속해보자.

아래와 같은 명령어를 실행하여 EC2 인스턴스에 접속한다.

$ aws ssm start-session --target <EC2 인스턴스 ID>
Starting session with SessionId: shinchul@helloworld.co.kr-0a123abc0d123feed
sh-4.2$

위처럼 쉘에 잘 접속하게 되면 성공이다.

 

만약 정상적으로 동작하지 않는다면, 아래 공식 문서를 참고하여 관련 문제를 해결하도록 한다.

 

Troubleshooting Session Manager - AWS Systems Manager

If SSM 에이전트 is already running on an instance when you attach the IAM instance profile, you might need to restart the agent before the instance is listed on the Start a session console page.

docs.aws.amazon.com

 

참고로 가장 많이 발생하는 에러 메세지는 아래와 같다.

An error occurred (TargetNotConnected) when calling the StartSession operation: i-xxx... is not connected.

 

위와 같은 오류가 출력되는 원인은 아래와 같다.

  • EC2 인스턴스에서 SSM Agent가 정상동작하지 않을 경우
    • 테스트용 EC2 인스턴스에 SSM Agent 설치 유무 확인 체크
  • EC2 인스턴스에 설치된 SSM Agent 버전이 오래되었거나, 혹은 실행중이 아닐 경우
    • 버전이 오래되었을 경우 트러블슈팅
      • centos 계열 리눅스
        • sudo yum update 명령어 실행 후 SSM Agent 수동 설치
      • debian 계열 리눅스
        • sudo apt-get update 명령어 실행 후 SSM Agent 수동 설치
    • SSM Agent가 실행중이 아닐 경우 트러블 슈팅
      • sudo systemctl start amazon-ssm-agent 명령어 실행
반응형