EC2 Instance Connect Endpoint로 Amazon EC2 인스턴스 연결하기
EC2 Instance Connect Endpoint로 Amazon EC2 인스턴스 연결하기 (Connect to an Amazon EC2 instance using EC2 Instance Connect Endpoint)
EC2 Instance Connect Endpoint를 사용해 SSH 또는 RDP를 지원하는 Amazon EC2 인스턴스에 연결할 수 있어요.
출처: 문서
본문
전제 조건 (Prerequisites)
- EC2 Instance Connect Endpoint에 연결하려면 필요한 IAM 권한이 있어야 해요.
- EC2 Instance Connect Endpoint가 다음 상태 중 하나여야 해요: 새 엔드포인트의
create-complete, 또는 수정 중인 기존 엔드포인트의update-in-progress,update-complete,update-failed. 엔드포인트를 수정하는 동안 상태가update-complete로 바뀔 때까지 원래 구성을 계속 사용해요. - VPC에 EC2 Instance Connect Endpoint가 없다면 만들 수 있어요.
- EC2 Instance Connect Endpoint의 IP 주소 유형이 인스턴스의 IP 주소 유형과 호환되어야 해요. 엔드포인트 IP 주소 유형이 dual-stack이면 IPv4와 IPv6 모두에서 동작할 수 있어요.
- (Linux 인스턴스) Amazon EC2 콘솔로 연결하거나 CLI로 연결해 EC2 Instance Connect가 임시 키를 처리하게 하려면 인스턴스에 EC2 Instance Connect가 설치되어 있어야 해요.
- 인스턴스의 보안 그룹이 EC2 Instance Connect Endpoint에서 들어오는 SSH 트래픽을 허용하는지 확인해요.
Amazon EC2 콘솔로 Linux 인스턴스에 연결하기 (Connect to your Linux instance using the Amazon EC2 console)
- Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다.
- 탐색 창에서 Instances를 선택해요.
- 인스턴스를 선택하고 Connect를 선택해요.
- EC2 Instance Connect 탭을 선택해요.
- Connection type에서 Connect using a Private IP를 선택해요.
- Private IPv4 address 또는 IPv6 address를 선택해요. 옵션은 인스턴스에 할당된 IP 주소에 따라 사용 가능해요. 옵션이 회색이면 인스턴스에 해당 유형의 IP 주소가 할당되지 않은 거예요.
- EC2 Instance Connect Endpoint에서 엔드포인트의 ID를 선택해요.
참고: 엔드포인트는 이전 단계에서 선택한 IP 주소와 호환되어야 해요.
- Username에서 인스턴스 시작에 사용한 AMI가
ec2-user외의 사용자 이름을 쓴다면 올바른 사용자 이름을 입력해요. - **Max tunnel duration (seconds)**에서 SSH 연결의 최대 허용 시간을 입력해요. 기간은 IAM 정책에 지정된
maxTunnelDuration조건을 준수해야 해요. IAM 정책에 접근 권한이 없다면 관리자에게 문의하세요. - Connect를 선택해요. 인스턴스의 터미널 창이 열려요.
SSH로 Linux 인스턴스에 연결하기 (Connect to your Linux instance using SSH)
SSH로 Linux 인스턴스에 연결하고 open-tunnel 명령으로 사설 터널을 수립할 수 있어요. open-tunnel은 단일 연결 또는 다중 연결 모드로 사용할 수 있어요. 인스턴스 ID, 사설 IPv4 주소, IPv6 주소를 지정할 수 있어요. 아래 예시는 OpenSSH를 사용하며, 프록시 모드를 지원하는 다른 SSH 클라이언트도 쓸 수 있어요.
단일 연결 (Single connection)
ssh와 open-tunnel AWS CLI 명령을 다음과 같이 사용해요. -o 프록시 명령이 인스턴스로 가는 사설 터널을 만드는 open-tunnel 명령을 감싸요.
ssh -i my-key-pair.pem ec2-user@i-1234567890abcdef0 \
-o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-1234567890abcdef0'
-i– 인스턴스 시작에 사용한 키 페어를 지정해요.ec2-user@i-1234567890abcdef0– 인스턴스 시작에 사용한 AMI의 사용자 이름과 인스턴스 ID를 지정해요. IPv6 주소가 있는 인스턴스는 인스턴스 ID 대신 IPv6 주소를 지정해야 해요.--instance-id– 연결할 인스턴스 ID를 지정해요. 또는%h를 지정하면 사용자에서 인스턴스 ID를 추출해요. IPv6 주소가 있는 인스턴스는--instance-id i-1234567890abcdef0을--private-ip-address 2001:db8::1234:5678:1.2.3.4로 바꿔요.
다중 연결 (Multi-connection)
먼저 open-tunnel AWS CLI 명령을 실행해 새 TCP 연결을 수신하기 시작한 다음, ssh로 새 TCP 연결과 인스턴스로 가는 사설 터널을 만들어요.
- 로컬 컴퓨터의 지정된 포트에서 새 TCP 연결 수신을 시작하는 다음 명령을 실행해요.
예상 출력:aws ec2-instance-connect open-tunnel \ --instance-id i-1234567890abcdef0 \ --local-port 8888Listening for connections on port 8888. - 새 터미널 창에서 다음
ssh명령을 실행해 인스턴스로 가는 새 TCP 연결과 사설 터널을 만들어요.
예상 출력(첫 번째 터미널 창):ssh -i my-key-pair.pem ec2-user@localhost -p 8888[1] Accepted new tcp connection, opening websocket tunnel.
AWS CLI로 인스턴스 ID를 사용해 Linux 인스턴스에 연결하기
인스턴스 ID만 안다면 ec2-instance-connect ssh AWS CLI 명령으로 SSH 클라이언트를 사용해 연결할 수 있어요. AWS CLI 버전 2를 설치하고 자격 증명으로 구성해야 해요. 또는 AWS CloudShell을 열어 사전 인증된 셸에서 AWS CLI 명령을 실행할 수 있어요.
인스턴스 ID만 알 때는 ec2-instance-connect ssh CLI 명령에 ssh 명령, 인스턴스 ID, 그리고 EC2 Instance Connect Endpoint를 쓰기 위한 --connection-type 파라미터(eice 값)를 지정해요. 인스턴스에 IPv6 주소만 있으면 --instance-ip 파라미터에 IPv6 주소도 포함해야 해요.
사설 IPv4 주소가 있는 인스턴스(IPv6 주소도 가질 수 있음):
aws ec2-instance-connect ssh \
--instance-id i-1234567890example \
--os-user ec2-user \
--connection-type eice
IPv6 주소만 가진 인스턴스:
aws ec2-instance-connect ssh \
--instance-id i-1234567890example \
--instance-ip 2001:db8::1234:5678:1.2.3.4 \
--os-user ec2-user \
--connection-type eice
팁: 오류가 나면 AWS CLI 버전 2를 사용하고 있는지 확인하세요.
ssh파라미터는 AWS CLI 버전 2에서만 사용할 수 있어요.
RDP로 Windows 인스턴스에 연결하기 (Connect to your Windows instance using RDP)
EC2 Instance Connect Endpoint를 통한 RDP를 사용해, 공용 IPv4 주소나 공용 DNS 이름이 없는 Windows 인스턴스에 연결할 수 있어요.
- "Connect to your Windows instance using RDP"의 1~8단계를 완료해요. 8단계에서 RDP 데스크톱 파일을 다운로드한 뒤, 인스턴스에 공용 IP가 없으므로 Unable to connect 메시지가 뜨는 건 정상이에요.
- 다음 명령으로 인스턴스가 있는 VPC로 가는 사설 터널을 수립해요. RDP는 기본적으로 포트 3389를 사용하므로
--remote-port는 반드시3389여야 해요.aws ec2-instance-connect open-tunnel \ --instance-id i-1234567890abcdef0 \ --remote-port 3389 \ --local-port any-port - Downloads 폴더에서 다운로드한 RDP 데스크톱 파일을 찾아 RDP 클라이언트 창에 끌어다 놓아요.
- RDP 데스크톱 파일의 상황에 맞는(마우스 오른쪽) 메뉴를 열고 Edit을 선택해요.
- Edit PC 창의 PC name(연결할 인스턴스)에
localhost:local-port를 입력해요. 여기서local-port는 2단계에서 지정한 값과 같아야 해요. 그다음 Save를 선택해요. (Mac의 Microsoft Remote Desktop 화면과 Windows 클라이언트의 창은 다를 수 있어요.) - RDP 클라이언트에서 방금 구성한 PC의 상황에 맞는 메뉴를 열고 Connect를 선택해요.
- 프롬프트에서 Administrator 계정의 복호화된 비밀번호를 입력해요.
문제 해결 (Troubleshoot)
인스턴스에 연결할 수 없는 경우 – 다음이 흔한 원인이에요.
- 보안 그룹 – EC2 Instance Connect Endpoint와 인스턴스에 할당된 보안 그룹을 확인하세요.
- 인스턴스 상태 – 인스턴스가
running상태인지 확인하세요. - 키 페어 – 사용하는 명령이 개인 키를 요구한다면 인스턴스에 공개 키가 있고 대응하는 개인 키가 있는지 확인하세요.
- IAM 권한 – 필요한 IAM 권한이 있는지 확인하세요.
Linux 인스턴스 추가 문제 해결 팁은 "Troubleshoot issues connecting to your Amazon EC2 Linux instance", Windows는 "Troubleshoot issues connecting to your Amazon EC2 Windows instance"를 참고하세요.
ErrorCode: AccessDeniedException – AccessDeniedException 오류를 받고 IAM 정책에 maxTunnelDuration 조건이 지정되어 있다면, 인스턴스에 연결할 때 --max-tunnel-duration 파라미터를 지정하세요.