7. AWS VPC (AWS Certified Developer Associate)
1. VPC란?
Virtual Private Cloud로 AWS 클라우드에 있는 사설 네트워크이다.
이는 사용자의 리소스를 배포할 수 있도록 도와주는 서비스이다.
2.VPC의 구조
VPC 내부에는 서브넷이 있고 이를 통해 VPC 안에 있는 네트워크를 분할하게 해준고 서브넷은 가용 영역 수준에서 정의된다.
서브넷은 크게 공용 서브넷과 사설 서브넷으로 나뉜다. 먼저 고용 서브넷(public subnet)은 인터네으로 부터 접근할 수 있도록 www에 접근 가능 하게 되어있다. 다음으로 사설 서브넷(private subnet)은 인터넷에서 직접 접근 할 수 없도 구현한 서브넷 범위이다.
2-1. 사설 서브넷을 인터넷과 연결 할 수 있는 방법
인터넷에서 사설 서브넷을 접근하는 방법은 라우팅 테이블에 접근 가능 경로들을 작성하는 방법이 있다.
2-3. 인터넷 게이트웨이 와 NAT게이트웨이
- Internet Gateway(이하 IGW로 작성하겠다.)
IGW는 서브넷에 연결돼있는 인스턴스를 인터넷과 송/수신 할 수 있도록 연결시켜주는 게이트웨이다.
먼저 공용 서브넷에 연결되있는 EC2가 있다고 하자 이때 해당 EC2는 IGW로 라우팅 된다. 이때 IGW는 인터넷과 통신한는 법을 알고 있어 공용 서브넷을 공개적으로 만들어준다. 즉 고용 서브넷은 인터넷 게이트웨이로 직접 라우팅이 되며 인터넷과 송/수신을 할 수 있다.
- NAT Gateway(이하 NAT로 작성하겠다.)
만약 사용자가 사설망에 있는 EC2 인스턴스는 EC2 ->인터넷으로 접근할 수 있게하여 소프트웨어를 업데이트 하고싶지만 인터넷 -> EC2로 접근 하는 것은 막고싶다고 가정하자. 이때 NAT GW또는 NAT 인스턴스를 사용하면된다. (이때 NAT GW는 AWS에서 관리하기 때문에 프로비저닝과 스케일링 관련해 신경 쓸 필요가 없서 편리하고, 인스턴스는 자제 관리가 필요해 불편한 점이있다.)
사용법은 공용 서브넷(public Subnet)에 NAT GW혹은 인스턴스를 배포하고 사설망 서브넷(Private Subnet)에 배포해둔 EC2를 라우팅한다. 그렇게되면 NAT는 공용 서브넷이기 때문에 인터넷과 통신이 가능하고 이는 사설 서브넷에 있는 인스턴스에게 필요한 통신을 돕는 구조이다.
3. 네트워크 보안
Network ACL과 Security Groups에 대해 알아보자!
3-1. Network ACL(NACL)
NACL은 서브넷에서 들어오고 나가는 트래픽을 제어하는 방화벽이다. 즉 특정 규칙을 허용하거나 거부할 수 있는 녀석인셈이다.
NACL을 서브넷 수준에서 만들고 규칙은 오직 IP 주소를 포함한다. 즉 IP를 기준으로 규칙을 허용/금지하는 것이다. 이는 공용 서브넷을 서브넷 수준에서 방어하는 첫번째 메커니즘인셈이다!
기본 NACL은 기본 VPC에서 모든 것을 허용한다..
- 규칙을 허용하거나 거부한다.
- 네트웨크에 들어오고 가는 것을 사용가자 허용한다.
3-2. Security Groups
ENI또는 이더넷 네트워킹 인터페이스 또는 EC2인스턴스에서 들어오고 나가는 트래픽을 제어하는 방화벽이다.
보안 그룹 안에는 허용 규칙만 있고 IP 주소를 참조하거나 다른 보안 그룹을 차조할 수 있다. 이는 두 번쨰 메너니즘인 셈이다!
- 오직 규칙을 허용한다.
- 상태 유지이므로 반환되는 트래픽은 규칙에 상관없이 자동으로 허용된다.
3-3. VPC Flow Logs
트래픽 흐름에 대한 정보,즉 로그를 얻을 수 있는 방법이다.
인터페이스로 가는 모든 IP 주소 관련 정보를 캡처하며 VPC Flow를 포함해 서브넷,ENI이 존재한다. 이는 네트워크에 문제가 있을때 이를 해결고자 VPC Flow Logs를 활용하면 문제점을 바로 찾을 수 있다.
4. VPC와 다른 구조 연결 방법
4-1. VPC Peering
서로 다른 계정이나 다른 리전에 있는 클라우드를 같은 네트워크에 있는 것처럼 연결하기 위한기능이다.
아래 그림을 예시로 설명해보자! 먼저 서로 다른 계정 또는 리전에 있는 VPC A,B,C가 있다고 가정하자, 이떄 A와 B를 같은 네트워크에 있는 것처럼 통신을 가능하게 하고싶다면 A와 B를 VPC Peering을 설정해 연결하면 ㅅ끝!! 그렇다면 A와C사이에 VPC Peering을 설정하면 A,B,C모두 같은 네트워크일까??? 아니다!!.. ㅠㅠ VPC Peering은 전이가 되는 것은 아니다. 그렇기 떄문에 A,B or A,C는 통신은 가능하지만 C,B는 불가능하다. 만약 둘을 통신하고싶으면 C,B사이에 새로은 VPC Peering을 설정해야된다! 꼭 기억하자!
4-2. VPC Endpoints(시험에 무조건 출제가능한 장이니 잘알아둬야해!)
Endpoint는 사설 네트워크를 이용해 AWS 서비스를 연결해준다!!!!!!!!!!!!!! 즉 공용 인터넷 네트워크를 대신해서!!
EC2인스턴스는 공용 서브넷에 연결되지 않을 수 있는데 이때 AWS 서비스에 비공개로 접근해야된다. 이떄 VPC Endpoints를 사용해야된다. 이는 보안 수준을 향상하고 지연 시간을 단축시킬 수 있다.
아래 그림을 예시로 설명해보자
Private Subnet안에 EC2 인스턴스가 있다. 이제 EC2는 S3와 DynamoDB에 접근하고자한다. 이때 VPC EndPoint 게이트웨이를 생성하면 S3와 DynamoDB를 위한 통로가 생성되는 것이다. 이로서 EC2는 EndPoint로 S3,DB를 비공개로 접근한다. 즉 인터넷을 통해 접근하는게 아닌것이다.
추가적으로 VPC Endpoint interface를 만들 수 있다. 이는 CloudWatch에 비공개로 접근할 수 있다!
4-3 On-premises DC의 연결
Site to Sit VPN & Direct Connect 방법이 있다. 만약 이 둘의 방법을 사용한다면 VPC Endpoint방법은 사용할 수 없다는 것은 명심하자!!
4-3-1. Site to Sit VPN
온 프레미스 VPN장치를 AWS에 연결하는 것이다. 이때 연결은 자동으로 암호화되어 인터넷에 공개 연결된다.
VPC사이에 VPN을 설정해 쉽고 빠르다.
4-3-2. Direct Connect
이는 물리적으로 연결하는데 공개된 인터넷을 통하는 것이 아닌 비공개 회선으로 통신하는 것이다. 즉 공개된 인터넷을 통하지 않아 보안이 높지만 한달 이상의 구축 비용이 든다는 단점이 있다.
-요약!