EC2를 Public Subnet에 구성하는 케이스는 실제 프로젝트에서 보안적 이슈로 흔하지 않습니다. 필자가 수행한 프로젝트들은 Amazon Linux 기반의 CI/CD 용 서버, RDS 관리용 서버, Infra 서버, EKS 및 Kubenetes 관리용 서버등으로 구성한 EC2를 Private Subnet 에 구성하고 Thirdy Party 접근 제어 솔루션(HI-TAM, Chakra MAX 등등) 으로 접근하거나 특정 EC2 및 특정 User 들은 AWS SSM을 통하여 접근하여 케이스가 있었습니다.
특히 프로젝트 규모가 작거나, 프로젝트 초기에 접근제어 솔루션 과 EC2 간 연결에 시간이 많이 소요되면, 빠른 기간내에 구성이 가능한 SSM 은 프로젝트 구축에 용이하게 사용됩니다. 이번 글에서는 Private EC2를 SSM을 통하여 접근하는 법, 실제 프로젝트에서는 사용하지 않았지만 추가적으로 Local PC에서 SSM 을 통하여 AWS Console에 로그인 할 필요없이 Private EC2에 접근하는 방법에 대해서 알아보겠습니다.
우선 Private Subnet에 있는 EC2 접근을 위한 SSM 구성 방법에 대해서 알아보겠습니다.
STEP 1
Private Subnet에 EC2 를 생성합니다. Amazon Linux 2023 OS 기반으로 EC2를 생성하였습니다. 해당 OS는 SSM 를 사용하기 위한 SSM Agent 가 기본으로 설치 되어있습니다.
STEP 2
해당 EC2에서 SSM 을 사용하기 위한 권한을 주어야합니다. EC2 에 맵핑된 Role에 SSM 을 사용하기 위한 AmazonEC2RoleforSSM Policy를 추가합니다.
참고로 EC2를 디폴트 설정으로 생성하면 EC2에 맵핑된 Role 이 없습니다.
EC2에 Role 맵핑 작업은 인터넷에서 쉽게 찾고 설정 가능하니 참고 바랍니다.
STEP 3
Internet Gateway를 통하여 EC2에 접근이 안되기 때문에 Private Link 를 통해서 SSM 과 EC2 간 통신을 하기위한 Endpoint 생성 작업을 진행합니다. VPC-> Endpoint 로 들어간 후 엔드포인트 생성을 클릭합니다.
SSM <-> EC2 간 통신을 위한 3개의 Interface Endpoint를 생성합니다.
Endpoint를 붙일 VPC를 선택하고 EC2 가 포함되어 있는 Subnet을 선택합니다.
3개의 Interface Endpoint 를 생성 후 해당 Endpoint 에 하나의 Security group을 맵핑해 주었습니다.
인바운드 규칙은 Https 통신 및 SSM을 사용하는 EC2의 서브넷 대역대를 추가하였습니다. 아웃바운드 규칙에는 Rule을 넣지 않았습니다. 여러 프로젝트들 특히 Cloud 를 많이 경험한 기업에서는 Cloud에 대한 보안이 엄격합니다. AWS Control Tower를 통하여 각 계정에 대한 보안을 감시하고 보안 수정을 요구하는 사례가 있습니다. 특정 포트 및 특정 IP 또는 최소 CIDR 를 Rule에 등록해야 보안 관련 메일을 받을 확률이 적어지므로 자원 구성 시 보안적인 고려하여 포트 및 IP 오픈을 최소하는 것이 좋습니다.
이제 Private Subnet에 있는 EC2에 접속하기 위한 구성을 완료했습니다. EC2를 선택하고 연결 버튼을 누릅니다.
Session Manager 탭에서 연결 버튼을 누르면 EC2 터미널로 접속이 되는 것을 확인 할 수 있습니다.
Local PC에서 SSM을 사용하여 EC2 접근하는 방법에 대해서 알아보겠습니다.
STEP1
필자의 PC 인 Mac 을 통하여 Private Subnet에 있는 EC2에 접속하기 위하여 Mac 터미널에 SSM 플러그인을 설치해보겠습니다.
1,2,3 번 순서대로 명령어를 실행해 주시면 됩니다. 3번 실행 전 python 2.6.5 또는 python 3.3 이상이 필요하다고 하니 python을 설치해주시고 3번을 실행 시키면 됩니다. 그 외 다른 OS 를 사용하시는 분들은 https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html 에 OS 별 SSM 플러그인 설치가이드가 있으니 참고 부탁드립니다.
1. curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
2. unzip sessionmanager-bundle.zip
3. sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
aws ssm 설치가 완료되었으니 aws ssm start-session --target <ec2 인스턴스 ID> 로 접속을 해보겠습니다. aws cli로 ec2를 접속하는 것이기 때문에 맨아래 메시지 처럼 access key를 발급받아 aws configure에 구성해야된 다는 것을 알 수 있습니다.
장기자격증명인 AWS Access key를 발급할 것이기 때문에 ssm을 통하여 ec2 접속을 위한 최소한의 권한으로 정책을 구성하는 것을 권장드립니다. 임시 자격증명인 Assume Role을 통하여 AWS CLI 사용하는 방법은 차후 기회가 있을 때 소개해드리도록 하겠습니다.
STEP 2
우선 sk_leedw416_assume (assume은 예전에 assume role을 테스트하기 위한 유저명이라 유저명의 의미는 무시하시면 됩니다) 에 아래 빨간색 박스처럼 Region, Account ID, instance id(접속하려는 EC2)를 넣고 StartSession 권한 만 부여하는 정책을 Json 형식으로 생성합니다. 해당 Json 에 대한 가이드는 https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html 참고 부탁드립니다.
이제 위의 Json 권한을 가진 사용자의 Access key를 만듭니다.
Mac 터미널 창에서 다시 AWS Configure 명령어를 치고 위에서 발급한 Access key ID 및 AWS Secret Acess key 정보를 넣습니다.
다시 session 접근 명령어를 치면 ec2에 접속하는 것을 볼 수 있습니다.
'AWS Tech' 카테고리의 다른 글
임시 자격 증명을 활용한 AWS 자원 액세스 예제 (S3 다운로드) (0) | 2024.08.13 |
---|---|
S3 Bucket 에 파일 업로드 시, 파일 다운로드를 위한 Pre-signed Url 을 Email 로 전송하는 방법 (0) | 2024.06.20 |
AWS Well-Architected Tool 를 이용한 Workload 진단 (0) | 2024.05.27 |
CloudWatch logs 구독 설정 및 연결 확인 테스트 (CloudWatch logs를 근 실시간으로 S3 저장-2편 ) (0) | 2024.05.03 |
Cloudwatch logs 및 Kinesis Firehose Stream 생성 (CloudWatch logs를 근 실시간으로 S3 저장-1편 ) (0) | 2024.04.20 |