aws - vpc
VPC
VPC는 리전에 할당되는 리소스로 유저가 리소스를 배포할 수 있는 프라이빗 네트워크이다.
서브넷은 AZ에 할당되는 리소스로 VPC 내의 네트워크를 파티셔닝
할 수 있도록 해준다.
퍼블릿 인터넷에서 접근할 수 있는 퍼블릭 서브넷과, 프라이빗 네트워크에서만 접근할 수 있는 프라이빗 서브넷이 있으며 라우팅 테이블에서 서브넷과의 액세스 포인트를 설정한다.
퍼블릭 서브넷과 프라이빗 서브넷이 있다고 하자. 이 둘은 각각 어떻게 인터넷과 프라이빗 네트워크에 연결될까?
- 퍼블릿 서브넷은
인터넷 게이트웨이(IGW)
를 통해 인터넷과 연결된다. 라우팅 테이블에서 라우팅을 등록한다. - 프라이빗 서브넷은
NAT 게이트웨이(NAT)
와NAT 인스턴스
를 통해 인터넷과 연결된다. 프라이빗 서브넷 내의 리소스는 인터넷에 접근할 수 있게 하지만 인터넷에서 프라이빗 서브넷 내의 리소스는 접근할 수 없게끔하는 역할을 하며,NAT
가 퍼블릭 서브넷에 배포되어 프라이빗 서브넷에서 나가는 트래픽을NAT
에 라우팅하고 ,NAT
은 다시 이를IGW
에 라우팅함으로써 이를 가능케 한다. 결과적으로 프라이빗 ip를 퍼블릭ip로 NAT(주소 변환)하게 된다. NAT 게이트웨이는 AWS-managed 서비스이며 NAT 인스턴스는 유저가 관리해야 한다.
IGW/NAT
은 모두 VPC 수준의 게이트웨이이다.
Network ACL & 보안 그룹
Network ACL은 서브넷 수준의 방화벽으로 ALLOW/DENY 규칙을 통해 서브넷에서 나가거나 향하는 트래픽을 필터링한다. NACL의 규칙은 ip
주소에만 허용된다.
보안 그룹은 인스턴스 수준의 방화벽으로 ENI
/ Ec2
인스턴스에서 나가거나 향하는 트래픽을 필터링한다. 보안그룹은 ALLOW
허용규칙만을 명시할 수 있으며 ip
주소와 다른 보안그룳을 지정할 수 있다.
보안그룹은 허용규칙만 작성하기 때문에 stateful(허용하는 트래픽 커넥션을 inbound/outbond에서 동시에 허용) NACL은 허용/거부 규칙을 명시적으로 작성하기 때문에 stateless(outbound에서 허용하더라도 inbound에 명시하지 않으면 응답 트래픽을 거부함)
즉 인터넷 트래픽이 ec2 인스턴스에 도달하기까지 VPC-서브넷-NACL-보안그룹-인스턴스 의 과정을 거친다.
- VPC Flow Log VPC, 서브넷, ENI 수준의 flow log가 있으며 모든 ip 트래픽에 대한 로그를 확인할 수 있다. aws가 관리하는 인터페이스라면 뭐든지 네트워크 트래픽에 대한 로그를 생성할 수 있으며 s3/cloudwatch에 로그를 저장할 수 있다.
VPC Peering
aws 네트워크의 두 vpc를 연결하여 동일한 네트워크에 있는 효과를 줄 수 있다. 이 때 VPC의 ip 범위(CIDR
) 가 겹치면 안된다. VPC는 transitive
하지 않다. A와 B, B와 C가 연결된 경우 A는 C에 접근할 수 없고 A와 C간의 직접적인 연결을 생성해야 한다.
VPC Endpoints
앞서 프라이빗 서브넷이 퍼블릭 인터넷에 엑세스 하기 위해서는 NAT을 필요로 한다고 했었다. 그러나 AWS 서비스의 경우, 퍼블릭 인터넷을 이용하지 않더라도 VPC 엔드포인트를 사용하여 aws 서비스에 트래픽을 주고받을 수 있다. S3와 DynamoDB의 경우 VPC Endpoints Gateway
를 사용하며, 그외의 서비스의 ENI인 VPC Endpoints Interface
를 사용하여 프라이빗 하게 트래픽을 주고받을 수 있다.
VPC connection
aws vpc와 다른 VPN과의 통신에는 두 가지 방식이 있다.
- site to site vpn 퍼블릭 인터넷을 통해 온프레미스 VPN(가상 프라이빗 네트워크)와 aws VPC를 연결, 커넥션은 자동으로 암호화됨(SSL/TLS)
- Direct Connection(DX) 온 프레미스 VPN과 aws vpc 사이에 물리적인 네트워크를 직접 설치. 커넥션은 프라이빗하고 매우 빠르지만 설치에 몇달이 소요됨. VPC 엔드포인트는 AWS 서비스와의 프라이빗 커넥션을 위함이며, 위의 두가지 방식은 aws 서비스가 아닌 외부 vpn와의 연결 방식임을 기억하자.
3 티어 솔루션 아키텍쳐 ![[Pasted image 20230322130004.png]] ELB는 퍼블릭 서브넷에 위치하고, 인스턴스와 데이터셋은 프라이빗 서브넷에 위치함.