이전 글에서 Private Subnet의 접근에 대해 Bastion host를 언급하고 끝맺었다.
Bastion Host?
Public Subnet에 위치해 직접 접근 불가능한 Private Subnet을 접속할 수 있게하는 게이트 역할의 호스트
-> 침입을 최소화 시키기 위한 목적의 호스트라고 보면된다, 특정 IP만 접근 가능하게 제어 할수 있고, Private 서버로 접근한 로그를 남길 수 있어, 접속자 확인에 편리하다.
Private Subnet의 인스턴스로 접근하기 위한 과정은 다음과 같다.
1. Bastion host로 SSH 접속
2. 연결한 Bastion host에서 Private Subnet의 인스턴스로 SSH 접속
이번에 구성할 내용
기본적인 세팅은 이전 글과 동일하게 가져간다.
bastion_host_demo : ubuntu 22.04
- DEMO_vpc | demo_public_subnet
private_instance : amazon linux 2
- DEMO_vpc | demo_private_subnet
Public Subnet에 있는 bastion host에 접속
다음으로 bastion host에서 Private Subnet에 있는 instance로 접속
bastion host에서 접속하는 것이므로 키 페어를 bastion host로 가져와야 한다.
+) ssh private key의 권한이 너무 느슨하게 주어진 경우 ssh 접속 시 Private Key 관련 warning이 발생하면서 접속이 되지 않는다.
(Permissions XXXX for [private key] are too open.)
키 파일 권한을 400으로 주고 접속 시도
bastion host를 통해서 private subnet의 인스턴스까지 잘 접속한 것을 확인했다.
다만 이 방법의 경우 bastion host에 private instance의 키 페어 파일을 저장해둬야 하고, ssh 접속을 2번 해줘야 한다는 번거로운 점이 있다.
ssh ProxyCommand 옵션을 통해 이 문제점들을 해결할 수 있다.
ssh -o ProxyCommand="ssh -i [bastion host의 키 페어] -W %h:%p [bastion host username]@[bastion host IP]"
-i [private instance의 키 페어] [private instance username]@[private instance IP]
ssh config파일 수정으로도 가능하다.
Host demo_bastion
HostName [bastion host public IP]
User [bastion host username]
ForwardAgent yes
IdentityFile [bastion host key file]
Host private_i
Hostname [private instance private IP]
User [private instance username]
IdentityFile [private instance key file]
ProxyCommand ssh demo_bastion -W %h:%p
훨씬 간단하고, 키 파일 노출에 대한 우려도 적어진다.
이렇게 설정해 놓고, private instance에서 인터넷 관련 작업을 할 수 있을까?
다음에는 NAT instance/gateway에 대해 알아보자