지난 re:inforce 2023을 통해 EC2 Instance Connect Endpoint (EIC Endpoint)가 공개되었는데 이에 대해 알아보도록 하겠습니다.
일반적으로 VPC내의 프라이빗 서브넷에 위치한 EC2 인스턴스에 연결하려고 한다면, 다음과 같이 인프라 관리자 혹은 아키텍쳐 관리자가 VPC의 인터넷 게이트웨이(IGW)를 통하도록 설정된 Public IP주소로 배스쳔 호스트 에 연결한 다음 포트전달을 사용해서 EC2 인스턴스에 연결해야 할것입니다.
하지만 EIC Endpoint를 사용한다면, 더이상 VPC리소스에 연결하기위해 인터넷 게이트웨이(IGW), 리소스의 퍼블릭 IP, 배스쳔 호스트 혹은 에이전트 등이 필요하지 않게 됩니다.
VPC - 엔드포인트 로 이동하여 엔드포인트 생성을 선택합니다.
엔드포인트의 이름을 설정해주고 EIC Endpoint를 선택하도록 하겠습니다.
엔드포인트를 생성할 VPC를 선택해 줍니다.
보안그룹을 선택해줍니다.
보안그룹이 없는경우 보안그룹을 생성해주겠습니다.
보안그룹이 있는경우 보안그룹을 선택합니다.
서브넷을 지정합니다. EIC는 프라이빗, 퍼블릭 어느곳에 두어도 동작합니다.
aws ec2-instance-connect ssh --instance-id 인스턴스아이디(i-어쩌구) --connection-type eice
ssh -i [키페어.pem] ec2-user@인스턴스 id \
-o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id [인스턴스 id]'
AWS CLI를 사용합니다. ec2-instance-connect 커맨드를 사용, RDS의 프라이빗 아이피와 터널링을 시도합니다.
파라미터로 EIC 아이디가 필요합니다.
파라미터로 RDS의 프라이빗 IP가 필요합니다.
터널링을 진행합니다.
aws ec2-instance-connect open-tunnel --instance-connect-endpoint-id <EIC ID> --private-ip-address <RDS Private IP> --local-port 3389 --remote-port 3389
이제 EIC Endpoint로 3389포트를 통해 들어오는 연결은 RDS인스턴스의 3389로 터널링되어 연결이 수립되게됩니다.
RDS에 접속해보도록 하겠습니다.
mysql -h 127.0.0.1 -P 3389 -u admin -p
정상적으로 접속되는것을 확인 할 수 있고 터널링 로그를 확인할 수 있습니다.