.
AWS를 사용하면서 계속 key를 발급받고 key를 이용해서 ssh 접속을 해왔습니다. 오늘은 ssh 접속이 아닌 AWS 서비스 중 System manager의 Session Manager를 사용해서 EC2 instance에 접근을 해보겠습니다.
먼저 간략하게 SSH 접속과 System manager를 활용한 접속에 대해 얘기해 보겠습니다.
SSH 접속
해당 EC2 instance를 만들 때 key를 새로 발급 받거나 기존의 key를 사용하는 옵션을 눌러서 키를 이용한 방법입니다.
보통 아래와 같은 방식으로 접근을 합니다.
ssh -i <key 경로> <사용자>@<ec2 instance의 ip> -p <port>
하지만 만약에 EC2 instance의 ip가 public ip가 아니라 private ip라면 접근을 어떻게 해야 할까요??
보통 private subnet에 ec2 instance를 실행 시킬 경우 public subnet에 bastion host를 만들어서 접근을 합니다. ssh로 접근을 하기 위해서는 bastion host에 public ec2 instance의 key를 넘겨서 ssh로 접근하는 등 매우 복잡합니다.
EC2를 사용해서 팀 프로젝트를 할 경우를 생각해 보면 key를 보내줘서 다같이 공유해서 써야 하는가요?(저도 이랬었습니다....)
공유를 해서 쓰면 간혹 key를 막는 경우가 발생해서 다시 발급받고 백업하느라 고생했었습니다....
또한 정석적으로는 매 EC2 instance를 생성할 때마다 새로운 key를 발급 받아야 한다고 합니다... (너무 귀찮죠...)
이러한 귀찮음과 보안 문제를 해결 해줄 수 있는 서비스가 바로 System Manager(SSM)입니다!!
System Manager(SSM) 접속
SSH와 다르게 https 프로토콜을 사용하고 인증은 AWS Credential을 이용해서 인증을 합니다.
system manager를 사용할 때의 장점을 간단히 얘기해 보겠습니다.
- key가 필요가 없다.
- private instance에 접근 할 때 bastion host가 필요 없다. (바로 접근 가능)
- Security Group이 필요 없다.
- 협업 시 key를 공유할 필요 없이 접근 가능하다.
위의 장점 말고도 더 많습니다. 사용하는 방법은 밑의 실습을 통해 차근 차근 설명해 드리겠습니다.
※ 참고사항
기본적으로 SSM Agent는 2017년 9월 이후의 Amazon Linux Base Amazon Machine Images(AMI) 에 설치됩니다. 또한 SSM Agent는 기본적으로 Amazon Linux 2 AMI 및 Amazon Linux 2 ECS-Optimized Base AMI에도 설치됩니다. 최신 Amazon EKS 최적화 AMI는 SSM Agent를 자동으로 설치합니다.다른 버전의 Linux AMI에서 생성된 Amazon EC2 인스턴스에는 수동으로 SSM Agent를 설치해야 합니다. Amazon EC2 Linux 인스턴스를 시작하기 전에 사용자 데이터를 추가하여 SSM Agent를 설치할 수 있습니다.
Amazon Linux 2 AMI 및 Amazon EKS 최적화 AMI에만 SSM agent가 자동설치되어 있기에 다른 AMI를 사용하려면 EC2 서버를 만들 때 사용자 데이터를 이용하여 SSM agent를 설치해 주면 됩니다. System Manager가 지원하는 운영체제와 설치 방법 참고바랍니다.
[실습]System Manager(SSM)
위 실습은 public subnet의 경우만 다루겠습니다. private subnet의 경우도 마찬가지이지만 nat gateway 연동 등 private subnet의 라우팅 테이블 설정도 해줘야 해서 나중에 다루겠습니다.
[AWS Cli 사용 X] System manager
먼저 AWS ec2서비스에 들어가서 인스턴스 시작을 클릭합니다. 원하는 AMI를 선택하고 인스턴스 유형을 선택합니다.
(저의 경우 amazon linux 2와 t2.micro를 선택해서 따로 ssm agent 설치를 안해줬습니다.) 인스턴스 세부 정보 구성을 아래와 같이 해줍니다.
SSM으로 접근을 할 꺼기에 ssh port를 열어둘 필요거 없습니다. 보안그룹에서 보안 그룹 규칙을 삭제해 줍니다.
검토 및 시작을 누르면 키 페어를 선택하거나 생성하라고 나오는데 여기서 키 페어 없이 계속을 선택해줍니다. 그러고 인스턴스 시작을 누르면 새 인스턴스가 생성이 됩니다.
이제 해당 EC2에게 System manager로 연결을 할꺼라는 것을 알려주기 위해 ec2 iam 역할을 생성을 해줍니다.
해당 EC2를 클릭하고 오른쪽 버튼을 누르고 보안에 보면 IAM 역할 수정이라고 나옵니다.
IAM 역할 수정을 클릭하면 다음과 같이 나옵니다. 저의 경우에는 이미 IAM역할을 만들어 놓았기에 이미 만들어 놓은 IAM 역할이 보이지만 없으면 새 IAM 역할 생성을 클릭해서 만들면 됩니다. (IAM 역할 생성은 다음에 다루겠습니다...)
밑의 사진을 보면 EC2RoleforSSM과 ssmmanagedInstanceCore 2개가 보이는데 EC2RoleforSSM은 aws docs 를 보면deprecated된다고 하여 ssmmanagedInstanceCore를 선택해줍니다.
이러면 EC2 설정은 완료되었습니다. 연결하고 싶은 EC2 instance를 클릭하고 오른쪽 상단에 연결을 클릭하면 다음과 같은 창이 나옵니다. Session manager를 선택하고 연결을 클릭하면 Session Manager를 이용한 연결을 할 수 있습니다. EC2 instance를 생성하고 역할을 부여한 후 Session manager 연결까지 시간이 좀 걸리기에 바로 연결이 안된다고 새로운 instance를 생성하지 말고 기다리면 연결이 됩니다.
직접 Session Manager를 사용해서 연결을 하는 방법을 얘기해 보겠습니다. AWS Systems Manager 서비스를 클릭 한 후에 옆의 바에 있는 Session Manager를 클릭해 줍니다.
세션 시작을 클릭해서 새로운 세션을 시작해줍니다. 해당 EC2 instance를 다른 사람들도 쓸 수 있게 iam 계정을 만들어 주었을 경우에 세션 기록으로 누가 언제 EC2 instance에 연결을 했는지 확인할 수 있습니다.
연결한 인스턴스를 체크하고 세션 시작을 클릭하면 해당 EC2 instance에 연결이 됩니다.
[AWS Cli 사용] System manager
이번에는 AWS Cli를 사용하여 System manager에 접속을 해보려고 합니다. AWS CLI 설정은 다음 글을 참고 하길 바랍니다.
2021.08.16 - [AWS] - [AWS CLI 설정] AWS Cli 설치 및 AWS CLI configure 설정 방법
AWS CLI 설정을 했다면 AWS CLI로 Session manager를 사용하기 위한 플러그인을 설치 해야 합니다. AWS에서 제공하는 문서를 참고하여 해당 OS에 맞는 플러그인을 설치해 주면 됩니다.
설치를 완료 했다면 다음과 같은 명령어를 기입하여 해당 EC2 instance에 접속을 할 수 있습니다.
aws ssm start-session --target <ec2-instance ID>
해당 EC2에 접속을 못하고 오류가 발생하면 aws configure를 잘 기입했는지, 해당 EC2에 ssm agent가 정상 동작하는지 등 확인을 해주면 됩니다. 보통 EC2에 SSM role이 반영이 안되어서 접속이 불가능한 경우도 많아 IAM 역할을 부여해주고 시간이 지나면 SSM 접속이 가능 해집니다.
※ Amazon linux2 이미지를 활용한 EC2에 ssm agent가 정상 동작하는지 확인하는 방법 (해당 EC2 안에서 해주면 된다.)
systemctl status amazon-ssm-agent -l
다른 운영체제에서 확인하는 방법은 문서 참고바랍니다.
※잘못된 내용이 있거나 궁금한 내용이 있으면 언제든 댓글 달아주세요!!