Application Gateway Web Application Firewall 사용하여 Azure Container Apps 보호
Azure Container Apps에서 앱 또는 마이크로 서비스를 호스트하는 경우 항상 인터넷에 직접 게시하지 않으려는 것은 아닙니다. 대신 역방향 프록시를 통해 노출할 수 있습니다.
역방향 프록시는 하나 이상의 서비스 앞에 배치되어 들어오는 트래픽을 적절한 대상으로 가로채고 지시하는 서비스입니다.
역방향 프록시를 사용하면 다음을 비롯한 교차 절단 기능을 지원하는 서비스를 앱 앞에 배치할 수 있습니다.
- 라우팅
- 캐싱
- 속도 제한
- 부하 분산
- 보안 계층
- 요청 필터링
이 문서에서는 내부 Container Apps 환경에서 Azure Application Gateway WAF(Web Application Firewall)를 사용하여 컨테이너 앱을 보호하는 방법을 보여 줍니다.
Container Apps의 네트워킹 개념에 대한 자세한 내용은 Azure Container Apps의 네트워킹 환경을 참조하세요.
필수 조건
사용자 지정 VNet을 사용하는 내부 환경: 내부 환경에 있고 사용자 지정 가상 네트워크와 통합된 컨테이너 앱이 있습니다. 사용자 지정 가상 네트워크 통합 앱을 만드는 방법에 대한 자세한 내용은 내부 Azure Container Apps 환경에 가상 네트워크 제공을 참조하세요.
보안 인증서: 애플리케이션 게이트웨이에 TLS/SSL 암호화를 사용해야 하는 경우 애플리케이션 게이트웨이에 바인딩하는 데 사용되는 유효한 공용 인증서가 필요합니다.
컨테이너 앱의 도메인 검색
다음 단계를 사용하여 기본 도메인 및 고정 IP의 값을 검색하여 프라이빗 DNS 영역을 설정합니다.
포털의 리소스 그룹 개요 창에서 컨테이너 앱을 선택합니다.
컨테이너 앱 리소스에 대한 개요 창에서 Container Apps 환경 링크를 선택합니다.
컨테이너 앱 환경 리소스에 대한 개요 창에서 페이지의 오른쪽 위 모서리에 있는 JSON 보기를 선택하여 컨테이너 앱 환경의 JSON 표현을 봅니다.
defaultDomain 및 staticIp 속성의 값을 복사하여 텍스트 편집기에 붙여넣습니다. 다음 섹션에서 기본 도메인에 대해 이러한 값을 사용하여 프라이빗 DNS 영역을 만듭니다.
Azure 프라이빗 DNS 영역 구성
Azure Portal 메뉴 또는 홈 페이지에서 리소스 만들기를 선택합니다.
프라이빗 DNS 영역을 검색하고 검색 결과에서 프라이빗 DNS 영역을 선택합니다.
생성 단추를 선택합니다.
다음 값을 입력합니다.
설정 작업 구독 Azure 구독을 선택합니다. Resource group 컨테이너 앱의 리소스 그룹을 선택합니다. 이름 이전 섹션에서 Container Apps Environment의 defaultDomain 속성을 입력합니다. 리소스 그룹 위치 기본값으로 둡니다. 프라이빗 DNS 영역이 전역이므로 값이 필요하지 않습니다. 검토 + 만들기를 선택합니다. 유효성 검사가 완료되면 만들기를 선택합니다.
프라이빗 DNS 영역을 만든 후 리소스로 이동을 선택합니다.
개요 창에서 +레코드 집합을 선택하여 새 레코드 집합을 추가합니다.
레코드 집합 추가 창에 다음 값을 입력합니다.
설정 작업 이름 *를 입력합니다. Type A-주소 레코드를 선택합니다. TTL 기본값을 유지합니다. TTL 단위 기본값을 유지합니다. IP 주소 이전 섹션에서 Container Apps Environment의 staticIp 속성을 입력합니다. 확인을 선택하여 레코드 집합을 만듭니다.
+레코드 집합을 다시 선택하여 두 번째 레코드 집합을 추가합니다.
레코드 집합 추가 창에 다음 값을 입력합니다.
설정 작업 이름 @를 입력합니다. Type A-주소 레코드를 선택합니다. TTL 기본값을 유지합니다. TTL 단위 기본값을 유지합니다. IP 주소 이전 섹션에서 Container Apps Environment의 staticIp 속성을 입력합니다. 확인을 선택하여 레코드 집합을 만듭니다.
페이지 왼쪽의 메뉴에서 가상 네트워크 링크 창을 선택합니다.
+추가를 선택하여 다음 값으로 새 링크를 만듭니다.
설정 작업 링크 이름 my-custom-vnet-pdns-link를 입력합니다. 가상 네트워크의 리소스 ID를 알고 있음 선택 취소된 상태로 둡니다. 가상 네트워크 컨테이너 앱이 통합된 가상 네트워크를 선택합니다. 자동 등록 사용 선택 취소된 상태로 둡니다. 확인을 선택하여 가상 네트워크 링크를 만듭니다.
Azure Application Gateway 만들기 및 구성
기본 사항 탭
프로젝트 세부 정보 섹션에서 다음 값을 입력합니다.
설정 작업 구독 Azure 구독을 선택합니다. Resource group 컨테이너 앱의 리소스 그룹을 선택합니다. Application Gateway 이름 my-container-apps-agw를 입력합니다. 지역 컨테이너 앱이 프로비전된 위치를 선택합니다. 계층 WAF V2를 선택합니다. WAF가 필요하지 않은 경우 표준 V2를 사용할 수 있습니다. 자동 크기 조정 사용 기본값으로 둡니다. 프로덕션 환경의 경우 자동 크기 조정이 권장됩니다. Azure Application Gateway 자동 크기 조정을 참조하세요. 가용성 영역 없음을 선택합니다. 프로덕션 환경의 경우 고가용성을 위해 가용성 영역이 권장됩니다. HTTP2 기본값을 유지합니다. WAF 정책 새로 만들기를 선택하고 WAF 정책에 my-waf-policy를 입력합니다. 확인을 선택합니다. 계층에 대해 표준 V2를 선택한 경우 이 단계를 건너뜁니다. 가상 네트워크 컨테이너 앱이 통합된 가상 네트워크를 선택합니다. 서브넷 서브넷 구성 관리를 선택합니다. 사용하려는 서브넷이 이미 있는 경우 대신 사용하고 프런트 엔드 섹션으로 건너뜁니다. my-custom-vnet의 서브넷 창 내에서 +서브넷을 선택하고 다음 값을 입력합니다.
설정 작업 이름 appgateway-subnet을 입력합니다. 서브넷 주소 범위 기본값을 유지합니다. 나머지 설정의 경우 기본값을 유지합니다.
저장 을 선택하여 새 서브넷을 만듭니다.
서브넷 창을 닫고 애플리케이션 게이트웨이 만들기 창으로 돌아갑니다.
다음 값을 선택합니다.
설정 작업 서브넷 만든 appgateway-subnet을 선택합니다. 다음: 프런트 엔드를 선택하여 계속합니다.
프런트 엔드 탭
프런트 엔드 탭에서 다음 값을 입력합니다.
설정 작업 프런트 엔드 IP 주소 유형 퍼블릭을 선택합니다. 공용 IP 주소 새로 추가를 선택합니다. 프런트 엔드 이름에 my-frontend를 입력하고 확인을 선택합니다. 참고 항목
Application Gateway v2 SKU의 경우 퍼블릭 프런트 엔드 IP가 있어야 합니다. 퍼블릭 및 프라이빗 프런트 엔드 IP 구성을 모두 사용할 수 있지만 공용 IP가 없는 프라이빗 전용 프런트 엔드 IP 구성은 현재 v2 SKU에 대해 지원되어 있지 않습니다. 자세한 내용은 여기를 참조하세요.
완료되면 다음: 백 엔드를 선택합니다.
백 엔드 탭
백 엔드 풀은 적절한 백 엔드 서버로 요청을 라우팅하는 데 사용됩니다. 백 엔드 풀은 다음 리소스의 조합으로 구성될 수 있습니다.
- NIC
- 공용 IP 주소
- 내부 IP 주소
- Virtual Machine Scale Sets
- FQDN(정규화된 도메인 이름)
- Azure App Service 및 Container Apps와 같은 다중 테넌트 백 엔드
이 예제에서는 컨테이너 앱을 대상으로 하는 백 엔드 풀을 만듭니다.
백 엔드 풀 추가를 선택합니다.
새 탭을 열고 컨테이너 앱으로 이동합니다.
컨테이너 앱의 개요 창에서 애플리케이션 URL을 찾아 복사합니다.
백 엔드 탭으로 돌아가 백 엔드 풀 추가 창에 다음 값을 입력합니다.
설정 작업 이름 my-agw-backend-pool을 입력합니다. 대상 없이 백 엔드 풀 추가 아니오를 선택합니다. 대상 형식 IP 주소 또는 FQDN을 선택합니다. 대상 복사한 컨테이너 앱 애플리케이션 URL을 입력하고 https:// 접두사를 제거합니다. 이 위치는 컨테이너 앱의 FQDN입니다. 추가를 선택합니다.
백 엔드 탭에서 다음: 구성을 선택합니다.
구성 탭
구성 탭에서 라우팅 규칙을 사용하여 만든 프런트 엔드 및 백 엔드 풀을 연결합니다.
라우팅 규칙 추가를 선택합니다. 다음 값을 입력합니다.
설정 작업 이름 my-agw-routing-rule을 입력합니다. 우선 순위 1을 입력합니다. 수신기 탭에서 다음 값을 입력합니다.
설정 작업 수신기 이름 my-agw-listener를 입력합니다. 프런트 엔드 IP 퍼블릭을 선택합니다. 프로토콜 HTTPS를 선택합니다. 사용할 인증서가 없는 경우 HTTP를 선택할 수 있습니다. 포트 443을 입력합니다. 프로토콜에 대해 HTTP를 선택한 경우 80을 입력하고 기본/사용자 지정 도메인 섹션으로 건너뜁니다. 인증서 선택 인증서 업로드를 선택합니다. 인증서가 키 자격 증명 모음에 저장된 경우 Key Vault 인증서 선택을 선택할 수 있습니다. 인증서 이름 SSL 인증서의 이름을 입력합니다. PFX 인증서 파일 유효한 공용 인증서를 선택합니다. 암호 인증서 암호를 입력합니다. 기본 도메인을 사용하려면 다음 값을 입력합니다.
설정 작업 수신기 유형 기본을 선택합니다. 오류 페이지 URL 아니요로 둡니다. 또는 사용자 지정 도메인을 사용하려는 경우 다음 값을 입력합니다.
설정 작업 수신기 유형 다중 사이트 선택 Host type 단일 선택 호스트 이름 사용하려는 사용자 지정 도메인을 입력합니다. 오류 페이지 URL 아니요로 둡니다. 백 엔드 대상 탭을 선택하고 다음 값을 입력합니다.
백 엔드 대상 탭으로 전환하고 다음 값을 입력합니다.
설정 작업 대상 형식 이전에 만든 my-agw-backend-pool을 선택합니다. 백 엔드 설정 새로 추가를 선택합니다. 백 엔드 설정 추가 창에서 다음 값을 입력합니다.
설정 작업 백 엔드 설정 이름 my-agw-backend-setting을 입력합니다. 백 엔드 프로토콜 HTTPS를 선택합니다. 백 엔드 포트 443을 입력합니다. 잘 알려진 CA 인증서 사용 예를 선택합니다. 새 호스트 이름으로 재정의 예를 선택합니다. 호스트 이름 재정의 백 엔드 대상에서 호스트 이름 선택을 선택합니다. 사용자 지정 프로브 만들기 아니오를 선택합니다. 추가를 선택하여 백 엔드 설정을 추가합니다.
라우팅 규칙 추가 창에서 추가를 다시 선택합니다.
완료되면 다음: 태그를 선택합니다.
다음: 검토 및 만들기를 선택하고 만들기를 선택합니다.
Application Gateway에 프라이빗 링크 추가
Application Gateway가 가상 네트워크를 통해 백 엔드에서 컨테이너 앱과 통신할 수 있으므로 프라이빗 링크를 활용하여 내부 전용 컨테이너 앱 환경에 대한 보안 연결을 설정할 수 있습니다.
증명 공급자가 생성되었으면 리소스로 이동을 선택합니다.
왼쪽 메뉴에서 프라이빗 링크를 선택한 다음, 추가를 선택합니다.
다음 값을 입력합니다.
설정 작업 이름 my-agw-private-link를 입력합니다. 프라이빗 링크 서브넷 프라이빗 링크를 만들 서브넷을 선택합니다. 프런트 엔드 IP 구성 Application Gateway에 대한 프런트 엔드 IP를 선택합니다. 개인 IP 주소 설정에서 추가를 선택합니다.
블레이드의 아래쪽에서 추가를 선택합니다.
컨테이너 이미지 확인
개요 페이지에서 애플리케이션 게이트웨이의 공용 IP 주소를 찾거나 주소를 검색할 수 있습니다. 검색하려면 모든 리소스를 선택하고 검색 상자에 my-container-apps-agw-pip를 입력합니다. 그런 다음 검색 결과에서 IP를 선택합니다.
애플리케이션 게이트웨이의 공용 IP 주소로 이동합니다.
요청이 컨테이너 앱으로 자동으로 라우팅되어 애플리케이션 게이트웨이가 성공적으로 만들어졌는지 확인합니다.
리소스 정리
만든 리소스가 더 이상 필요하지 않은 경우 해당 리소스 그룹을 삭제합니다. 리소스 그룹을 삭제하면 모든 관련 리소스도 함께 제거됩니다.
리소스 그룹을 삭제하려면 다음을 수행합니다.
Azure Portal 메뉴에서 리소스 그룹을 선택하거나 리소스 그룹을 검색하여 선택합니다.
리소스 그룹 페이지에서 my-container-apps를 검색하여 선택합니다.
리소스 그룹 페이지에서 리소스 그룹 삭제를 선택합니다.
리소스 그룹 이름 입력 아래에 my-container-apps를 입력한 다음, 삭제를 선택합니다.