Contents
개요
보통 Private subnet안에 있는 AWS 서비스에 Connection을 맺기 위해서 Public Subnet에 Bastion Host 용도의 EC2를 생성하고 EC2에 접근하는 프라이빗 키를 이용하여 터널링 연결 후 접근해야 함.
해당 방식은 아래의 단점들이 존재함.
- Private Subnet에 접근하기 위해 Bation Host 필요.
- Private Key 배포 및 관리필요
- SSH 보안그룹 필요
EC2 없이 접근할 수 있는 방법이 있지 않을까? 생각이 들어서 이를 대체할 수 있는 방법을 찾아봤고 간략하게 정리해 봄
Session Manager
Systme Manager는 AWS의 여러 리소스를 관리할 수 있는 여러 기능들을 모아놓은 서비스인데 이 기능들 중 하나인 'Session Manager'로 SSH 연결을 대체할 수 있음.
Session Manager(이하 SSM)를 사용하면 외부 IP가 없는 Private Subnet에 존재하는 인스턴스와 Session을 맺은 후에 접근이 가능함.
Session Manager로 Private EC2와 세션맺기
SSM을 사용하여 EC2와 세션을 맺는 방법이다.
기존에는 Private Subnet에 있는 EC2와 SSH 연결을 하고싶다면 터널링 역할을 할 수 있는 EC2를 Public Subnet에 생성 후에 해당 서버를 경유해서 Private Subnet의 EC2에 접속할 수 있었을 것이다.
하지만 EC2의 경우 별도의 터널링 역할을 하는 EC2 없이 SSM을 이용하여 다이렉트로 세션을 맺을 수 있다.
- 대충 사용법
aws ssm start-session --target <EC2 인스턴스 ID>
위 예시에 나온 CLI 방식 말고도 AWS 웹콘솔에서도 세션을 맺을 수 있다.
Session Manager로 EC2외 서비스들의 인스턴스와 세션 맺기
SSM을 사용하여 EC2외 서비스들의 인스턴스와 세션을 맺는 방법이다.
EC2는 Session Manager를 사용하여 다이렉트로 세션을 맺을 수 있었으나 그 외의 서비스들 같은 경우에는 (RDS, Elasticache 등..) 다이렉트로 세션을 맺지 못하기 때문에 터널링 역할의 EC2가 필요하고 포트 포워딩을 이용해야 한다.
SSM의 포트포워딩 기능은 22년 5월 27일에 발표된 기능으로 비교적 최근에 나온 기능이다.
- 대충 사용법
aws ssm start-session \
--target instance-id \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["mydb.example.us-east-2.rds.amazonaws.com"],"portNumber":["3306"], "localPortNumber":["3306"]}'
SSM 장점
- Private Key 없이 IAM 기반으로 인증 및 접근가능
- Bation Host가 Public Subnet이 아니라 Private Subnet에 있어도 SSM 포트 포워딩 가능
- 포트 포워딩에 필요한 별도의 보안그룹이 필요 없음.
마치며
Bastion Host에 대한 Key 관리도 힘들고 어떤 유저가 접근했는지 알기 위해서는 별도의 rsyslog도 설정해줘야 하지만
SSM은 세션에 대한 Audit Log를 간단하게 설정할 수 있고 이를 SNS에 연동 + 알림도 가능하니 관리자 입장에서는 훨씬 효율적으로 관리할 수 있을 듯 하다.
Reference
'AWS > 관리 및 거버넌스' 카테고리의 다른 글
AWS Console Login시 Slack으로 알람 발송되도록 설정하기 (2) | 2023.05.01 |
---|