PRIVATE SUBNET 내 INSTANCE를 외부와 통신하게 하려면 어떻게 해야할까?
IGW+ ROUTE TABLE을 통해 PUBLIC SUBNET에 있는 PUBLIC EC2는 INBOUND, OUTBOUND요청을 설정했다.
반면 PRIVATE SUBNET 내에 있는 PRIVATE EC2는 INBOUND, OUTBOUND를 각각 따로 설정해줘야한다.
BASTION을 통해 Private Instanc에 요청하는 경우는
보통 Private EC2 서버 log 확인할 때 많이 사용한다.
BASTION은 PUBLIC SUBNET에 존재하는 INSTANCE임
즉 BASTION을 통해 터널을 여는 것인데 2가지로 동작한다. 이에 따른 명령어가 있다.
ssh -i **"local-to-bastion.pem"** -N -L 33322:{target-private-ip}:22 ec2-user@{bastion-host-public-ip}
ssh -i **"bastion-to-private.pem"** -p 33322 ec2-user@**localhost**
SSH 터널링을 구현하기 위해 필요한 것은 PEM KEY 2개다.
Local → Bastion(요청 시 필요한 ) Key Pair
Bastion→ Server(요청 시 필요한 ) Key Pair
즉 Local Host와 Bastion을 SSH로 연결할 때 Key Pair 설정을 해줘야한다
Bastion과 Private Subnet 내에 EC2가 SSH로 연결될 때 Key Pair 설정을 해줘야한다.
AWS에서 Key Pair를 생성하면 PEM KEY를 줄 것인데 이것에 Private key다.
Pulbic Key는 AWS상에서 가지고 있게 된다.
위 과정을 끝내면 Local에서 Private Instance에 바로 요청할 수 있다 이 모습이 마치 터널을 뚫린 것 처럼 보인다.
NAT를 통해 Private Instance가 외부에 특정 요청을 하는 경우 보통 서버에서 라이브러리 다운 받을 때 많이 사용한다.
BASTION과 마찬가지로 Pirvate Instance와 연결 될 수 있는 NAT라는 이름의 Public Instance를 만들어주는 것이다.
Private EC2 로부터 온 네트워크 패킷을 재작성하여, 외부와 대신 통신을 해준다
AWS 에서 NAT Instance 생성 시 주의
Private Ec2에 INBOUND는 BATION→Private EC2 내부로 요청하는 것
Private Ec2에 OUTBOUND는 Private EC2 내부에서 → NAT로 외부요청하는 것
10.0.0.0/16 local의 의미(INBOUND요청)
Private Ec2(10.0.0.0/16)로 오는 요청은 Local(Private Ec2)로 가라는 의미
0.0.0.0/0 NAT EC2의 의미(OUTBOUND 요청)
밖으로 나가는 모든 요청은 Public Subnet에 있는 NAT EC2로 가라는 의미
BATION에 INBOUND는 외부에서 → BASTION 내부로 요청하는 것
BATION에 OUTBOUND는 BASTION 내부에서 → Private EC2로 요청하는 것
10.0.0.0/16/ local의 의미(INBOUND 요청)
10.0.0.0/16 인스탄스로 가려고 하는 내부로 들어온 요청은 Local(Bastion 인스탄스)로 가라!
OUTBOUND 요청- Private Ec2로 요청할 때
**ssh ec2-user@{target-private-ip} -i bastion-to-private.pem
명령어를 통해 Private Ec2에 요청한다.**
0.0.0.0/0 IGW의 의미(OUTBOUND 요청- 인터넷 외부에서 요청할 때)
BASTION에서 외부 Destination IP(카카오 혹은 구글같은 ) 나가는 모든 요청은 0.0.0.0/0으로 모두 허용해준다. 이후 IGW로 가서 PUBLIC IP 변환을 해서 요청해라!