Conectar redes virtuais em diferentes assinaturas com nomes de entidades de serviço
Existem cenários em que é necessário conectar redes virtuais em diferentes assinaturas sem o uso de contas de usuário ou contas de convidado. Nessas instruções sobre redes virtuais, saiba como emparelhar duas redes virtuais com SPNs (nomes de entidades de serviço) em assinaturas diferentes. Os emparelhamentos de rede virtual entre redes virtuais em diferentes assinaturas e locatários do Microsoft Entra ID devem ser emparelhados por meio da CLI do Azure ou do PowerShell. Atualmente, não há uma opção no portal do Azure para emparelhar redes virtuais com SPNs em diferentes assinaturas.
Pré-requisitos
Uma conta do Azure com duas assinaturas ativas e dois locatários do Microsoft Entra ID. Crie uma conta gratuitamente.
Permissões de conta para criar uma entidade de serviço, atribuir permissões de aplicativo e criar recursos no locatário do Microsoft Entra ID associado a cada assinatura.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
- Este artigo de instruções exige a versão 2.31.0 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a versão mais recente já está instalada.
Recursos usados
SPN | Grupo de recursos | Assinatura/Locatário | Rede virtual | Localidade |
---|---|---|---|---|
spn-1-peer-vnet | test-rg-1 | assinatura-1 | vnet-1 | Leste dos EUA 2 |
spn-2-peer-vnet | test-rg-2 | assinatura-2 | vnet-2 | Oeste dos EUA 2 |
Criar recursos de subscription-1
Use o az sign-in para entrar em subscription-1 com uma conta de usuário com permissões para criar um grupo de recursos, uma rede virtual e um SPN no locatário do Microsoft Entra ID associado a subscription-1
az login
Crie um grupo de recursos com az group create.
az group create \ --name test-rg-1 \ --location eastus2
Use az network vnet create para criar uma rede virtual chamada vnet-1 em subscription-1.
az network vnet create \ --resource-group test-rg-1 \ --location eastus2 \ --name vnet-1 \ --address-prefixes 10.0.0.0/16 \ --subnet-name subnet-1 \ --subnet-prefixes 10.0.0.0/24
Criar spn-1-peer-vnet
Crie spn1-peer-vnet com um escopo para a rede virtual criada na etapa anterior. Esse SPN é adicionado ao escopo de vnet-2 em uma etapa futura para permitir o par de rede virtual.
Use az network vnet show para colocar a ID do recurso da rede virtual criada anteriormente em uma variável para uso na etapa posterior.
vnetid=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
Use az ad sp create-for-rbac para criar spn-1-peer-vnet com uma função de Colaborador de Rede com escopo para a rede virtual vnet-1.
az ad sp create-for-rbac \ --name spn-1-peer-vnet \ --role "Network Contributor" \ --scope $vnetid
Anote a saída da criação na etapa. A senha só será exibida aqui nessa saída. Copie a senha para um local seguro para uso nas etapas de entrada posteriores.
{ "appId": "11112222-bbbb-3333-cccc-4444dddd5555", "displayName": "spn-1-peer-vnet", "password": "", "tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" }
A appId da entidade de serviço é usada nas etapas seguintes para concluir a configuração do SPN. Use az ad sp list para colocar a appId do SPN em uma variável para uso posterior.
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
O SPN criado na etapa anterior deve ter um URI de redirecionamento para concluir a aprovação do processo de autenticação e deve ser convertido para uso multilocatário. Use az ad app update para adicionar https://www.microsoft.com como um URI de redirecionamento e habilitar o multilocatário em spn-1-peer-vnet.
az ad app update \ --id $appid1 \ --sign-in-audience AzureADMultipleOrgs \ --web-redirect-uris https://www.microsoft.com
A entidade de serviço deve ter permissões de User.Read para o diretório. Use az ad app permission add e az ad app permission grant para adicionar as permissões do Microsoft Graph de User.Read à entidade de serviço.
az ad app permission add \ --id $appid1 \ --api 00000003-0000-0000-c000-000000000000 \ --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope az ad app permission grant \ --id $appid1 \ --api 00000003-0000-0000-c000-000000000000 \ --scope User.Read
Criar recursos de subscription-2
Use az login para entrar em subscription-2 com uma conta de usuário com permissões para criar um grupo de recursos, uma rede virtual e um SPN no locatário do Microsoft Entra ID associado a subscription-2
az login
Crie um grupo de recursos com az group create.
az group create \ --name test-rg-2 \ --location westus2
Use az network vnet create para criar uma rede virtual chamada vnet-2 em subscription-2.
az network vnet create \ --resource-group test-rg-2 \ --location westus2 \ --name vnet-2 \ --address-prefixes 10.1.0.0/16 \ --subnet-name subnet-1 \ --subnet-prefixes 10.1.0.0/24
Criar spn-2-peer-vnet
Crie spn-2-peer-vnet com um escopo para a rede virtual criada na etapa anterior. Esse SPN é adicionado ao escopo de vnet-2 em uma etapa futura para permitir o par de rede virtual.
Use az network vnet show para colocar a ID do recurso da rede virtual criada anteriormente em uma variável para uso na etapa posterior.
vnetid=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
Use az ad sp create-for-rbac para criar spn-2-peer-vnet com uma função de Colaborador de Rede com escopo para a rede virtual vnet-2.
az ad sp create-for-rbac \ --name spn-2-peer-vnet \ --role "Network Contributor" \ --scope $vnetid
Anote a saída da criação na etapa. Copie a senha para um local seguro para uso nas etapas de entrada posteriores. A senha não será exibida novamente.
A saída é semelhante à seguinte saída.
{ "appId": "22223333-cccc-4444-dddd-5555eeee6666", "displayName": "spn-2-peer-vnet", "password": "", "tenant": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f" }
A appId da entidade de serviço é usada nas etapas seguintes para concluir a configuração do SPN. Use az ad sp list para colocar a ID do SPN em uma variável para uso posterior.
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv)
O SPN criado na etapa anterior deve ter um URI de redirecionamento para concluir a aprovação do processo de autenticação e deve ser convertido para uso multilocatário. Use az ad app update para adicionar https://www.microsoft.com como um URI de redirecionamento e habilitar o multilocatário em spn-2-peer-vnet.
az ad app update \ --id $appid2 \ --sign-in-audience AzureADMultipleOrgs \ --web-redirect-uris https://www.microsoft.com
A entidade de serviço deve ter permissões de User.Read para o diretório. Use az ad app permission add e az ad app permission grant para adicionar as permissões do Microsoft Graph de User.Read à entidade de serviço.
az ad app permission add \ --id $appid2 \ --api 00000003-0000-0000-c000-000000000000 \ --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope az ad app permission grant \ --id $appid2 \ --api 00000003-0000-0000-c000-000000000000 \ --scope User.Read
Registrar spn-2-peer-vnet em subscription-1 e atribuir permissões à vnet-1
Uma conta de usuário com permissões de administrador no locatário do Microsoft Entra ID deve concluir o processo de adição de spn-2-vnet-peer a subscription-1. Após a conclusão, spn-2-vnet-peer poderá receber permissões para vnet-1.
Registrar aplicativo spn-2-peer-vnet em subscription-1
Um administrador no locatário do Microsoft Entra ID de subscription-1 deve aprovar a entidade de serviço spn-2-peer-vnet para que ela possa ser adicionada à rede virtual vnet-1. Use o seguinte comando para entrar em subscription-2 e localizar a appID de spn-2-peer-vnet.
Use az login para entrar em subscription-2.
az login
Use az ad sp list para obter a appId de spn-2-peer-vnet. Observe a appID na saída. Essa appID é usada na URL de autenticação nas etapas posteriores.
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv) echo $appid2
Use o appid para spn-2-peer-vnet e o ID do locatário do Microsoft Entra ID para subscription-1 para criar a URL de login para a aprovação. A URL será criada com base no exemplo a seguir:
https://login.microsoftonline.com/entra-tenant-id-subscription-1/oauth2/authorize?client_id={$appid2}&response_type=code&redirect_uri=https://www.microsoft.com
A URL será semelhante ao exemplo abaixo.
https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/oauth2/authorize?client_id=22223333-cccc-4444-dddd-5555eeee6666&response_type=code&redirect_uri=https://www.microsoft.com
Abra a URL em um navegador da Web e entre com um administrador no locatário do Microsoft Entra ID em subscription-1.
Aprove o aplicativo spn-2-peer-vnet. A página inicial do microsoft.com será exibida se a autenticação for bem-sucedida.
Atribuir spn-2-peer-vnet à vnet-1
Depois que o administrador aprovar o spn-2-peer-vnet, adicione-o à rede virtual vnet-1 como um Colaborador de Rede.
Use az login para entrar em subscription-1.
az login
Use az ad sp list para localizar a appId para spn-2-peer-vnet e coloque em uma variável para uso posterior.
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv)
Use az network vnet show para obter a ID do recurso da vnet-1 em uma variável para uso nas etapas posteriores.
vnetid=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
Use az role assignment create e o comando a seguir para adicionar spn-2-peer-vnet a vnet-1 como um Colaborador de Rede.
az role assignment create --assignee $appid2 \ --role "Network Contributor" \ --scope $vnetid
Registrar spn-1-peer-vnet em subscription-2 e atribuir permissões à vnet-2
Uma conta de usuário com permissões de administrador no locatário do Microsoft Entra ID deve concluir o processo de adição de spn-1-peer-vnet à subscription-2. Após a conclusão, spn-1-peer-vnet poderá receber permissões para vnet-2.
Registrar aplicativo spn-1-peer-vnet em subscription-2
Um administrador do locatário do Microsoft Entra ID da subscription-2 deve aprovar a entidade de serviço spn-1-peer-vnet para que ela possa ser adicionada à rede virtual vnet-2. Use o seguinte comando para entrar em subscription-1 e localizar a appID de spn-1-peer-vnet.
Use az login para entrar em subscription-1.
az login
Use az ad sp list para obter a appId de spn-1-peer-vnet. Observe a appID na saída. Essa appID é usada na URL de autenticação nas etapas posteriores.
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv) echo $appid1
Use a appid para spn-1-peer-vnet e a ID do locatário do Microsoft Entra ID para subscription-2 para criar a URL de entrada para a aprovação. A URL será criada com base no exemplo a seguir:
https://login.microsoftonline.com/entra-tenant-id-subscription-2/oauth2/authorize?client_id={$appid1}&response_type=code&redirect_uri=https://www.microsoft.com
A URL será semelhante ao exemplo abaixo.
https://login.microsoftonline.com/bbbbcccc-1111-dddd-2222-eeee3333ffff/oauth2/authorize?client_id=11112222-bbbb-3333-cccc-4444dddd5555&response_type=code&redirect_uri=https://www.microsoft.com
Abra a URL em um navegador da Web e entre com um administrador no locatário do Microsoft Entra ID em subscription-2.
Aprove o aplicativo spn-1-peer-vnet. A página inicial do microsoft.com será exibida se a autenticação for bem-sucedida.
Atribuir spn-1-peer-vnet à vnet-2
Depois que o administrador aprovar o spn-1-peer-vnet, adicione-o à rede virtual vnet-2 como um Colaborador de Rede.
Use az login para entrar em subscription-2.
az login
Use az ad sp list para localizar a appId para spn-1-peer-vnet e coloque em uma variável para uso posterior.
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
Use az network vnet show para obter a ID do recurso da vnet-2 em uma variável para uso nas etapas posteriores.
vnetid=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
Use az role assignment create para adicionar spn-1-peer-vnet à vnet-2 como um Colaborador de Rede.
az role assignment create --assignee $appid1 \ --role "Network Contributor" \ --scope $vnetid
Emparelhar vnet-1 para vnet-2 e vnet-2 para vnet-1
Para emparelhar a vnet-1 para a vnet-2, use a appId da entidade de serviço e a senha para entrar no locatário do Microsoft Entra ID associado a subscription-1.
Obter a appId de spn-1-peer-vnet e spn-2-peer-vnet
Para os propósitos desse artigo, entre em cada assinatura e obtenha a appID de cada SPN e a ID do recurso de cada rede virtual. Use esses valores para entrar em cada assinatura com o SPN nas etapas posteriores. Essas etapas não serão necessárias para emparelhar as redes virtuais se ambos os lados já tiverem a appID dos SPNs e a ID do recurso das redes virtuais.
Use az login para entrar na subscription-1 com uma conta de usuário regular.
az login
Use az network vnet show para obter a ID do recurso da vnet-1 em uma variável para uso nas etapas posteriores.
vnetid1=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
Use az ad sp list para obter a appId de spn-1-peer-vnet e colocar em uma variável para uso nas etapas posteriores.
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
Use az login para entrar na subscription-2 com uma conta de usuário regular.
az login
Use az network vnet show para obter a ID do recurso da vnet-2 em uma variável para uso nas etapas posteriores.
vnetid2=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
Use az ad sp list para obter a appId de spn-2-peer-vnet e colocar em uma variável para uso nas etapas posteriores.
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv) echo $appid2
Use az logout para sair da sessão da CLI do Azure com o comando a seguir. Não feche o terminal.
az logout
Emparelhar as redes virtuais
Use az login para entrar na subscription-1 com spn-1-peer-vnet. Você precisa da ID do locatário do Microsoft Entra ID associado à subscription-1 para concluir o comando. A senha será mostrada no exemplo com um espaço reservado variável. Substitua pela senha que você anotou durante a criação do recurso. Substitua o espaço reservado em
--tenant
pela ID do locatário do Microsoft Entra ID associado a subscription-1.az login \ --service-principal \ --username $appid1 \ --password $password \ --tenant aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
Use az login para entrar na subscription-2 com spn-2-peer-vnet. Você precisa da ID do locatário do Microsoft Entra ID associado à subscription-2 para concluir o comando. A senha será mostrada no exemplo com um espaço reservado variável. Substitua pela senha que você anotou durante a criação do recurso. Substitua o espaço reservado em
--tenant
pela ID do locatário do Microsoft Entra ID associado a subscription-2.az login \ --service-principal \ --username $appid2 \ --password $password \ --tenant bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f
Use az account set para alterar o contexto para subscription-1.
az account set --subscription "subscription-1-subscription-id-NOT-ENTRA-TENANT-ID"
Use az network vnet peering create para criar um emparelhamento de rede virtual entre a vnet-1 e a vnet-2.
az network vnet peering create \ --name vnet-1-to-vnet-2 \ --resource-group test-rg-1 \ --vnet-name vnet-1 \ --remote-vnet $vnetid2 \ --allow-vnet-access
Use az network vnet peering list para verificar um emparelhamento de rede virtual entre a vnet-1 e a vnet-2.
az network vnet peering list \ --resource-group test-rg-1 \ --vnet-name vnet-1 \ --output table
Use az account set para alterar o contexto para subscription-2.
az account set --subscription "subscription-2-subscription-id-NOT-ENTRA-TENANT-ID"
Use az network vnet peering create para criar um emparelhamento de rede virtual entre a vnet-2 e a vnet-1.
az network vnet peering create \ --name vnet-2-to-vnet-1 \ --resource-group test-rg-2 \ --vnet-name vnet-2 \ --remote-vnet $vnetid1 \ --allow-vnet-access
Use az network vnet peering list para verificar um emparelhamento de rede virtual entre a vnet-2 e a vnet-1.
az network vnet peering list \ --resource-group test-rg-2 \ --vnet-name vnet-2 \ --output table