가상 네트워크 아키텍처 5 - App Service 프라이빗 엔드포인트

9453 단어

요약



이 문서는 가상 네트워크 아키텍처 시리즈의 Part.5이며 api-management-vnet 에서 Azure App Service 및 Azure Functions 앱이 포함된 개인 끝점에 대한 세부 정보를 포함합니다.








  • 목차


  • Private Endpoint configuration
  • Inbound and Outbound
  • Access restrictions
  • Support tier

  • 프라이빗 엔드포인트 구성

  • Private Endpoint: Deploy the private endpoint and connect it to App Service and Functions and their subnets in PrivateEndpoint.bicep . App Service와 Functions 모두 V-net integration 및 프라이빗 엔드포인트를 위해 각각 두 개의 서브넷이 필요합니다.
  • 이 샘플 템플릿은 Regional V-net integration을 사용하며 위임된 서브넷이 필요합니다. 통합 서브넷은 Microsoft.Web/serverFarms에 위임되어야 합니다.
  • Microsoft 설명서Private Endpoint for App Service에 따르면 App Service 및 함수 앱용 개인 끝점에는 V-net 통합용 서브넷과 동일한 서브넷이 아닌 하나의 서브넷이 있어야 합니다.


  • AppServiceId:existingAppService.id
    FuncId:existingFunc.id
    VirtualNetwork2SubnetIdAsePe:existingVnet2.properties.subnets[1].id
    VirtualNetwork2SubnetIdFuncPe:existingVnet2.properties.subnets[5].id
    
    resource VirtualNetwork2 'Microsoft.Network/virtualNetworks@2021-03-01' = {
      properties: {
        subnets: [
          {
            name: snet_name_2_ase_vi
            properties: {
              addressPrefix: snet_prefix_2_ase_vi
              networkSecurityGroup: {
                id: Nsg2AseViId
              }
              delegations: [
                {
                  name: 'delegation'
                  properties: {
                    serviceName: 'Microsoft.Web/serverfarms'
                  }
                }
              ]
              privateEndpointNetworkPolicies: 'Disabled'
            }
          }
          {
            name: snet_name_2_ase_pe
            properties: {
              addressPrefix: snet_prefix_2_ase_pe
              networkSecurityGroup: {
                id: Nsg2AsePeId
              }
              privateEndpointNetworkPolicies: 'Enabled'
            }
          }
          {
            name: snet_name_2_func_vi
            properties: {
              addressPrefix: snet_prefix_2_func_vi
              networkSecurityGroup: {
                id: Nsg2FuncViId
              }
              delegations: [
                {
                  name: 'delegation'
                  properties: {
                    serviceName: 'Microsoft.Web/serverfarms'
                  }
                }
              ]
              privateEndpointNetworkPolicies: 'Disabled'
            }
          }
          {
            name: snet_name_2_func_pe
            properties: {
              addressPrefix: snet_prefix_2_func_pe
              networkSecurityGroup: {
                id: Nsg2FuncPeId
              }
              privateEndpointNetworkPolicies: 'Enabled'
            }
          }
        ]
      }
    }
    



  • 사설 DNS: PrivateDns2.bicep에 DNS 이름이 privatelink.azurewebsites.net인 사설 DNS를 배포합니다. App Service 및 함수는 하나의 프라이빗 DNS 영역을 공유할 수 있습니다.

  • var pdns_name_app = 'privatelink.azurewebsites.net'
    
    resource PrivateDnsApp 'Microsoft.Network/privateDnsZones@2020-06-01' = {
      name: pdns_name_app
      location: 'global'
    }
    



  • 가상 네트워크 링크: 배포된 개인 DNS를 PrivateDns2.bicep에 있는 세 개의 가상 네트워크에 연결합니다. 이는 App Service 및 Functions가 세 가지 가상 네트워크 모두에 도달하기 때문입니다. 또한 가상 네트워크 1과 2가 피어링되고 가상 네트워크 2와 3도 피어링됩니다.

  • VirtualNetwork1Id:existingVnet1.id
    VirtualNetwork2Id:existingVnet2.id
    VirtualNetwork3Id:existingVnet3.id
    
    resource VnetLinkApp1 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link1'
      location: 'global'
      properties: {
        registrationEnabled: false
        virtualNetwork: {
          id: VirtualNetwork1Id
        }
      }
    }
    
    resource VnetLinkApp2 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link2'
      location: 'global'
      properties: {
        registrationEnabled: false
        virtualNetwork: {
          id: VirtualNetwork2Id
        }
      }
    }
    
    resource VnetLinkApp3 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link3'
      location: 'global'
      properties: {
        registrationEnabled: false
        virtualNetwork: {
          id: VirtualNetwork3Id
        }
      }
    }
    



  • 프라이빗 DNS A 레코드: DNS A 레코드를 생성하고 PrivateDns2.bicep에 배포된 프라이빗 엔드포인트에서 IP 주소를 설정합니다. App Service와 Functions는 각각 SCM(Source Control Manager) 사이트의 다른 엔드포인트를 가지고 있기 때문에 각각 두 개의 A 레코드를 생성해야 합니다. 이에 대한 문서Kudu service를 볼 수 있습니다. 두 프라이빗 엔드포인트에는 동일한 프라이빗 IP 주소 구성이 필요합니다.

  • output PrivateEndpointAseIpAddress string = PrivateEndpointAse.properties.customDnsConfigs[0].ipAddresses[0]
    output PrivateEndpointFuncIpAddress string = PrivateEndpointFunc.properties.customDnsConfigs[0].ipAddresses[0]
    
    resource PrivateDnsAAse 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${AppServiceName}'
      properties: {
        ttl: 3600
        aRecords: [
          {
            ipv4Address: PrivateEndpointAseIpAddress
          }
        ]
      }
    }
    
    resource PrivateDnsAAseScm 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${AppServiceName}.scm'
      properties: {
        ttl: 3600
        aRecords: [
          {
            ipv4Address: PrivateEndpointAseIpAddress
          }
        ]
      }
    }
    
    resource PrivateDnsAFunc 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${FuncName}'
      properties: {
        ttl: 3600
        aRecords: [
          {
            ipv4Address: PrivateEndpointFuncIpAddress
          }
        ]
      }
    }
    
    resource PrivateDnsAFuncScm 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
      name: '${PrivateDnsApp.name}/${FuncName}.scm'
      properties: {
        ttl: 3600
        aRecords: [
          {
            ipv4Address: PrivateEndpointFuncIpAddress
          }
        ]
      }
    }
    


    인바운드 및 아웃바운드

    App Service and Functions have different network features of inbound and outbound. Inbound works with Private Endpoint and outbound with V-net integration, and both need to have two different subnets for each.



    액세스 제한

    According to the Microsoft documentation of Private Endpoints for Azure Web App 기본적으로 웹 앱에 대한 개인 끝점을 활성화하면 모든 공용 액세스가 비활성화됩니다. 구성할 필요가 없습니다Access restrictions.

    지원 계층

    Microsoft documentation of Private Endpoints for Azure Web App에서는 Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium 지원 Private Endpoint만 설명합니다.

    좋은 웹페이지 즐겨찾기