만자의 개발일지

[AWS] EC2에 SSM 으로 접속하기 본문

AWS

[AWS] EC2에 SSM 으로 접속하기

박만자 2022. 1. 13. 15:09

만약에 Internet Gateway 와 NAT Gateway가 달려있지 않은 외부와 완전히 차단된 Private 서브넷에 생성된 EC2에 접속하고 싶다면 어떻게 하면 될까?

Client VPN을 이용하는 방법도 있지만, 비용적으로 부담이 크다.

그래서 이번 포스팅에서는 SSM(AWS Systems Manager) 이라는 AWS에서 제공하는 Private Subnet에 쉽게 접근할 수 있게 해주는 서비스를 사용해 접속해보려 한다.

 

SSM 장점

  • Bastion Host 필요 없음
  • key pair 필요 없음
  • Security Group Rule 필요 없음
  • SSH 접속하는 것과 거의 같음 
  • Private Instacne에 바로 접속할 수 있음
  • 적은 비용

VPC 생성

제일 먼저 VPC부터 생성해 보자. AWS 콘솔 창으로가서 VPC에서 Your VPC를 눌러준다.

Create VPC를 눌러준다.

 

그 다음 VPC 명IPv4 CIDR를 입력해줘야 한다.

VPC명은 본인이 원하는 VPC명 아무렇게나 입력해줘도 된다. 필자의 경우 필자의 이름으로 만들어줬다.

IPv4 CIDR의 경우 역시 자기가 원하는 IP대역으로 지정해주면 된다. 필자는 10.0.0.0/16 을 사용하도록 하겠다.

(주의) Subnet을 만들 때 본인이 만든 IP대역 안에다 만들어야 한다.

다 적었다면 Create VPC를 눌러준다.

 

잘 생성된 것을 볼 수 있다.

 

Subnet 생성

VPC를 만들었다면 이제 Subnet을 만들어 줄 차례이다.

왼쪽에 Your VPCs 바로 밑에 있는 Subnets를 클릭해준다.

 

오른쪽 상단에 Create Subnet을 클릭해준다.

 

VPC는 방금전에 위에서 만든 본인의 VPC를 선택해주고 Subnet명과 가용 영역 그리고 Subnet의 CIDR를 지정해줘야 한다. 

본인이 원하는 Subnet명으로 지어주고 가용 영역 역시 원하는 곳에다 만들어준다. 필자는 a(가용 영역) 에다 만들었다.

CIDR는 아까 만든 VPC CIDR에 맞춰서 지정해준다. 필자는 10.0.0.0/24 로 해줬다.

다 입력했다면 아래에 있는 Create Subnet을 클릭해준다.

 

잘 생성된 것을 볼 수 있다.

 

IAM Role 생성

SSM을 사용하기 위해서는 EC2에 SSM을 사용하기 위한 권한을 부여해야 한다.

SSM으로 접속하기 위한 권한은 AmazonEC2RoleforSSM, AmazonSSMFullAccess, AmazonSSMManagedInstanceCore 등 여러가지가 있는데 만약 최소한의 권한만 부여하고 싶다면 AmazonEC2RoleforSSM만 부여해주면 된다.

 

IAM 콘솔 화면으로 들어가준다.

왼쪽에 Roles를 선택한 후 Create role을 클릭해준다.

 

그 다음 EC2에다 권한을 부여해 줄 것이기 때문에 EC2를 선택하고 하단에 Next:Permission을 클릭해준다.

 

그 다음 검색창에 AmazonEC2RoleforSSM을 입력한 후 선택해준다.

FullAccess를 줘도 되지만 클라우드의 리소스에 접근 권한을 줄때는 최소한의 권한만 주는것이 이상적인 방법이다.

 

Tag는 건너뛰고 4번으로 넘어가 Role name을 입력해준다. 필자는 정책명과 똑같이 지어줬다.

그 다음 Create role을 클릭해준다.

 

Security Group(보안 그룹) 생성

이제 보안 그룹을 만들어 줄건데 보안 그룹이 필요한 이유는 뒤에서 만들 엔드포인트에서 사용하기 위함이다.

 

콘솔화면 검색창에 EC2를 검색해 들어가준 후 왼쪽 메뉴중 Network & Security 에 있는 Security Groups를 클릭해준다.

그러면 Default Security Group 하나가 있을 텐데 기본적으로 VPC를 만들면 생긴다. Default Security Group은 사용하지 않을 것이기 때문에 새로 만들어 주도록 하자.

 

먼저 EC2에 사용할 Security Group을 만들 것인데 Security Group name을 입력해준 후 VPC는 위에서 만든 VPC를 선택해 준다. 여기서 중요한건 Inbound Rule을 비워주는 것인데 외부와 접속은 완전히 차단하고 오로지 SSM으로만 접속 가능하게 만들어 줄 것이기 때문에 Inboud Rule을 비운채로 만들어준다.

다 입력했다면 아래에 Create security group을 클릭해준다.

잘 만들어 졌고, 그 다음 엔드포인트에서 사용할 Security Group이 하나 더 필요하다.

 

아까랑 똑같이 Scurity group name을 지정해주고 VPC를 선택해준다. 여기서 중요한건 Inbound Rule에서 443(HTTPS) 포트를 열어줘야 한다는 것인데 이유는 SSM이 HTTPS를 사용하여 통신하기 때문이다.

다 입력했다면 Create security group을 클릭해준다.

 

화면에 보안그룹이 총 3개 있으면 잘 따라온것이다.

 

Endpoint 생성

Private Instance에 SSM으로 접속할려면 3개의 Endpoint가 필요하다.

  • ssm : 세션 접속 관련
  • ec2messages, ssmmessages : std in / out 관련

그 전에 Endpoint를 만들려면 VPC에서 DNShostnames를 활성화 해야한다.

VPC로 들어가서 위에서 만든 VPC를 우클릭한 후 Edit DNS hostnames을 클릭한다. 

그 다음  DNS hostnames Enable 체크 박스를 클릭하여 활성화 해준 후 Save changes를 클릭해준다.

 

그 다음 왼쪽 VPC 메뉴에 있는 Endpoints를 클릭한 후 Create Endpoint를 클릭해준다.

 

위에서 말한 3개의 Endpoint를 다 똑같은 옵션으로 설정해주면 된다.

일단 Service category에서 AWS services를 클릭한후 검색창에 위에서 말한 3개의 Endpoint(ssm, ec2messages, ssmmessages)를 선택해준다. (한번에 하나씩 만들어야된다.)

 

그 다음 본인이 만든 VPC와 AZ(가용 영역) 그리고 Subnet을 선택해준다.

그다음 Enbale DNS name을 체크해준다.

그 다음 아까 만든 Endpoint용 보안그룹을 선택하고 아래 정책에서 Full Access를 선택해준다.

다했다면 Create endpoint를 클릭해준다.

이와 같은 방법으로 3개를 만들어주면 된다.

 

EC2 생성

모든 준비는 끝났다. 이제 EC2를 만들고 SSM으로 접속해보도록 하겠다.

EC2 콘솔로 들어가준후 메뉴에 Instances를 클릭한후 오른쪽 상단에 Launch instances을 클릭해준다.

 

그러면 AMI를 선택하는 창이 나오는데 여기서 중요한건 SSM으로 접속할 것이기 때문에 SSM을 지원하는(ssm-agent가 깔려있는) OS를 선택해야 한다. 지원하는 OS는 아래 공식문서를 통해 확인하면 된다. 필자는 가장 위에있는 최신 Amazon Linux 2 를 선택했다.

https://docs.aws.amazon.com/systems-manager/latest/userguide/prereqs-operating-systems.html

 

가장 중요한 부분이다. Instance를 설정하는 부분인데, SSM으로만 접속 가능하게 할 것이기 때문에 Auto-assign Public IP를 Disable 하여 퍼블릭 IP 할당을 꺼줘 외부 접속을 완전히 차단해준다.그다음 IAM role 설정에서 아까 위에서만든 Role을 선택해준다.

그 다음 본인이 원하는 Name 태그를 지정해준다.

 

그 다음 Security Group을 선택해 줄 것인데 아까 만든 Inbound Rule이 없는 EC2용 Security Group을 선택해 준다.

 

그 다음 key pair를 선택해 줘야 하는데 우리는 SSM으로 접속할 것이기 때문에 key pair가 필요 없으므로 Proceed without a key pair를 선택해준후 Launch Instances를 클릭해준다.

 

잘 생성된 것을 볼 수 있다.

 

 

SSM 접속

인스턴스에 SSM으로 접속하기 위해서 AWS Systems Manager에 있는 Session Manager 서비스를 이용할 것입니다.

 

자신이 생성한 Instance를 클릭한 후 상단에 Connect를 클릭해줍니다.

 

그러면 아래처럼 4개의 항목이 있는데 Session Manager를 사용한다 했으니 Session Manager를 클릭한후 Connect를 클릭해 줍니다.

접속이 잘 되는것을 확인할 수 있다. 명령어도 잘 먹는다.SSH로 접속하면 ec2-user로 접속하지만 SSM으로 접속하면 ssm-user로 접속한다.기본적으로 SSM으로 접속하면 sh 쉘로 접속된다. bash 를 쓰고 싶다면 bash 명령어를 입력해주면 된다.

 

AWS Systems Manager 콘솔로가서 Node Management의 Session Manager에 가보면 현재 SSM으로 접속가능한 Session 목록을 보여준다.

 

 

여담으로 Public Subnet에 있는 Instance에 SSM으로 접속하고 싶으면, Instance에 ssm-agent가 깔려있고 IAM Role만 붙여주면 된다.

 

 

참고 

 

Comments