다음을 통해 공유


Application Gateway 및 API Management를 사용하여 API 보호

Azure API Management
Azure Application Gateway

조직은 점점 더 많은 웹 애플리케이션에 대한 위협에 직면하면서 API 우선 디자인 접근 방식을 채택하고 있습니다. 특히 AI 기반 API를 노출하고 제로 트러스트 아키텍처 원칙을 구현하는 경우 API를 보호하기 위한 포괄적인 보안 전략이 필요합니다. 게이트웨이 라우팅 패턴은 네트워크 트래픽을 보호하여 API 보안에 대한 한 가지 접근 방식을 제공합니다. 게이트웨이는 유연한 라우팅 규칙을 지원하면서 트래픽 원본 위치 및 트래픽 품질을 제한합니다. 이 문서에서는 Azure Application Gateway 및 Azure API Management를 사용하여 API 액세스를 보호하는 방법을 설명합니다.

Architecture

이 문서에서는 App Service Environment, Azure SQL Managed Instance 및 AKS(Azure Kubernetes Service)와 같은 애플리케이션의 기본 플랫폼을 다루지 않습니다. 다이어그램의 이러한 부분에서는 보다 광범위한 솔루션으로 구현할 수 있는 항목을 보여 줄 수 있습니다. 이 문서에서는 음영 처리된 영역, API Management 및 Application Gateway에 대해 구체적으로 설명합니다.

Application Gateway 및 API Management에서 API를 보호하는 방법을 보여 주는 다이어그램

이 아키텍처의 Visio 파일을 다운로드합니다.

Workflow

  1. Application Gateway는 서브넷의 NSG(네트워크 보안 그룹)에서 허용하는 HTTPS 요청을 받습니다.

  2. Application Gateway의 WAF(웹 애플리케이션 방화벽)는 지오매치 사용자 지정 규칙을 포함하여 WAF 규칙에 대한 요청을 확인합니다. 요청이 유효한 경우 요청이 진행됩니다.

  3. Application Gateway는 적절한 백 엔드 풀에 요청을 보내는 URL 프록시 메커니즘을 설정합니다. 라우팅 동작은 API 호출의 URL 형식에 따라 달라집니다.

    • 요청된 API와 상호 작용하기 위해 백 엔드에 도달할 수 있는 api.<some-domain>/external/* 형식으로 지정된 URL입니다.

    • 대상이 없는 백 엔드 풀인 api.<some-domain>/*이라는 막다른 끝으로 이동으로 형식 이 지정된 호출입니다.

    • Application Gateway 수준의 라우팅 규칙은 사용자를 개발자 포털로 portal.<some-domain>/* 리디렉션합니다. 개발자는 내부 및 외부 환경 모두에서 API 및 해당 구성을 관리할 수 있습니다. 또는 개발자 포털을 완전히 차단할 수 있습니다.

  4. Application Gateway는 동일한 Azure 가상 네트워크의 리소스에서 내부 호출을 수락하고 프록시합니다 api.<some-domain>/internal/*.

  5. API Management 수준에서 API는 다음 패턴에 따라 호출을 수락합니다.

    • api.<some-domain>/external/*
    • api.<some-domain>/internal/*

    이 시나리오에서 API Management는 공용 및 개인 IP 주소를 사용합니다. 공용 IP 주소는 관리 평면에 대한 포트 3443 및 외부 가상 네트워크 구성의 런타임 API 트래픽에 대한 관리 작업을 지원합니다. API Management에서 공용 인터넷 연결 백 엔드에 요청을 보내면 공용 IP 주소는 요청 원본으로 표시됩니다. 자세한 내용은 가상 네트워크에서 API Management의 IP 주소를 참조하세요.

Components

  • Azure Virtual Network 를 사용하면 다양한 유형의 Azure 리소스가 서로, 인터넷 및 온-프레미스 네트워크와 비공개로 통신할 수 있습니다. 이 아키텍처에서 Application Gateway는 공용 인터넷 트래픽을 이 프라이빗 네트워크로 터널합니다.

  • Application Gateway 는 웹 애플리케이션에 대한 트래픽을 관리하는 웹 트래픽 부하 분산 장치입니다. 이러한 유형의 라우팅을 애플리케이션 계층(OSI 계층 7) 부하 분산이라고 합니다. 이 아키텍처에서 게이트웨이는 라우팅을 제공하고 일반적인 웹 기반 공격 벡터로부터 보호하기 위해 WAF를 호스트합니다.

  • API Management 모든 환경에서 API를 위한 하이브리드 다중 클라우드 관리 플랫폼입니다. API Management는 기존 백 엔드 서비스에 대한 일관되고 최신 API 게이트웨이를 만듭니다. 이 아키텍처에서 API Management는 완전히 프라이빗 모드로 작동하여 API 코드 및 호스트에서 교차 절단 문제를 오프로드합니다.

Alternatives

다른 서비스를 사용하여 비슷한 수준의 방화벽 및 WAF 보호를 제공할 수 있습니다.

Recommendations

이 아키텍처는 전체 솔루션을 구현하고 API Management 가상 네트워크 내부 및 외부에서 API 액세스를 테스트하는 데 중점을 둡니다. 통합 프로세스에 대한 자세한 내용은 Application Gateway를 사용하여 내부 가상 네트워크에 API Management 통합을 참조하세요.

백 엔드의 프라이빗 리소스와 통신하려면 Application Gateway 및 API Management를 리소스와 동일한 가상 네트워크 또는 피어된 가상 네트워크에 배치합니다.

  • 프라이빗 내부 배포 모델을 사용하면 API Management가 기존 가상 네트워크에 연결할 수 있으므로 해당 네트워크 컨텍스트 내에서 연결할 수 있습니다. 이 기능을 사용하도록 설정하려면 클래식 가상 네트워크 주입을 위한 개발자 또는 프리미엄 API Management 계층을 배포합니다. 최신 가상 네트워크 옵션의 경우 가상 네트워크 통합 또는 삽입 기능이 있는 표준 v2 또는 프리미엄 v2 계층을 사용합니다.

  • 클라이언트가 다른 구독에서 작동하거나 다른 Microsoft Entra ID 디렉터리로 관리되는 경우 Application Gateway용 Azure Private Link 를 사용하여 구독 및 지역의 클라이언트 가상 네트워크에서 Application Gateway에 대한 프라이빗 연결을 제공합니다.

  • Azure Key Vault에서 Application Gateway 인증서를 관리합니다.

  • 서비스와의 상호 작용을 개인 설정하려면 CNAME(정식 이름) 항목을 사용할 수 있습니다.

Considerations

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일련의 기본 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Well-Architected Framework를 참조하세요.

Reliability

안정성은 애플리케이션이 고객에 대한 약정을 충족할 수 있도록 하는 데 도움이 됩니다. 자세한 내용은 안정성 대한디자인 검토 검사 목록을 참조하세요.

Application Gateway는 인스턴스 수에 관계없이 항상 고가용성 구성으로 배포됩니다. 영역 오작동의 영향을 줄이기 위해 여러 가용성 영역에 걸쳐 애플리케이션 게이트웨이를 구성할 수 있습니다. 자세한 내용은 자동 크기 조정 및 고가용성을 참조하세요.

API Management 서비스 구성 요소에 대한 영역 중복을 사용하도록 설정하여 복원력과 고가용성을 제공합니다. 영역 중복은 물리적으로 구분된 영역의 데이터 센터에서 API Management 게이트웨이 및 컨트롤 플레인을 복제합니다. 이 구성은 영역 오류에 대한 복원력을 제공합니다. 가용성 영역을 지원하려면 API Management 프리미엄 계층을 사용해야 합니다.

또한 API Management는 다중 리소스 배포를 지원하므로 한 지역이 오프라인 상태가 되면 가용성을 향상시킬 수 있습니다. 자세한 내용은 Multiregion 지원을 참조하세요. Application Gateway는 지역 서비스이므로 이 토폴로지에서 각 지역에 대해 하나의 애플리케이션 게이트웨이를 배포합니다.

Security

보안은 의도적인 공격 및 중요한 데이터 및 시스템의 오용에 대한 보증을 제공합니다. 자세한 내용은 보안 대한디자인 검토 검사 목록을 참조하세요.

Application Gateway 보안에 대한 자세한 내용은 Application Gateway에 대한 Azure 보안 기준을 참조하세요.

API Management 보안에 대한 자세한 내용은 API Management에 대한 Azure 보안 기준을 참조하세요.

항상 다음 보안 조치를 구현합니다.

  • 최신 OWASP(Open Web Application Security Project) CRS(핵심 규칙 집합) 3.2 이상에서 Azure 웹 애플리케이션 방화벽 정책을 사용하여 OWASP 상위 10개 위협을 비롯한 일반적인 웹 취약성으로부터 보호합니다.

  • 지리적 위치에 따라 트래픽을 차단하거나 허용하도록 WAF 지오매치 사용자 지정 규칙을 구성합니다. 이 방법은 DDoS 공격에 대한 몇 가지 보호를 제공합니다.

  • Application Gateway와 함께 Azure Web Application Firewall을 사용하여 애플리케이션 (계층 7) DDoS 보호를 사용하도록 설정하여 볼륨 및 프로토콜 기반 공격으로부터 보호합니다. Azure DDoS Protection을 애플리케이션 디자인 사례와 결합하여 DDoS 완화 기능을 향상시킵니다.

  • API Management 에 프라이빗 엔드포인트를 사용하여 보안 인바운드 연결을 제공합니다.

  • API용 Microsoft Defender를 사용하도록 설정하여 API 보안 상태를 모니터링하고 위협을 검색합니다.

  • 악성 봇을 식별하고 차단하도록 WAF 봇 보호 규칙을 구성합니다.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 개선하는 방법에 중점을 둡니다. 자세한 내용은 비용 최적화 대한디자인 검토 검사 목록을 참조하세요.

이 아키텍처의 비용은 다음과 같은 몇 가지 구성 측면에 따라 달라집니다.

  • 서비스 계층: 비용 효율성과 성능을 향상시키려면 API Management용 Standard v2 및 Premium v2 계층을 고려합니다.

  • 확장성: 서비스는 지정된 수요를 지원하기 위해 인스턴스 수를 동적으로 할당합니다.

  • 런타임 기간: 비용은 아키텍처가 지속적으로 실행되는지 아니면 매월 몇 시간만 실행되는지에 따라 달라집니다.

  • 데이터 전송: 다중Region 배포는 지역 간 전송 비용이 발생합니다.

  • WAF 처리: 비용은 평가된 요청 및 규칙의 수에 따라 달라집니다.

다음 비용 최적화 전략을 고려합니다.

이러한 측면을 평가한 후 Azure 가격 계산기를 사용하여 가격을 예측합니다.

운영 효율성

운영 우수성은 애플리케이션을 배포하고 프로덕션에서 계속 실행하는 운영 프로세스를 다룹니다. 자세한 내용은 Operational Excellence에 대한 디자인 검토 검사 목록을 참조하세요.

포괄적인 모니터링 및 관찰 가능성을 구현합니다.

성능 효율성

성능 효율성은 사용자 요구를 효율적으로 충족하기 위해 워크로드의 크기를 조정하는 기능을 의미합니다. 자세한 내용은 성능 효율성 대한디자인 검토 검사 목록을 참조하세요.

Application Gateway는 이 아키텍처의 진입점 역할을 하며, Azure 웹 애플리케이션 방화벽 기능을 사용하려면 각 요청 분석에 대한 처리 능력이 필요합니다. Application Gateway가 요청 시 계산 용량을 확장할 수 있도록 하려면 자동 크기 조정을 사용하도록 설정합니다. 자세한 내용은 Application Gateway의 자동 크기 조정 및 영역 중복성을 참조하세요. 적절한 서브넷 크기 조정을 포함하여 Application Gateway 인프라 구성에 대한 제품 설명서 권장 사항을 따릅니다. 이 방법을 사용하면 서브넷이 전체 스케일 아웃을 지원할 수 있을 만큼 충분히 커집니다.

API Management에 대해 다음과 같은 성능 최적화를 고려합니다.

다음 단계

API를 디자인하려면 좋은 웹 API 디자인 지침을 따릅니다. API를 구현하려면 좋은 웹 API 구현 방법을 사용합니다.