[AWS] Session Manager Endpoint 생성하기 (feat. System Manager)
-
AWS Endpoint 시리즈 1탄. Session Manager Endpoint 생성하기
Session Manager 엔드포인트 필요 조건
결론적으로 Session Manager 엔드포인트를 사용하기 위한 조건은 아래 3가지다.
ssm, ssmmessages 엔드포인트 2개 ( Option 1개 | ec2messages -> System Manager 서비스 사용 시 )
EC2 에 SSM 권한이 부여된 IAM Role 부여
EC2 와 엔드포인트 보안그룹 간 443(https) 통신 허용
1. VPC > 엔드포인트(Endpoint) 생성
서비스에서 ssm, ssmmessages, ec2messages 3개를 '각각' 생성
2. 엔드포인트를 생성할 VPC, 서브넷, 보안그룹 지정
여기서 선택하는 서브넷은 인터페이스 엔드포인트의 ENI 가 생성되는 서브넷
즉, 엔드포인트마다 서브넷 Private IP 1개 씩 필요
엔드포인트 별 최소 필요 포트
모두 443 통신 필요
3개의 엔드포인트 보안그룹을 따로 생성할 필요는 없으니, 같이 묶어 사용하자!
이후 글 내용은 모두 엔드포인트에 대한 설명이다.
1. Session Manager
Session Manager 는 AWS System Manager 서비스의 한 부분으로,
AWS Managed Console 에서 EC2 서버로 직접 접속할 수 있게 해주는 서비스다.
해당 서비스에 대한 자세한 설명은 이번 포스팅에서는 다루지 않으려고 한다.
세션매니저는 Bastion Host 가 없는 경우나, 테스트 환경, 터널링 할 수 없는 특수한 상황에 주로 사용하고 있다.
1.1. SSM Agent(생략 가능)
AWS System Manager 는 Session Manager 외에도 AWS 서버 운영을 위한 다양한 기능을 보유하고 있다. 이러한 기능을 위해 AWS 는 SSM Agent 가 설치된 EC2 서버 AMI 를 제공하고 있으며, 서버가 실행될 때 에이전트도 같이 동작하게 된다.
SSM Agent 는 System Manager 에 5분마다 https 트래픽을 전송하여 해당 서버가 SSM 에서 사용될 수 있음을 알린다. 최초 전송 성공 후 SSM 에서는 해당 인스턴스가 등록되어 SSM 서비스에 사용될 수 있다.
AWS SSM 에서는 Agent 로부터 마지막 트래픽 전달 후 15분 (연속 3번) 동안 트래픽이 없을 경우 Connection Lost 로 간주한다.
하지만반드시 헬스체크가 성공해야 SSM 서비스를 적용시킬 수 있는 것은 아니다.
Connection Lost 상태가 되어도 여전히 SSM 서비스를 사용할 수 있긴 하지만, 그렇다고 그냥 놔두진 말고 Connection Lost 상태가 왜 일어났는 지는 확인해보자 !
서버 내부 에이전트 확인 방법
amazon-ssm-agent -version
sudo systemctl status amazon-ssm-agent
하지만 실제로 Session Manager 에서 인스턴스를 실행시키기 위해서는 EC2 에 SSM 과 관련한 IAM Role 을 부여해야 한다.
우선 IAM 에서 'AmazonSSMManagedInstanceCore' 에 대한 정책을 찾아 EC2 에 부여하자.
잘 부여가 되었다면 위 명령어를 입력했을 때 아래와 같이 임시 자격증명 내용이 나온다. 이 부분은 EC2 가 IAM Role 의 권한을 어떻게 가져오는 지에 관한 부분이라 직접 테스트해보지 않아도 된다.
간단하게 SSM Agent 에 대해 알아보았다.
2. System Manager 엔드포인트 (feat. Session Manager)
공식문서를 확인해보면 Session Manager 를 사용하기 위해 다음 3가지의 엔드포인트를 생성하라고 나와있다.
com.amazonaws.ap-northeast-2.ssm
com.amazonaws.ap-northeast-2.ssmmessages
com.amazonaws.ap-northeast-2.ec2messages
모두 AWS System Manager 와 관련된 엔드포인트이긴 하나, 무슨 기능을 하는 것일까??
이외에도 ssm-contacts, ssm-incidents 가 있으나, 이들은 System Manager 의 Incident Manager 서비스를 위한 엔드포인트이다. 여기서는 다루지 않겠다.
2.1. ssm
SSM Agent 의 HealthCheck(TCP 443) 에 사용되는 엔드포인트
앞서 SSM Agent 는 5분 주기로 AWS SSM 에 헬스체크 트래픽을 전송한다고 하였다.
이 때, SSM의 Public url을 사용하여 Health Check 하는 것을 Private url 로 사용할 수 있도록 전환시키는 것이 ssm endpoint다.
즉, SSM 'HealthCheck' 만을 위한 엔드포인트다.
Https (tcp 443) 통신
2.2. ssmmessages
Session Manager 서비스를 위한 엔드포인트
AWS SSM 내에서 Session Manager 는 별도의 엔드포인트를 사용하고 있다. 아무래도 다른 SSM 서비스에 비해 서버 내부로 직접 접속할 수 있는 서비스라서 그런 것 같다.
Https (tcp 443) 통신
2.3. ec2messages
SSM Agent 출력 API 를 위한 엔드포인트
System Manager 는 Agent 기반 서비스다. 내가 System Manager 에서 Document 등을 실행 했을 때, 진행 과정, 결과, 에러 등을 콘솔에서 확인할 수 있다. 이 때 필요한 API 엔드포인트가 ec2messages 엔드포인트다.
Session Manager 만 사용한다고 했을 때는 ec2messages 엔드포인트는 생성할 필요가 없다.
하지만 System Manager 로 다른 자동화 기능 등을 수행한다고 했을 때는 ec2messages 엔드포인트가 반드시 필요하다.
Https (tcp 443) 통신
이렇게 Session Manager 사용을 위한 엔드포인트를 정리해봤다. 하다보니 System Manager 엔드포인트에 대한 글이 된 것 같다...
사실 ssm 을 엔드포인트까지 써가면서 쓸일이 그렇게 많지는 않다. 실무에서는 외부 트래픽이 완전 차단된 환경에 있는 인스턴스에 베스천 접속이 막힌 상황에서 트러블슈팅용으로 한 번 사용했었다. 해당 엔드포인트는 계속 사용 목적이라기보다는 일회성 생성일 경우가 크다고 본다.