Amazon Web Services 한국 블로그

Amazon VPC Lattice 정식 출시 – 서비스 간 연결, 보안 및 모니터링 간소화

AWS re:Invent 2022에서 Amazon Virtual Private Cloud(VPC)의 새로운 기능인 Amazon VPC Lattice 평가판이 소개되었습니다. 이 기능을 사용하면 서비스 간 통신을 연결, 보안 및 모니터링하기 위한 일관적인 방법이 제공됩니다. VPC Lattice를 사용하면 네트워크 액세스, 트래픽 관리 및 모니터링에 대한 정책을 정의하여 인스턴스, 컨테이너 및 서버리스 애플리케이션 간에 컴퓨팅 서비스를 연결할 수 있습니다.

오늘 VPC Lattice가 정식 버전으로 출시되었습니다. 평가판과 비교했을 때 다음과 같은 새로운 기능을 이용할 수 있습니다.

  • 서비스에서는 VPC Lattice에서 자동으로 생성되는 도메인 이름 외에 사용자 지정 도메인 이름을 사용할 수 있습니다. HTTPS를 사용하는 경우, 사용자 지정 도메인 이름과 일치하는 SSL/TLS 인증서를 구성할 수 있습니다.
  • 오픈 소스 AWS Gateway API 컨트롤러를 배포하여 Kubernetes 네이티브 환경에서 VPC Lattice를 사용할 수 있습니다. Kubernetes Gateway API를 사용하여 여러 Kubernetes 클러스터에 걸친 서비스 및 EC2 인스턴스, 컨테이너 및 서버리스 함수에서 실행되는 서비스를 연결할 수 있습니다.
  • Application Load Balancer(ALB) 또는 Network Load Balancer(NLB)를 서비스의 대상으로 사용할 수 있습니다.
  • 이제 IP 주소 대상 유형이 IPv6 연결을 지원합니다.

이 새로운 기능의 작동 방식을 직접 살펴봅시다.

서비스 간 연결을 위한 Amazon VPC Lattice 사용
VPC Lattice를 소개하는 이전 게시물에서 서비스 네트워크를 생성하고, 여러 VPC와 서비스를 연결하고, EC2 인스턴스 및 Lambda 함수에 대한 대상 그룹을 구성하는 방법을 보여주었습니다. 여기서는 요청 특성을 기반으로 트래픽을 라우팅하는 방법과 가중치 기반 라우팅을 사용하는 방법도 설명했습니다. 가중치 라우팅은 블루/그린 및 canary 스타일의 배포나 한 컴퓨팅 플랫폼에서 다른 컴퓨팅 플랫폼으로 마이그레이션하는 데 매우 유용합니다.

이제 VPC Lattice를 사용하여 전자 상거래 애플리케이션의 서비스가 서로 통신할 수 있도록 하는 방법을 살펴보겠습니다. 단순화를 위해 다음 네 가지 서비스만 고려합니다.

  • 주문 서비스는 Lambda 함수로 실행됩니다.
  • 인벤토리 서비스는 IPv6를 지원하는 이중 스택 VPCAmazon Elastic Container Service(Amazon ECS) 서비스로 배포됩니다.
  • 배송 서비스는 ALB를 사용하여 서비스 작업에 트래픽을 분산하는 ECS 서비스로 배포됩니다.
  • 결제 서비스는 EC2 인스턴스에서 실행됩니다.

먼저 서비스 네트워크를 만듭니다. 주문 서비스는 인벤토리 서비스(구매 가능 품목 확인), 배송 서비스(품목 배송 구성) 및 결제 서비스(대금 이체)를 호출해야 합니다. 다음 다이어그램은 서비스 네트워크 관점에서 본 서비스 간 통신을 보여줍니다.전자 상거래 서비스의 서비스 네트워크 보기를 설명하는 다이어그램.이러한 서비스는 서로 다른 AWS 계정과 여러 VPC에서 실행됩니다. VPC Lattice는 서비스 간 통신이 HTTP/HTTPS 호출만큼 간단하도록 VPC 경계 전반의 연결 및 계정 간 권한 설정의 복잡성을 처리합니다.

다음 다이어그램은 구현 관점에서 통신이 어떻게 진행되는지 보여줍니다.

전자 상거래 서비스의 구현 보기를 설명하는 다이어그램.

주문 서비스는 VPC에 연결된 Lambda 함수에서 실행됩니다. 다이어그램의 모든 VPC가 서비스 네트워크와 연결되어 있기 때문에 주문 서비스는 다른 서비스(인벤토리, 배송결제)를 호출할 수 있습니다. 이는 서비스가 서로 다른 AWS 계정과 겹치는 IP 주소가 있는 VPC에 배포되어 있더라도 마찬가지입니다.

Network Load Balancer(NLB)를 대상으로 사용
인벤토리 서비스는 이중 스택 VPC에서 실행됩니다. NLB와 함께 ECS 서비스로 배포되어 서비스의 작업에 트래픽을 분산합니다. NLB의 IPv6 주소를 가져오기 위해 EC2 콘솔에서 NLB가 사용하는 네트워크 인터페이스를 찾아봅니다.

콘솔 스크린샷.

인벤토리 서비스의 대상 그룹을 만들 때 기본 구성에서 IP 주소를 대상 유형으로 선택합니다. 그런 다음 IP 주소 유형으로 IPv6을 선택합니다.

콘솔 스크린샷.

다음 단계에서는 NLB의 IPv6 주소를 대상으로 입력합니다. 대상 그룹이 생성된 후 상태 확인은 대상을 테스트하여 예상대로 응답하는지 확인합니다.

콘솔 스크린샷.

Application Load Balancer(ALB)를 대상으로 사용
ALB를 대상으로 사용하는 것이 훨씬 더 쉽습니다. 배송 서비스의 대상 그룹을 만들 때 기본 구성에서 새 Application Load Balancer 대상 유형을 선택합니다.

콘솔 스크린샷.

ALB를 찾을 VPC를 선택하고 프로토콜 버전을 선택합니다.

콘솔 스크린샷.

다음 단계에서는 지금 등록을 선택하고 드롭다운에서 ALB를 선택합니다. 대상 그룹에서 사용하는 기본 포트를 사용합니다. VPC Lattice는 ALB에 대한 추가 상태 확인을 제공하지 않습니다. 하지만 로드 밸런서에는 이미 자체 상태 점검이 구성되어 있습니다.

콘솔 스크린샷.

서비스에 사용자 지정 도메인 이름 사용
이러한 서비스를 호출하려면 사용자 지정 도메인 이름을 사용합니다. 예를 들어 VPC 콘솔에서 결제 서비스를 만들 때 사용자 지정 도메인 구성을 지정하고, 사용자 지정 도메인 이름을 입력하고, HTTPS 리스너용 SSL/TLS 인증서를 선택합니다. 사용자 지정 SSL/TLS 인증서 드롭다운에는 AWS Certificate Manager(ACM)에서 사용할 수 있는 인증서가 표시됩니다.

콘솔 스크린샷.

서비스 간 통신 보안
이제 대상 그룹이 생성되었으니 서비스들이 서로 통신하는 방식을 어떻게 보호할 수 있는지 살펴보겠습니다. 제로 트러스트 인증 및 권한 부여를 구현하기 위해 AWS Identity and Access Management(IAM)를 사용합니다. 서비스를 생성할 때 AWS IAM인증 유형으로 선택합니다.

AWS API에서 사용하는 것과 동일한 서명 프로토콜인 서명 버전 4를 사용하여 서비스에 대한 요청에 서명하도록 하려면 인증된 액세스만 허용 정책 템플릿을 선택합니다. 이렇게 하면 서비스 간 요청이 IAM 자격 증명으로 인증되므로 통신 보안을 위해 보안 인증 정보를 관리할 필요가 없습니다.

콘솔 스크린샷.

선택 사항으로는 좀 더 정확한 방법으로 일부 서비스 또는 서비스의 특정 URL 경로에만 액세스할 수 있는 인증 정책을 사용할 수 있습니다. 예를 들어, 다음 인증 정책을 주문 서비스에 적용하여 Lambda 함수에 이러한 권한을 부여할 수 있습니다.

  • 인벤토리 서비스/재고 URL 경로에 대한 읽기 전용 액세스(GET 메서드).
  • 배달 서비스/배달 URL 경로에 대한 전체 액세스 권한(모든 HTTP 메서드).
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Inventory Service ARN>/stock",
            "Condition": {
                "StringEquals": {
                    "vpc-lattice-svcs:RequestMethod": "GET"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Delivery Service ARN>/delivery"
        }
    ]
}

VPC Lattice를 사용하여 보안 및 모니터링을 포함한 전자 상거래 애플리케이션의 서비스 간 통신을 신속하게 구성했습니다. 이제는 서비스가 서로 통신하는 방식을 관리하는 대신 비즈니스 로직에 집중할 수 있습니다.

가용성 및 요금
Amazon VPC Lattice는 현재 미국 동부(오하이오), 미국 동부(버지니아 북부), 미국 서부 (오레곤), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄) 및 유럽(아일랜드)의 AWS 리전에서 제공됩니다.

VPC Lattice를 사용하면 서비스가 프로비저닝된 시간, 각 서비스를 통해 전송된 데이터의 양, 요청 수에 대해 요금을 지불합니다. 매시간 처음 300,000건의 요청에 대해서는 요금이 부과되지 않으며 이 임계값을 초과하는 요청에 대해서만 요금을 지불하면 됩니다. 자세한 내용은 VPC Lattice 요금을 참조하세요.

시간이 지남에 따라 점진적인 옵트인을 허용하도록 VPC Lattice를 설계했습니다. 조직의 각 팀은 VPC Lattice를 사용할지 여부와 시기를 선택할 수 있습니다. 다른 애플리케이션은 HTTP 및 HTTPS와 같은 표준 프로토콜을 사용하여 VPC Lattice 서비스에 연결할 수 있습니다. VPC Lattice를 사용하면 인스턴스, 컨테이너 및 서버리스 컴퓨팅에 대한 일관된 지원을 통해 애플리케이션 로직에 집중하고 생산성과 배포 유연성을 개선할 수 있습니다.

VPC Lattice를 사용하여 서비스를 연결, 보호 및 모니터링하는 방식을 간소화하세요.

Danilo