NAT 서버를 통해 VPC 프라이빗 서브넷에서 EC2 인스턴스로 SSH하는 방법


16

퍼블릭 서브넷과 프라이빗 서브넷을 사용하여 AWS에서 VPC를 생성했습니다. 프라이빗 서브넷은 외부 네트워크에 직접 액세스 할 수 없습니다. 따라서 퍼블릭 서브넷에는 모든 아웃 바운드 트래픽을 프라이빗 서브넷에서 외부 네트워크로 전달하는 NAT 서버가 있습니다.

현재 공용 서브넷에서 개인 서브넷으로 SSH를 사용할 수 있으며 NAT에서 개인 서브넷으로 SSH를 사용할 수도 있습니다. 그러나 원하는 것은 모든 컴퓨터 (홈 랩톱, 사무실 컴퓨터 및 모바일)에서 프라이빗 서브넷의 인스턴스로의 SSH입니다.

개인 서브넷의 SSH를 인스턴스로 전달하기 위해 NAT 상자를 설정할 수있는 몇 가지 연구를 수행했습니다. 그러나 나는 이것을 운이 없다.

누구나 내가 이것을 가능하게하기 위해 설정해야 할 것을 나열 할 수 있습니까?

이름은 다음과 같습니다.

랩탑 (VPC 외부의 모든 장치)

nat (퍼블릭 서브넷의 NAT 서버)

대상 (연결하려는 프라이빗 서브넷의 서버)

다음은 제한 사항인지 확실하지 않습니다.

"대상"에는 공용 IP가없고 서브넷 IP 만 있습니다 (예 : 10.0.0.1) "대상"은 nat의 공용을 통해 "nat"에 연결할 수 없습니다. "대상"서버가 여러 개 있는데 각각에 대해 하나를 설정해야합니까?

감사


링크 는 SSH 에이전트 전달을 통해 프라이빗 서브넷의 EC2 인스턴스에 연결하는 데 필요한 단계를 설명합니다.
Shailender Rawat

답변:


25

VPC 내의 모든 인스턴스에 연결하도록 요새 호스트를 설정할 수 있습니다.

http://blogs.aws.amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-instances-running-in-a-private-Amazon-VPC

요새 호스트로 작동하는 새 인스턴스를 시작하거나 기존 NAT 인스턴스를 요새로 사용하도록 선택할 수 있습니다.

새 인스턴스를 작성하면 개요로 다음을 수행합니다.

1) 요새 호스트를위한 보안 그룹을 생성하여 랩톱에서 SSH 액세스를 허용합니다 (4 단계의 보안 그룹 참고)

2) VPC의 퍼블릭 서브넷에서 별도의 인스턴스 (bastion)를 시작합니다

3) 시작시 또는 탄력적 IP 할당을 통해 배스 천 호스트에게 퍼블릭 IP 제공

4) 요새 IP 호스트로부터 SSH 액세스를 허용하도록 퍼블릭 IP가없는 각 인스턴스의 보안 그룹을 업데이트하십시오. 요새 호스트의 보안 그룹 ID (sg-#####)를 사용하여 수행 할 수 있습니다.

5) SSH 에이전트 전달 (ssh -A user @ publicIPofBastion)을 사용하여 먼저 요새에 연결 한 다음 요새에 한 번 SSH를 내부 인스턴스 (ssh user @ private-IP-of-Internal-Instance)에 연결하십시오. 에이전트 전달은 개인 키 전달을 처리하므로 요새 인스턴스에 저장하지 않아도됩니다 ( 개인 키를 인스턴스에 저장하지 마십시오 !! )

위의 AWS 블로그 게시물은 프로세스와 관련하여 몇 가지 중요한 내용을 제공 할 수 있어야합니다. 요새 호스트에 대한 추가 세부 정보를 원할 경우를 대비하여 아래 내용도 포함했습니다.

요새 호스트의 개념 : http://en.m.wikipedia.org/wiki/Bastion_host

설명이 필요하면 언제든지 의견을 말하십시오.


3
요새에서 인바운드 및 아웃 바운드 모두에 SSH / 22를 허용해야합니다.
user464180

이것이 답변의 일부가되어야하는 중요한 포인트입니다!
Tariq

전적으로는 아니지만 많은 도움이되는 허용 된 답변 외에도 보안 그룹이 인바운드 및 아웃 바운드 트래픽을 허용하도록해야했습니다. 언뜻보기에는 이미 그랬지만 CloudFormation 템플릿을 사용한 이후 개인 서브넷으로 들어오는 트래픽의 소스가 내 ELB라는 것을 알지 못했습니다. 따라서 모든 트래픽을 허용했지만 ELB에서만 나왔습니다. 이를 퍼블릭 서브넷으로 변경하면 문제가 해결되었습니다.
Milan Markovic

1

내가 그것을 할 수있는 유일한 방법.

1)이 프라이빗 인스턴스의 보안 그룹에 인바운드 규칙에 퍼블릭 서브넷의 보안 그룹이 있는지 확인하십시오.

포트 프로토콜 소스
모두 All sg-0b6616e070b9ea2d (공개 보안 그룹)

2) 프록시 명령을 사용하여 ssh 구성 파일을 다음과 같이 구성하십시오.

vim ~/.ssh/config

Host publichost
   HostName 24.123.34.45
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand none
Host privatehost
   HostName 10.0.2.133
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand ssh publichost -W %h:%p

실행 ssh privatehost 이 작동합니다


0

간단히 설명하면 요새 요새 호스트에 ssh 한 후에는 user로 NAT 호스트에 ssh해야합니다 ec2-user. 일반적으로 우분투 사용자는 AWS에서 우분투이기 때문에 이것은 조금 나아졌습니다. 그래서 나는했다 :

laptop> ssh -A ubuntu@ssh_bastion
ssh_bastion> ssh ec2-user@nat_private_dns_or_private_ip

또한 ssh_bastion은 다른 호스트 및 SG 로의 트래픽을 허용하는 아웃 바운드 규칙이 있어야합니다.


NAT 서비스 용으로 이미 구성된 Amazon AMI를 가동시킨 결과 'ec2_user'이름입니까? 그렇다면 'ec2-user'는 어떻게 개인 컴퓨터에서 계정을 얻었습니까?
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.