안녕하세요.
오늘은 Azure 클라우드에서 구축한 아키텍쳐를 AWS 클라우드에서 배포했을 때 차이점과 신경써야할 부분에 대해 포스팅해보겠습니다.
# Azure

위 그림은 Azure 클라우드에서 구현한 Hub & Spoke 아키텍쳐로 최상단에 Application Gateway가 있고 백엔드의 서비스는 각 AKS 의 Ingress-Controller로 배포되어 있습니다.
Application Gateway로 트래픽이 들어오면 호스트 헤더 기반으로 각 Ingress Controller로 로드밸런싱됩니다.
AGW와 백엔드 중간에 Azure Firewall를 두어 패킷 검사를 진행해야 하기 때문에 서브넷에는 UDR을 설정하여 패킷이 방화벽을 통과하게 합니다.
(*참고로 Azure Firewall에는 X-Forwarded-For 정책 설정이 불가능하기 때문에 Client IP 기반으로 필터링을 하지 못합니다.
그래서 실제 환경에서는 3rd-Party 방화벽을 도입하였습니다.)
그리고 각 백엔드 서브넷에서도 UDR을 설정하여 요청 패킷에 대한 응답 패킷이 Azure Firewall를 거치게합니다.
(Azure Firewall의 경우 요청 패킷과 응답 패킷이 경로가 다르면 방화벽에서 패킷을 차단하여 통신이 되지 않습니다.
자세한 내용은 여기서 Azure - Firewall 통신 확인하기 확인 부탁드립니다.)
# AWS
개인적으로 AWS와 Azure의 가장 큰 차이점은 경로 지정이라고 생각합니다.
Azure에서 네트워크 간 Peering을 맺으면 따로 route table을 설정하지 않아도 자동적으로 통신이 가능하게 됩니다.
심지어 보안그룹도 따로 설정하지 않아도 통신에는 문제가 없습니다.
그러나 AWS는 다릅니다.
네트워크 간 peering을 맺을 경우 Route Table을 통해서 "특정 IP 대역으로 가야되는 경우 Peerint Endpoint로 가라" 이런식으로 일일이 지정해주어야합니다.
Hub & Spoke 간 통신의 경우 spoke1에서 spoke2로 향할 때 Hub의 방화벽을 거쳐야하는데 spoke2 대역으로 가야할 경우 Hub와 맺은 Peering endpoint로 보내는 것은 가능하나 Hub VPC에서 정확하게 방화벽을 지정할 방법이 없습니다.
그래서 따로 `Transit Gateway` 라는 리소스를 사용하여야합니다.
Transit Gateway를 배포하면 서브넷을 지정하게 되는데요.

서브넷을 지정하면 위 그림과 같이 해당 서브넷에 Transit Gateway용 ENI가 생성됩니다.
그리고 Transit Gateway용 route table이 따로 존재하여 transit gateway용 route table을 이용하여 각 Transit Gateway와 연결되어 있는 VPC의 서브넷에 배포되어 있는 Transit Gateway용 ENI로 트래픽을 보낼 수 있게됩니다.
이제 해당 ENI가 배포되어 있는 서브넷에 vpc route table을 설정하여 방화벽을 통하게 할 수 있습니다.

그리고 한 가지 중요한 점은 Transit Gateway의 경우 가용 영역당 무조건 하나 이상의 서브넷이 필요합니다.
만약 통신하고자 하는 리소스가 c 가용영역에 있고 transit gateway는 a 가용영역에 있을 경우 통신이 불가능합니다.

Azure 환경과 같은 기능을 할 수 있게 AWS에서 배포한 환경입니다.
앞서 말씀드린대로 VPC 간 통신을 위해 Transit Gateway를 배포하였고
Azure Firewall 대신 AWS Network Firewall를 배포하였습니다.
AWS Network Firewall도 Azure와 마찬가지로 XFF를 통한 방화벽 정책 수립은 불가능하기 때문에 만약 위와 같은 환경이 AWS에서 필요하실 경우 3rd-party 솔루션이 필요할 것 같습니다.
그리고 AWS의 경우 ALB 7계층 로드밸런서를 생성할 때 반드시 2개 이상의 가용 영역이 필요하여 가용 영역이 다른 두 서브넷이 필요합니다.
그리고 Transit Gateway와 마찬가지로 서브넷을 지정하면 ENI가 생성되어 해당 ENI로 백엔드와 통신하게 됩니다.
만약 백엔드가 b 영역인데 ALB는 A,C 영역에만 배포되어 있다면 ALB는 B에 배포되어 있는 타겟그룹은 헬스체크를 하지 못합니다.
감사합니다.