EC2 인스턴스에 Key Pair를 생성하고 SSH를 통해 접속하는 것 보다 더 나은 방법인 SSM 서비스를 소개해드리도록 하겠습니다.
AWS SSM 이란?
AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스
기존 Bastion host를 통해 SSH 로 EC2 인스턴스에 접근하는 방식에는 몇 가지 단점이 존재합니다.
- Bastion host 전용 서버를 따로 생성해야 한다.
- Basion host에서 ec2에 접속할 때 필요한 키페어를 생성해서 보관해야 한다.
- 보안을 위해 접속하는 EC2 인스턴스 마다 키를 별도로 생성 + 접속하는 사용자마다 사용자를 생성하여 키를 설정해야 한다.
- 하지만 대부분 키 하나를 두고 모든 사용자들에게 키를 공유하여 사용한다.
- SSH 연결을 위한 서버 설정 및 보안 그룹 생성 등 관리한 부분들이 존재한다.
즉 Bastion host를 FM 으로 사용하려면 약간 번거롭고 불편한 감이 있습니다.
그렇다면 SSM 의 특징과 장점은 무엇인지 살펴보도록 하겠습니다.
SSM 특징/장점
✅ 인바운드 포트를 열거나 SSH 키를 관리할 필요 없이 관리형 인스턴스에 안전하게 연결한다.
✅ Bastion host 나 Key pair 가 필요 없다.
✅ HTTPS 프로토콜을 사용하여 접속이 가능하다. (SSH가 아님)
✅ 선택한 목적 또는 활동에 따라 AWS 리소스를 그룹화하여 중앙 집중식 관리가 가능하다.
이와 같은 단점과 불편함을 해소하기 위해 Bastion host를 사용하여 private ec2에 접속하던 구성을 AWS SSM 을 사용하여 접속할 수 있도록 변경해보도록 하였습니다.
[현재 구성]
Public subnet에 bastion host ec2를 생성하고, Private subnet에 web ec2를 생성한다.
web ec2의 key file을 bastion host에 저장한 뒤, web server의 sg에 bastion host로 부터 오는 22번 port의 트래픽만 허용하도록 규칙을 수정한다.
일반적인 public, private 서버 구조로 web server로는 bastion host를 통해서만 ssh 접속이 가능하게 운영된다.
-
외부에서 web ec2에 접속하는 경우
ssh -i "hannakey.pem" ec2-user@ec2-3-34-132-56.ap-northeast-2.compute.amazonaws.com
connection timed out 에러가 발생하며 접근할 수 없다.
-
bastion host에서 접속하는 경우
bastion host에 접속하여 저장 된 키 파일을 가지고 web ec2 에 접속한다."
SSM 을 통해 접속하기
[사전 작업]
- IAM 사용자 생성 (ADMIN)
- VPC 및 EC2 생성
1. EC2에 SSM 역할 부여
-
ec2에 연결할 역할 생성
hanna-ec2-ssm 역할을 생성하여 “AmazonSSMManagedInstanceCore” 정책 연결
-
web ec2에 연결
-
인스턴스에서 ssm agent 재시작
sudo systemctl restart amazon-ssm-agent.service
2. Window 에서 AWS SSM Plugin 설치
참고 문서
(옵션) AWS CLI용 Session Manager 플러그인 설치
-
실행 파일 다운로드
로컬 pc 에 다운로드 한다.
-
설치 확인
session-manager-plugin The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
3. ssm으로 세션 접속하기
aws ssm start-session --target <ec2-id>
SSM 으로 EC2 Session Logging 하기
[사전 작업]
로그를 저장 할 Cloudwatch 로그 그룹을 생성합니다.
로그를 저장 할 S3 버킷을 생성합니다.
인스턴스 Role 에 cw 와 s3 정책을 추가합니다.
S3에 세션 데이터를 기록하기
[System Managerd] → [세션 관리자] → [기본 설정] 에서 S3 로깅을 활성화 합니다.
데이터를 저장할 cloudwatch log 그룹을 선택하고 S3 버킷 이름을 입력합니다.
-
세션을 시작 할 인스턴스를 선택합니다.
-
세션에서 작업을 진행 한 후 세션 종료 후 S3 버킷에 로그가 저장 되어 있는지 확인합니다.
[세션 시작]
[종료 후 S3 버킷에 업로드 된 로그 확인]
Cloudwatch Logs를 사용하여 세션 데이터를 기록하기
-
[System Managerd] → [세션 관리자] → [기본 설정] 에서 Cloudwatch 로깅을 활성화 합니다,
-
데이터를 저장할 cloudwatch log 그룹을 선택하고 세부 정보를 입력합니다.
✅ 빠른 확인을 위해 세션이 종료되면 로그를 수집하도록 설정
-
세션 시작 후 작업한 다음, 세션을 종료하고 로그 그룹에 로그가 생성되었는지 확인합니다.
-
아래와 같이 세션에서 작업한 데이터들을 확인할 수 있습니다.
SSM을 통해 Run Command 실행하기
Run Command 란?
Run Command를 사용하여 관리형 인스턴스의 구성을 원격으로 안전하게 관리할 수 있습니다.
Run Command를 사용하면 일반적인 관리 태스크를 자동화하고 대규모로 일회성 구성 변경을 수행할 수 있습니다.
Run Command 실행하기
-
SSM 에서 [명령 실행] 선택
-
실행 할 명령 문서 선택
예시로 UpdateSSMAgent 명령을 실행해봅니다.
-
명령을 실행 할 인스턴스 클릭
-
출력 결과를 저장 할 S3 와 CW Log group 을 선택합니다.
-
실행을 누르고 진행 상태를 확인합니다.
-
업데이트를 확인합니다.
sudo yum info amazon-ssm-agent Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Installed Packages Name : amazon-ssm-agent Arch : x86_64 Version : 3.1.821.0 Release : 1 Size : 108 M Repo : installed Summary : Manage EC2 Instances using SSM APIs URL : <http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html> License : Apache License, Version 2.0 Description : This package provides Amazon SSM Agent for managing EC2 Instances using SSM APIs
-
출력 결과를 확인합니다.
-
S3에 출력 결과 저장
stdout Successfully downloaded manifest Successfully downloaded updater version 3.1.821.0 Updating amazon-ssm-agent from 3.1.715.0 to 3.1.821.0 Successfully downloaded <https://s3.ap-northeast-2.amazonaws.com/amazon-ssm-ap-northeast-2/amazon-ssm-agent/3.1.715.0/amazon-ssm-agent-linux-amd64.tar.gz> Successfully downloaded <https://s3.ap-northeast-2.amazonaws.com/amazon-ssm-ap-northeast-2/amazon-ssm-agent/3.1.821.0/amazon-ssm-agent-linux-amd64.tar.gz> Initiating amazon-ssm-agent update to 3.1.821.0 amazon-ssm-agent updated successfully to 3.1.821.0
3.1.715 에서 3.1.821로 업데이트 성공
-