VPC는 클라우드에서 쓰는 VPN(가상 사설 네트워크)이라고 생각하면 쉽다. 사용자는 리전마다 1개의 VPC를 가지게 된다.
서브넷은 VPC 안에서 네트워크를 분리시켜 주는 역할을 한다. 각 AZ마다 프라이빗, 퍼블릭 서브넷이 각각 1개씩 있고, 퍼블릭과 프라이빗의 구분은 인터넷과 직접 연결 가능한지에 초점을 둔다.
인터넷 게이트웨이는 VPC에 있고, 이에 연결해서 공개 네트워크와 VPC를 연결할 수 있다. 퍼블릭과 프라이빗 네트워크는 각각 연결방법이 다르다.
퍼블릭 서브넷인 경우엔 인터넷 게이트웨이로 바로 라우팅할 수 있다. 하지만 프라이빗 서브넷은 바로 연결이 불가능하고, NAT 게이트웨이(AWS에서 관리), NAT 인스턴스(자체 관리)를 이용하여 넷 게이트웨이를 퍼블릭 서브넷에 만들고 퍼블릭 서브넷과 인터넷 게이트 웨이를 연결하는 방식을 이용해야 한다.
첫번째 방어라고 보면 된다. 디폴트 설정은 모든 것을 허용한다. 이 ACL은 서브넷 수준에서 만들어주고 IP주소 레벨에서 ALLOW, DENY를 설정할 수 있다.
두번째 방어 로직이며, 다른 서비스에서 많이 접해보았을 거라 생각한다. EC2 인스턴스에 IP주소나, 다른 보안 그룹을 설정하여 트래픽을 허용한다. 네트워크 ACL과 다르게 ALLOW만 설정 가능하다.
인터페이스로 가는 모든 트래픽을 로깅할 수 있는 서비스이다. VPC, Subnet, Elastic Network Interface들의 흐름 로그를 모두 확인할 수 있다. 네트워크 이슈가 있을 때 해당 로그를 봐야한다. AWS의 거의 모든 서비스는 해당 로깅이 남게 된다. 해당 로그들을 CloudWatch로 받아서 재활용도 가능하다.
VPC A와 VPC B처럼 서로 다른 VPC가 생성되어 있다. 이 둘은 다른 네트워크이지만 같은 네트워크로 사용하고 싶을 때, Peering 서비스를 사용한다. A와 B 둘을 같은 VPC처럼 만들어 준다. 주의사항은 다른 VPC 간에 같은 IP가 설정되어 있지 않은지 확인해야 한다.
또한 VPC 피어링은 전이되지 않는다. 각 VPC 마다 피어링을 해줘야 한다. 예를 들면, A, B, C VPC를 같은 네트워크로 사용하고 싶을 때, A <-> B <-> C Peering 설정을 하면, A랑 C는 연결하지 않았기 때문에 A와 C는 같은 네트워크라고 볼 수 없게 되고, A <-> C Peering도 같이 해줘야 한다.
모든 AWS 서비스는 공개서비스인데, 비공개로 접근하기를 원할 때 VPC 엔드포인트를 이용한다. VPC EndPoint Gateway를 사용해서 프라이빗 서브넷에서 S3, DynamoDB 서비스로 접근 가능하다. VPC EndPoint interface는 다른 서비스로 접근 가능하게 해준다.
즉, VPC EndPoint에는 두 가지 방식이 있는데, 게이트웨이 방식은 S3, DynamoDB 서비스만 지원하고, 인터페이스 방식은 서브넷 내부에 인터페이스를 만들어서 사용하는 방식이라 다른 AWS 서비스들과도 연동가능하다.
2가지 방법이 있다.
첫 번째로 VPN 장치를 AWS에 연결하고 인터넷에 연결되면 site to site VPN으로 암호화 연결하는 방법이 있다. 이는 VPN을 쓴다고 하더라도 공개 네트워크를 탈 수 밖에 없다는 단점이 있다.
두 번째는 AWS에 아예 직접적인 연결을 구축해달라고 하는 것인데, 다이렉트 연결이라고 하며, 구축하는데 적어도 한달은 걸린다. 하지만 비공개 연결을 완전히 지원해준다.