Integração privada de Link e DNS em escalaPrivate Link and DNS integration at scale

Este artigo descreve como integrar o Azure Private Link para serviços PaaS com zonas de DNS privadas Azure no hub e arquiteturas de rede de fala.This article describes how to integrate Azure Private Link for PaaS services with Azure Private DNS zones in hub and spoke network architectures.

IntroduçãoIntroduction

Muitos clientes constroem a sua infraestrutura de rede em Azure utilizando o hub e a arquitetura da rede de fala, onde:Many customers build their network infrastructure in Azure using the hub and spoke network architecture, where:

  • Os serviços partilhados em rede (como os aparelhos virtuais de rede, os gateways ExpressRoute/VPN ou os servidores DNS) são implantados na rede virtual do hub (VNet)Networking shared services (such as network virtual appliances, ExpressRoute/VPN gateways, or DNS servers) are deployed in the hub virtual network (VNet)
  • Falei Os VNets consomem esses serviços partilhados através do espreitamento da VNet.Spoke VNets consume those shared services via VNet peering.

Nas arquiteturas de rede hub e spoke, os proprietários de aplicações são normalmente fornecidos com uma subscrição Azure, que inclui um VNet (um spoke) ligado ao hub VNet.In hub and spoke network architectures, application owners are typically provided with an Azure subscription, which includes a VNet (a spoke) connected to the hub VNet. Nesta arquitetura, podem implantar as suas máquinas virtuais e ter conectividade privada com outros VNets ou redes no local via ExpressRoute ou VPN.In this architecture, they can deploy their virtual machines and have private connectivity to other VNets or to on-premises networks via ExpressRoute or VPN.

A conectividade de saída da Internet é fornecida através de um aparelho virtual de rede central (NVA) como o Azure Firewall.Internet-outbound connectivity is provided via a central network virtual appliance (NVA) such as Azure Firewall.

Muitas equipas de aplicação constroem as suas soluções utilizando uma combinação de recursos Azure IaaS e PaaS.Many application teams build their solutions using a combination of Azure IaaS and PaaS resources. Alguns serviços Azure PaaS (como SQL Managed Instance) podem ser implantados em VNets de clientes.Some Azure PaaS services (such as SQL Managed Instance) can be deployed in customer VNets. Como resultado, o tráfego permanecerá privado dentro da rede Azure e será totalmente reencaminhada a partir do local.As a result, traffic will stay private within the Azure network and would be fully routable from on-premises.

No entanto, alguns serviços Azure PaaS (como o Azure Storage ou o Azure Cosmos DB) não podem ser implantados nos VNets de um cliente e estão acessíveis ao longo do seu ponto final público.However, some Azure PaaS services (such as Azure Storage or Azure Cosmos DB) cannot be deployed in a customer's VNets and are accessible over their public endpoint. Em alguns casos, isto pode causar uma controvérsia com as políticas de segurança de um cliente, uma vez que o tráfego corporativo pode não permitir a implantação ou acesso de recursos corporativos (como uma base de dados SQL) sobre os pontos finais públicos.In some instances, this can cause a contention with a customer's security policies, as corporate traffic might not allow the deployment or accessing of corporate resources (such as a SQL database) over public endpoints.

O Azure Private Link permite o acesso a uma lista de serviços Azure sobre pontos finais privados, mas requer que esses registos privados de ponto final estejam registados numa zona privada de DNScorrespondente.Azure Private Link allows access to a list of Azure services over private endpoints, but it requires that those private endpoint records are registered in a corresponding private DNS zone.

Este artigo descreve como as equipas de aplicação podem implementar serviços Azure PaaS nas suas subscrições que só são acessíveis em pontos finais privados.This article describes how application teams can deploy Azure PaaS services in their subscriptions which are only accessible over private endpoints.

Este artigo também descreverá como as equipas de aplicação podem garantir que os serviços são automaticamente integrados com zonas privadas de DNS através do Azure Private DNS.This article will also describe how application teams can ensure that services are automatically integrated with private DNS zones via Azure Private DNS. Eliminação da necessidade de criação manual ou eliminação de registos em DNS.Removing the need for manual creation or deletion of records in DNS.

As zonas privadas de DNS são normalmente hospedadas centralmente na mesma subscrição do Azure onde o hub VNet é implantado.Private DNS zones are typically hosted centrally in the same Azure subscription where the hub VNet is deployed. Esta prática central de hospedagem é impulsionada pela resolução transversal do nome DNS e outras necessidades para a resolução central do DNS, como o Ative Directory.This central hosting practice is driven by cross-premises DNS name resolution and other needs for central DNS resolution such as Active Directory. Na maioria dos casos, apenas os administradores de rede/identidade têm permissões para gerir registos DNS nestas zonas.In most cases, only networking/identity admins have permissions to manage DNS records in these zones.

As equipas de aplicação têm permissões para criar o recurso Azure na sua própria subscrição.Application teams do have permissions to create Azure resource in their own subscription. Não têm permissões na subscrição central de conectividade de rede, que inclui a gestão de registos DNS nas zonas privadas de DNS.They do not have any permissions in the central networking connectivity subscription, which includes managing DNS records in the private DNS zones. Esta limitação de acesso significa que não têm a possibilidade de criar os registos DNS necessários ao implementar serviços Azure PaaS com pontos finais privados.This access limitation means they do not have the possibility to create the DNS records required when deploying Azure PaaS services with private endpoints.

O seguinte diagrama mostra uma arquitetura típica de alto nível para ambientes empresariais com resolução central de DNS e onde a resolução de nomes para recursos de Ligação Privada é feita através de DNS Privados Azure:The following diagram shows a typical high-level architecture for enterprise environments with central DNS resolution and where name resolution for Private Link resources is done via Azure Private DNS:

imagem-1

Do diagrama anterior, é importante destacar que:From the previous diagram, it is important to highlight that:

  • No local, os servidores DNS têm reencaminhadores condicionalistas configurados para cada reencaminhador público privado de zona de DNS que aponta para os reencaminhadores DNS ( 10.100.2.4 e ) 10.100.2.5 hospedados no hub VNet.On-premises DNS servers have conditional forwarders configured for each private endpoint public DNS zone forwarder pointing to the DNS forwarders (10.100.2.4 and 10.100.2.5) hosted in the hub VNet.
  • Todos os VNets Azure têm os reencaminhadores DNS ( 10.100.2.4 e 10.100.2.5 ) configurados como os servidores DNS primários e secundários.All Azure VNets have the DNS forwarders (10.100.2.4 and 10.100.2.5) configured as the primary and secondary DNS servers.

Existem duas condições que devem ser verdadeiras para permitir às equipas de aplicação a liberdade de criar quaisquer recursos Azure PaaS necessários na sua subscrição:There are two conditions that must be true to allow application teams the freedom to create any required Azure PaaS resources in their subscription:

  • A equipa central de networking e/ou plataforma central deve garantir que as equipas de aplicação só podem implementar e aceder aos serviços do Azure PaaS através de pontos finais privados.Central networking and/or central platform team must ensure that application teams can only deploy and access Azure PaaS services via private endpoints.
  • As equipas centrais de rede e/ou plataforma central devem garantir que sempre que os pontos finais privados são criados, os registos correspondentes são automaticamente criados na zona privada centralizada de DNS que corresponda ao serviço criado.Central networking and/or central platform teams must ensure that whenever private endpoints are created, the corresponding records are automatically created in the centralized private DNS zone that matches the service created.
    • O registo dns tem de seguir o ciclo de vida do ponto final privado e remover automaticamente o registo dns quando o ponto final privado for eliminado.DNS record needs to follow the lifecycle of the private endpoint and automatically remove the DNS record when the private endpoint is deleted.

As seguintes secções descrevem como as equipas de aplicação podem permitir estas condições utilizando a Política Azure.The following sections describe how application teams can enable these conditions by using Azure Policy. Usaremos o Azure Storage como o serviço Azure que as equipas de aplicação precisam implementar no nosso exemplo abaixo, mas o mesmo princípio pode ser aplicado à maioria dos serviços da Azure que suportam o Private Link.We will use Azure Storage as the Azure service that application teams need to deploy in our example below, but the same principle can be applied to most Azure services that support Private Link.

Configuração requerida pela equipa da plataformaConfiguration required by platform team

Criar zonas DNS privadasCreate private DNS zones

Criar zonas privadas de DNS na subscrição de conectividade central para os serviços de Private Link suportados de acordo com a documentação.Create private DNS zones in the central connectivity subscription for the supported Private Link services as per documentation.

No nosso caso, como usaremos a conta de Armazenamento com blob como exemplo, traduz-se para criarmos uma zona privada de privatelink.blob.core.windows.net DNS na subscrição de conectividade.In our case, as we will use Storage account with blob as our example, it translates to us creating a privatelink.blob.core.windows.net private DNS zone in the connectivity subscription.

imagem-2

Definições de políticaPolicy definitions

Para além das zonas privadas de DNS, precisamos também de criar um conjunto de definições personalizadas da Política Azure para impor o uso de pontos finais privados e automatizar a criação de registos DNS na zona DE DNS que criamos:In addition to the private DNS zones, we also need to create a set of custom Azure Policy definitions to enforce the use of private endpoints and automate the DNS record creation in the DNS zone we created:

  1. Negar ponto final público para a política de serviços paaSDeny public endpoint for PaaS services policy

    Esta política impedirá os utilizadores de criarem serviços Azure PaaS com pontos finais públicos e dar-lhes-á uma mensagem de erro se o ponto final privado não for selecionado na criação de recursos.This policy will prevent users from creating Azure PaaS services with public endpoints and give them an error message if private endpoint is not selected at resource creation.

    imagem-3

    imagem-4

    imagem-5

    A regra da política exata pode diferir entre os serviços PaaS.The exact policy rule may differ between PaaS services. Para contas de Armazenamento Azure, olhamos para a propriedade networkAcls.defaultAction que define se os pedidos da rede pública são permitidos ou não.For Azure Storage accounts, we look at the networkAcls.defaultAction property that defines whether requests from public network are allowed or not. No nosso caso, definiremos uma condição para negar a criação do tipo de recurso Microsoft.Storage/storageAe se o network da propriedadeAcls.defaultAction não for Deny .In our case, we will set a condition to deny the creation of the Microsoft.Storage/storageAccounts resource type if the property networkAcls.defaultAction is not Deny. Esta definição de política é listada abaixo:This policy definition is listed below:

    {
      "mode": "All",
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Storage/storageAccounts"
            },
            {
              "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
              "notequals": "Deny"
            }
          ]
        },
        "then": {
          "effect": "Deny"
        }
      }
    }
    
  2. Negar a criação de uma zona privada de DNS com a privatelink política de prefixosDeny creation of a private DNS zone with the privatelink prefix policy

    Uma vez que utilizamos uma arquitetura de DNS centralizada com um reencaminhador condicional e zonas privadas de DNS hospedadas nas subscrições geridas pela equipa da plataforma, precisamos de impedir que os proprietários das equipas de aplicação criem as suas próprias zonas privadas de DNS de Ligação Privada e liguem serviços às suas subscrições.Since we use a centralized DNS architecture with a conditional forwarder and private DNS zones hosted in the subscriptions managed by the platform team, we need to prevent the application teams owners from creating their own Private Link private DNS zones and linking services into their subscriptions.

    Para isso, precisamos de garantir que quando as equipas de candidatura criam um ponto final privado, a opção Integrate with private DNS zone deve ser definida quando se utiliza o portal No Azure.To accomplish this, we need to ensure that when application teams create a private endpoint, the option to Integrate with private DNS zone must be set to No when using the Azure portal.

    imagem-6

    Se Yes for selecionada, a Política Azure impedirá a criação do ponto final privado.If Yes is selected, Azure Policy will prevent the creation of the private endpoint. Na nossa definição de política, negaremos a criação do tipo de recurso Microsoft.Network/privateDnsZones se a zona tiver o privatelink prefixo.In our policy definition, we will deny the creation of the Microsoft.Network/privateDnsZones resource type if the zone has the privatelink prefix. Esta definição de política é descrita abaixo:This policy definition is described below:

    {
      "description": "This policy restricts creation of private DNS zones with the `privatelink` prefix",
      "displayName": "Deny-PrivateDNSZone-PrivateLink",
      "mode": "All",
      "parameters": null,
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Network/privateDnsZones"
            },
            {
              "field": "name",
              "like": "privatelink*"
            }
          ]
        },
        "then": {
          "effect": "Deny"
        }
      }
    }
    
  3. Implementar a política do DeployIfNotExists para criar automaticamente o registo de DNS necessário na zona central privada de DNSDeployIfNotExists policy to automatically create the required DNS record in the central private DNS zone

    Esta política será desencadeada se um recurso de ponto final privado for criado com um serviço específico groupId .This policy will be triggered if a private endpoint resource is created with a service-specific groupId. O groupId iD do grupo obtido a partir do recurso remoto (serviço) a que este ponto final privado deve ligar-se.The groupId is the ID of the group obtained from the remote resource (service) that this private endpoint should connect to. Em seguida, desencadeamos uma implantação de um privateDNSZoneGroup dentro do ponto final privado, que é usado para associar o ponto final privado com a nossa zona privada de DNS.We then trigger a deployment of a privateDNSZoneGroup within the private endpoint, which is used to associate the private endpoint with our private DNS zone. Por exemplo, as groupId bolhas de armazenamento para Azure são blob groupId (para outros serviços Azure podem ser encontrados neste artigo, sob a coluna Subresource).For our example, the groupId for Azure Storage blobs is blob (groupId for other Azure services can be found on this article, under the Subresource column). Quando a política descobrir que groupId no ponto final privado criado, irá implantar um dentro do ponto final privateDNSZoneGroup privado, e será ligado ao ID de recursos de zona de DNS privado que é especificado como parâmetro.When policy finds that groupId in the private endpoint created, it will deploy a privateDNSZoneGroup within the private endpoint, and it will be linked to the private DNS zone resource ID that is specified as parameter. Para o nosso exemplo, o ID de recursos de zona de DNS privados seria:For our example, the private DNS zone resource ID would be:

    /subscriptions/<subscription-id>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/privateDnsZones/privatelink.blob.core.windows.net

    Esta definição de política é listada abaixo:This policy definition is listed below:

    {
      "mode": "Indexed",
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Network/privateEndpoints"
            },
            {
              "count": {
                "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
                "where": {
                  "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
                  "equals": "blob"
                }
              },
              "greaterOrEquals": 1
            }
          ]
        },
        "then": {
          "effect": "deployIfNotExists",
          "details": {
            "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
            "roleDefinitionIds": [
              "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ],
            "existenceCondition": {
              "allOf": [
                {
                  "field": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups/privateDnsZoneConfigs[*].privateDnsZoneId",
                  "equals": "[parameters('privateDnsZoneId')]"
                }
              ]
            },
            "deployment": {
              "properties": {
                "mode": "incremental",
                "template": {
                  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                  "contentVersion": "1.0.0.0",
                  "parameters": {
                    "privateDnsZoneId": {
                      "type": "string"
                    },
                    "privateEndpointName": {
                      "type": "string"
                    },
                    "location": {
                      "type": "string"
                    }
                  },
                  "resources": [
                    {
                      "name": "[concat(parameters('privateEndpointName'), '/deployedByPolicy')]",
                      "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
                      "apiVersion": "2020-03-01",
                      "location": "[parameters('location')]",
                      "properties": {
                        "privateDnsZoneConfigs": [
                          {
                            "name": "storageBlob-privateDnsZone",
                            "properties": {
                              "privateDnsZoneId": "[parameters('privateDnsZoneId')]"
                            }
                          }
                        ]
                      }
                    }
                  ]
                },
                "parameters": {
                  "privateDnsZoneId": {
                    "value": "[parameters('privateDnsZoneId')]"
                  },
                  "privateEndpointName": {
                    "value": "[field('name')]"
                  },
                  "location": {
                    "value": "[field('location')]"
                  }
                }
              }
            }
          }
        }
      },
      "parameters": {
        "privateDnsZoneId": {
          "type": "String",
          "metadata": {
            "displayName": "privateDnsZoneId",
            "strongType": "Microsoft.Network/privateDnsZones"
          }
        }
      }
    }
    

Atribuições de políticasPolicy assignments

Uma vez implementadas as definições políticas, atribua as políticas no âmbito desejado na hierarquia do seu grupo de gestão.Once policy definitions have been deployed, assign the policies at the desired scope in your management group hierarchy. Certifique-se de que as atribuições de política visam as subscrições do Azure que serão utilizadas pelas equipas de aplicação para implantar serviços PaaS com acesso privado ao ponto final exclusivamente.Ensure that the policy assignments target the Azure subscriptions that will be used by the application teams to deploy PaaS services with private endpoint access exclusively.

Importante

Lembre-se de atribuir o papel de Contribuinte da Zona De DNS privado no grupo de subscrição/recursos onde as zonas privadas de DNS estão hospedadas à identidade gerida criada pela atribuição de DeployIfNotExists políticas que serão responsáveis por criar e gerir o registo privado de DNS na zona privada do DNS.Remember to assign the Private DNS Zone Contributor role role in the subscription/resource group where the private DNS zones are hosted to the managed identity created by the DeployIfNotExists policy assignment that will be responsible to create and manage the private endpoint DNS record in the private DNS zone. Isto porque o ponto final privado está localizado na subscrição do proprietário da aplicação Azure, enquanto a zona privada de DNS está localizada numa subscrição diferente (como a subscrição central de conectividade).This is because the private endpoint is located in the application owner Azure subscription, while the private DNS zone is located in a different subscription (such as central connectivity subscription).

Assim que a equipa da plataforma terminar esta configuração, as subscrições do Azure das equipas de aplicações estão prontas para criar serviços Azure PaaS com acesso privado ao ponto final exclusivamente, e garantir que os registos DNS para pontos finais privados são automaticamente registados (e removidos assim que o ponto final privado é eliminado) das correspondentes zonas privadas de DNS.Once the platform team finishes this configuration, Azure subscriptions from applications teams are ready for them to create Azure PaaS services with private endpoint access exclusively, and ensuring the DNS records for private endpoints are automatically registered (and removed once private endpoint is deleted) from corresponding private DNS zones.

Experiência do proprietário da aplicaçãoApplication owner experience

Uma vez que a equipa da plataforma tenha implantado os componentes de infraestrutura da plataforma (zonas e políticas privadas de DNS) descritos na secção anterior, quando um proprietário de aplicações tenta implantar um serviço Azure PaaS na subscrição do Azure, o proprietário da aplicação terá a seguinte experiência, que será a mesma se fizer atividades através do portal Azure ou através de outros clientes, como o PowerShell ou o CLI. , uma vez que as suas assinaturas estão a ser regidas pelas políticas do Azure.Once the platform team has deployed the platform infrastructure components (private DNS zones and policies) described in the previous section, when an application owner tries to deploy an Azure PaaS service into the Azure subscription, the application owner will have the following experience, which will be the same if they do activities via the Azure portal or via other clients such as PowerShell or CLI, as their subscriptions are being governed by Azure policies.

  1. Crie uma conta de armazenamento através do portal Azure.Create a storage account through the Azure portal. No separador básico, forneça um nome e as definições desejadas e clique em Seguinte.In the basic tab, provide a name and your desired settings and click on Next.

    imagem-7

  2. Na secção de networking, certifique-se de que o ponto final privado é selecionado.In the networking section, ensure Private endpoint is selected. Se for selecionada uma opção diferente do ponto final privado, o portal Azure não permitirá a criação da conta de armazenamento na secção Review + criar a secção do assistente de implantação, uma vez que a política impede a criação deste serviço se o ponto final público estiver ativado.If an option other than Private endpoint is selected, the Azure portal will not allow the creation of the storage account in the Review + create section of the deployment wizard, as policy is preventing the creation of this service if the public endpoint is enabled.

    imagem-8

  3. É possível criar o ponto final privado neste ecrã ou pode ser feito depois de a conta de armazenamento ter sido criada.It is possible to create the private endpoint on this screen or it can be done after the storage account has been created. Para este exercício, criaremos o ponto final privado após a criação da conta de armazenamento.For this exercise, we will create the private endpoint after the storage account has been created. Clique em 'Rever + criar e completar a criação da conta de armazenamento.'Click on Review + create and complete the creation of the storage account.

  4. Uma vez criada a conta de armazenamento, crie um ponto final privado através do portal AzureOnce the storage account is created, create a private endpoint through the Azure portal

    imagem-9

  5. Na secção Recursos, localizar a conta de armazenamento criada no passo anterior e para subresource-alvo selecionar Blob, e, em seguida, selecionar Seguinte.In the Resource section, locate the storage account created in the previous step, and for target subresource select Blob, and then select Next.

    imagem-10

  6. Na secção Configuração, depois de selecionar o VNet e a sub-rede, certifique-se de que a integração com a zona privada de DNS está definida para .In the Configuration section, after selecting your VNet and subnet, ensure that Integrate with private DNS zone is set to No. Caso contrário, o portal Azure impedirá a criação do ponto final privado, uma vez que a Política Azure não permitirá a criação de uma zona privada de DNS com o privatelink prefixo.Otherwise, the Azure portal will prevent the creation of the private endpoint, as Azure Policy will not allow the creation of a private DNS zone with the privatelink prefix.

    imagem-11

  7. Selecione Rever + criar e, em seguida, selecione Criar para implementar o ponto final privado.Select Review + create, and then select Create to deploy the private endpoint.

  8. Após alguns minutos, a DeployIfNotExists política será desencadeada e a implementação subsequente dnsZoneGroup adicionará os registos DNS necessários para o ponto final privado na zona de DNS gerida centralmente.After a few minutes, the DeployIfNotExists policy will be triggered and the subsequent dnsZoneGroup deployment will add the required DNS records for the private endpoint in the centrally managed DNS zone.

  9. Uma vez criado o ponto final privado, selecione-o e reveja o seu FQDN e IP privado:Once the private endpoint has been created, select it, and review its FQDN and private IP:

    imagem-12

  10. Verifique o registo de atividades para o grupo de recursos onde o ponto final privado foi criado, ou pode verificar o registo de atividade do próprio ponto final privado.Check the activity log for the resource group where the private endpoint was created, or you can check the activity log of the private endpoint itself. Você vai notar que após alguns minutos, uma DeployIfNotExist ação política é executada, que configura o grupo de zona DNS no ponto final privado:You will notice that after a few minutes, a DeployIfNotExist policy action is executed, which configures the DNS zone group on the private endpoint:

    imagem-13

  11. Se a equipa central de rede for para a zona privada de privatelink.blob.core.windows.net DNS, confirmarão que o registo de DNS foi criado para o ponto final privado que criámos, e tanto o nome como o endereço IP correspondem aos valores dentro do ponto final privado.If the central networking team goes to the privatelink.blob.core.windows.net private DNS zone, they will confirm that the DNS record has been created for the private endpoint we created, and both the name and IP address match to the values within the private endpoint.

    imagem-14

Neste momento, as equipas de aplicação podem utilizar a conta de armazenamento através de um ponto final privado a partir de qualquer VNet no centro e ambiente de rede de fala e a partir de instalações, uma vez que o registo de DNS foi automaticamente gravado na zona privada de DNS.At this point, application teams can use the storage account via a private endpoint from any VNet in the hub and spoke network environment and from on-premises, as the DNS record has been automatically recorded in the private DNS zone.

Se um proprietário de aplicação eliminar o ponto final privado, os registos correspondentes na zona privada de DNS serão automaticamente removidos.If an application owner deletes the private endpoint, the corresponding records in the private DNS zone will automatically be removed.