AWS Systems Manager - Session Manager (W terraform)


흔히 VPC, Subnets 을 설계할 때 Public Subnet 과 Private Subnet 의 형태로 구성이 된다. Public Subnet 의 경우 Load Balancer 혹은 web internet facing 자원들을 배치하게 되고, Private Subnet 의 경우 RDS 나 back-end application 을 배치하게 된다. Private Subnet 의 경우 Public Subnet 과는 다르게 Internet 을 통해서 직접 연결을 할 수 없기 때문에 추가의 작업이 필요하다. 예를 들어, Private Subnet 에 있는 Database 작업을 위해서 접속해야한다.

1. Bastion Host - Public Subnet 에 Bastion Host 를 구성하여 Bastion Host 를 통해서 Private Subnet 의 자원에 접속하고 관리한다. Bastion Host 의 경우 별도로 관리해야할 EC2 혹은 VM 이 증가하게 되는 단점이 있다.

2. VPN - VPN 은 비교적 Bastion Host 나 Security Group 설정에 비해서 비용이 많이 든다.

각각의 장단점이 있기 때문에 상황에 맞게 사용해야 한다.

위의 방법 말고 AWS Session Manager 를 이용할 수 있다.

 AWS Session Manager 는 AWS Systems Manager 라는 서비스의 속한 기능으로 EC2 혹은 온프레미스 환경의 VM 들을 관리할 수 있는 기능이다. 

Session Manager 가 동작하는 원리는 SSM Agent 를 통해서 Session Manager 와 통신한다. 따라서 접속하려는 EC2 혹은 온프레미스 환경의 VM 에 SSM Agent 가 설치되어야 한다. 또한 EC2 에 적절한 instance profile 이 설정 되어 있어야한다. 

- AmazonSSMManagedInstanceCore

- AmazonSSMDirectoryServiceAccess

그리고 EC2 의 user data 를 사용하여 프로비저닝 시 스크립트를 실행하여 SSM Agent 를 설치하고 Agent 가 Session Manager 와 통신할 수 있도록 실행시켜준다.

아래는 terraform 을 통해서 적절한 instance profile 을 만들고 EC2 를 프로비저닝 하는 코드이다.



아래는 user data 에서 아래의 bash 스크립트를 통해서 ssm agenet 를 설치하고 실행시킨다.

적절한 instance profile 을 설정하고 SSM Agent 를 설치하고 실행시켰다면, Console 에 접속하여 System Manager 를 확인한다면 아래와 같이 인스턴스를 확인할 수 있다. 해당 인스턴스를 선택하고 세션시작을 클릭하면, 해당 인스턴스에 접속할 수 있게된다.




또한 아래와 같이 세션 기록을 확인할 수 있다.

추가적으로 KMS, CloudWatch, S3 와 연동하여 관리를 할 수 있다.


참고














댓글

이 블로그의 인기 게시물

About Kafka Basic

About JVM Warm up

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

About G1 GC

sneak peek jitpack

About idempotent

C 언어 구조체의 포인터 멤버 변수

Synology NAS에 MariaDB 10에 Mysql workbench로 원격접속하기

About Websocket minimize data size and data transfer cost on cloud