외부 사용자에게 내부 API 게시

Azure API Management
Azure Application Gateway
Azure DevOps
Azure Monitor
Azure Virtual Network

이 시나리오에서 조직은 가상 네트워크 내부에 배포된 Azure API Management를 사용하여 내부에서 여러 API를 통합합니다.

아키텍처

외부 사용자가 사용하는 내부 API의 전체 수명 주기를 보여 주는 아키텍처 다이어그램

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

앞의 다이어그램에서는 외부 사용자가 사용하는 내부 API의 전체 수명 주기를 다룹니다.

데이터 흐름

데이터는 다음과 같이 흐릅니다.

  1. 개발자가 Azure VM에 설치된 CI/CD 파이프라인 에이전트에 연결된 GitHub 리포지토리에 코드를 체크 인합니다.
  2. 에이전트가 ILB ASE에서 호스트되는 API 애플리케이션에 빌드를 푸시합니다.
  3. Azure API Management API Management 정책에 지정된 HOST 헤더를 통해 이전 API를 사용합니다.
  4. API Management가 모든 API에 App Service Environment의 DNS 이름을 사용합니다.
  5. Application Gateway가 API Management의 개발자 및 API 포털을 노출합니다.
  6. Azure 프라이빗 DNS가 ASE, API Management, Application Gateway 간에 내부적으로 트래픽을 라우팅하는 데 사용됩니다.
  7. 외부 사용자는 노출된 개발자 포털을 활용하여 Application Gateway의 공용 IP를 통해 API를 사용합니다.

구성 요소

  • Azure Virtual Network를 통해 Azure 리소스가 상호 간, 인터넷 및 온-프레미스 네트워크와 안전하게 통신할 수 있습니다.
  • Azure 프라이빗 DNS를 통해 사용자 지정 DNS 솔루션을 추가할 필요 없이 가상 네트워크에서 도메인 이름을 확인할 수 있습니다.
  • Azure API Management를 통해 조직에서 외부, 파트너, 내부 개발자가 데이터 및 서비스를 사용하도록 API를 게시할 수 있습니다.
  • Application Gateway 웹 애플리케이션에 대한 트래픽을 관리하는 데 도움이 되는 웹 트래픽 부하 분산 장치입니다.
  • 내부 부하 분산 장치 App Service Environment는 대규모 App Service 앱을 안전하게 실행하기 위해 완전히 격리된 전용 환경을 제공하는 Azure App Service 기능입니다.
  • Azure DevOps는 개발 수명 주기를 관리할 수 있는 서비스이며 계획 및 프로젝트 관리, 코드 관리, 빌드, 릴리스를 위한 기능을 포함합니다.
  • Application Insights는 여러 플랫폼의 웹 개발자를 위한 확장성 있는 APM(Application Performance Management) 서비스입니다.
  • Azure Cosmos DB는 Microsoft의 전역 분산형 다중 모델 데이터베이스 서비스입니다.

대안

시나리오 정보

이 시나리오에서 organization ILB ASE(Azure 애플리케이션 Service Environment)를 사용하여 여러 API를 호스트하고 Virtual Network 내에 배포된 APIM(Azure API Management)을 사용하여 이러한 API를 내부적으로 통합하려고 합니다. 또한 내부 API Management 인스턴스를 외부 사용자에게 노출하여 API의 모든 잠재력을 활용할 수 있습니다. 이 외부 노출은 내부 API Management 서비스에 요청을 전달하는 Azure Application Gateway를 사용하여 수행할 수 있으며, 차례로 이 서비스는 ASE에 배포된 API를 사용합니다.

  • 웹 API는 보안 HTTPS 프로토콜을 통해 호스트되며 TLS 인증서를 사용합니다.
  • 또한 Application Gateway는 안정적인 보안 아웃바운드 호출을 위해 포트 443을 통해 구성됩니다.
  • API Management 서비스는 TLS 인증서를 사용하여 사용자 지정 도메인을 사용하도록 구성됩니다.
  • App Service Environment에 대해 제안된 네트워크 구성을 검토합니다.
  • Azure Portal 또는 PowerShell을 통해 관리할 수 있도록 API Management를 허용하는 포트 3443에 대한 명시적인 언급이 있어야 합니다.
  • APIM 내의 정책을 활용하여 ASE에서 호스트되는 API의 HOST 헤더를 추가합니다. 그러면 ASE의 부하 분산 장치가 요청을 제대로 전달합니다.
  • API Management는 App Service Environment에서 호스트되는 모든 앱에 대해 ASE의 DNS 항목을 수락합니다. ASE 부하 분산 장치가 App Service Environment에서 앱을 구분할 수 있도록 HOST 헤더를 명시적으로 설정하는 APIM 정책을 추가합니다.
  • Azure Application Insights와 통합하는 방안을 고려해 보세요. 이렇게 하면 모니터링용 Azure Monitor을 통해 메트릭이 표시됩니다.
  • 내부 API를 배포하는 데 CI/CD 파이프라인을 사용하는 경우 Virtual Network 내 VM에 자체 호스트된 에이전트를 빌드하는 것이 좋습니다.

잠재적인 사용 사례

  • 고객이 변경한 후 내부적으로 고객 주소 정보를 동기화합니다.
  • 고유한 데이터 자산을 노출하여 개발자를 플랫폼에 끌어들입니다.

고려 사항

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

안정성

안정성은 애플리케이션이 고객에 대한 약속을 충족할 수 있도록 합니다. 자세한 내용은 안정성 핵심 요소 개요를 참조하세요.

가용성

Azure API Management 서비스를 다중 지역 배포로 배포하여 더 높은 가용성을 제공하고 대기 시간을 줄일 수 있습니다. 이 기능은 프리미엄 모드에서만 사용할 수 있습니다. 이 특정 시나리오의 API Management 서비스는 App Service Environment의 API를 사용합니다. 내부 온-프레미스 인프라에서 호스트되는 API에 APIM을 사용할 수도 있습니다.

App Service Environment는 Traffic Manager 프로필을 사용하여 App Service Environment에 호스트된 트래픽을 분산함으로써 스케일링 성능과 가용성을 높일 수 있습니다.

복원력

이 예제 시나리오에서는 구성에 대해 자세히 설명하지만 App Service 환경에서 호스트되는 API는 요청의 오류를 처리할 수 있을 만큼 복원력이 있어야 하며, 결국 API Management 서비스 및 Application Gateway 의해 관리됩니다. API 디자인에서 재시도 및 회로 차단기 패턴을 사용하는 것이 좋습니다. 복원력 있는 솔루션 설계에 대한 일반적인 지침은 복원력 있는 Azure 애플리케이션 디자인을 참조하세요.

보안

우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.

앞의 예제 시나리오는 내부 네트워크에서 완전히 호스트되므로 API Management 및 ASE는 이미 보안 인프라(Azure VNet)에 배포되어 있습니다. Application Gateway를 클라우드용 Microsoft Defender 통합하여 환경에 대한 위협을 방지, 감지 및 대응하는 원활한 방법을 제공할 수 있습니다. 보안 솔루션 설계 방법에 대한 일반적인 지침은 Azure 보안 문서를 참조하세요.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

API Management는 개발자, 기본, 표준 및 프리미엄의 네 가지 계층으로 제공됩니다. 계층 간 차이점은 Azure API Management 가격 책정 지침에서 확인할 수 있습니다.

고객은 단위를 추가하고 제거하여 API Management 크기를 조정할 수 있습니다. 각 단위의 용량은 해당 계층에 따라 다릅니다.

참고

개발자 계층을 사용하여 API Management 기능을 평가할 수 있습니다. 프로덕션에 개발자 계층을 사용하면 안 됩니다.

예상 비용을 살펴보고 배포 요구 사항에 맞게 사용자 지정하려면 Azue 가격 책정 계산기에서 배율 단위 및 App Service 인스턴스의 수를 수정하면 됩니다.

마찬가지로 App Service 환경 가격 책정 지침을 찾을 수 있습니다.

필요한 계층 및 리소스에 따라 Application Gateway 가격을 구성할 수 있습니다.

성능 효율성

성능 효율성은 사용자가 배치된 요구 사항을 효율적인 방식으로 충족하기 위해 워크로드의 크기를 조정할 수 있는 기능입니다. 자세한 내용은 성능 효율성 핵심 요소 개요를 참조하세요.

확장성

동시 연결 수 및 속도, 구성된 정책의 종류 및 수, 요청 및 응답 크기, API의 백 엔드 대기 시간과 같은 여러 요인에 따라 API Management 인스턴스를 스케일 아웃할 수 있습니다. instance 스케일 아웃 옵션은 기본, 표준 및 프리미엄 계층에서 사용할 수 있지만 기본 및 표준 계층의 상한값에 의해 바인딩됩니다. 인스턴스를 단위라고 하며 기본 계층에서는 최대 2개 단위, 표준 계층에서는 최대 4개 단위, 프리미엄 계층에서는 원하는 단위 개수로 스케일링할 수 있습니다. 자동 스케일링 옵션을 사용하면 규칙에 따라 스케일 아웃을 사용하도록 설정할 수 있습니다.

App Service 환경은 가격 책정 계층에 따라 한도로 크기 조정을 위해 설계되었습니다. App Service 환경에서 호스트되는 앱을 구성하여 애플리케이션의 요구 사항에 따라 스케일 아웃(인스턴스 수) 또는 스케일 업(instance 크기)할 수 있습니다.

Azure Application Gateway 자동 스케일링은 모든 글로벌 Azure 지역에서 영역 중복 SKU의 일부로 사용할 수 있습니다. App Gateway 자동 스케일링에 관한 퍼블릭 미리 보기 기능을 참조하세요.

시나리오 배포

필수 조건 및 가정

  1. 사용자 지정 도메인 이름을 구입해야 합니다.
  2. 모든 사용자 지정 도메인에 TLS 인증서를 사용하려면 TLS 인증서(Azure Certificates Service의 와일드카드 인증서 사용)가 필요합니다. 개발자 테스트 시나리오에 대해 자체 서명된 인증서를 조달할 수도 있습니다.
  3. 이 특정 배포는 도메인 이름 contoso.org 및 도메인에 대한 와일드카드 TLS 인증서를 사용합니다.
  4. 배포는 배포 섹션에 언급된 리소스 이름 및 주소 공간을 사용합니다. 리소스 이름 및 주소 공간을 구성할 수 있습니다.

배포 및 완성

Azure에 배포

다음과 같이 이전 Resource Manager 템플릿을 사용하여 배포된 구성 요소를 추가로 구성해야 합니다.

  1. 다음 구성이 적용된 VNet:

    • 이름: ase-internal-vnet
    • VNet 주소 공간: 10.0.0.0/16
    • 서브넷 4개
      • DNS 서비스용 backendSubnet: 10.0.0.0/24
      • 내부 API Management 서비스용 apimsubnet: 10.0.1.0/28
      • ILB ASE용 asesubnet: 10.0.2.0/24
      • 테스트 VM 및 내부 DevOps 호스트된 에이전트 VM용 VMSubnet: 10.0.3.0/24
  2. DNS 서비스를 추가하려면 VNet이 비어 있어야 하므로 프라이빗 DNS 서비스(퍼블릭 미리 보기)

  3. ILB(내부 부하 분산 장치) 옵션이 포함된 App Service Environment: aseinternal(DNS: aseinternal.contoso.org). 배포가 완료되면 ILB용 와일드카드 인증서를 업로드합니다.

  4. ASE를 위치로 사용하는 App Service 요금제

  5. API 앱(편의상 App Service) - srasprest(URL: https://srasprest.contoso.org) - ASP.NET MVC 기반 웹 API. 배포 후 다음을 구성합니다.

    • TLS 인증서를 사용하는 웹앱
    • 이전 앱에 대한 Application Insights: api-insights
    • VNet 내부에서 호스트되는 웹 API용 Azure Cosmos DB 서비스를 만듭니다(noderestapidb).
    • 만든 프라이빗 DNS 영역에 DNS 항목을 만듭니다.
    • Azure Pipelines를 사용하여 내부 네트워크에 웹앱에 대한 코드를 배포하도록 Virtual Machines 에이전트를 구성할 수 있습니다.
    • 내부적으로 API 앱을 테스트하려면 VNet 서브넷 내에 테스트 VM을 만듭니다.
  6. API Management 서비스 만들기:apim-internal

  7. 서브넷의 내부 VNet에 연결하도록 서비스를 구성합니다(apimsubnet). 배포가 완료되면 다음 추가 단계를 수행합니다.

    • TLS를 사용하여 APIM 서비스의 사용자 지정 도메인 구성
      • API 포털(api.contoso.org)
      • 개발자 포털(portal.contoso.org)
      • API 섹션에서 웹앱의 HOST 헤더에 대한 ASE의 DNS 이름이 추가된 정책을 사용하여 ASE 앱을 구성합니다.
      • 이전에 만든 테스트 VM을 사용하여 Virtual Network 내부 API Management 서비스를 테스트합니다.

    참고

    api.contoso.org 공개적으로 확인할 수 없으므로 Azure Portal API 테스트는 작동하지 않습니다.*

  8. 포트 80에서 API 서비스: apim-gateway에 액세스하도록 Application Gateway(WAF V1)을 구성합니다. Application Gateway 및 해당 상태 프로브 및 http 설정에 TLS 인증서를 추가합니다. 또한 TLS 인증서를 사용하도록 규칙 및 수신기를 구성합니다.

이전 단계가 성공적으로 완료되면 api.contoso.org 웹 등록 기관 CNAME 항목에서 DNS 항목을 구성하고 Application Gateway 공용 DNS 이름으로 ase-appgtwy.westus.cloudapp.azure.comportal.contoso.org. 공용에서 개발자 포털에 연결할 수 있고 Azure Portal 사용하여 APIM 서비스 API를 테스트할 수 있는지 확인합니다.

참고

APIM 서비스에 대해 내부 및 외부 엔드포인트에 대해 동일한 URL을 사용하는 것은 좋지 않습니다(이 데모에서는 두 URL이 동일하지만). 내부 및 외부 엔드포인트에 대해 다른 URL을 사용하도록 선택하는 경우 http 리디렉션 등을 지원하는 Application Gateway WAF v2를 사용할 수 있습니다.

참가자

Microsoft에서 이 문서를 유지 관리합니다. 이 문서를 처음에 작성한 기여자는 다음과 같습니다.

보안 주체 작성자:

기타 기여자:

비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.

다음 단계

Azure API Management를 사용하여 웹앱 마이그레이션