Поделиться через


Подключение виртуальных сетей в разных подписках с именами субъектов-служб

Сценарии существуют, где необходимо подключить виртуальные сети в разных подписках без использования учетных записей пользователей или гостевых учетных записей. В этой виртуальной сети узнайте, как выполнять пиринг двух виртуальных сетей с именами субъектов-служб (SPN) в разных подписках. Пиринги виртуальных сетей между виртуальными сетями в разных подписках и клиентах идентификатора Microsoft Entra ID должны быть пиринговой связью через Azure CLI или PowerShell. В настоящее время в портал Azure нет возможности одноранговых виртуальных сетей с именами субъектов-служб в разных подписках.

Необходимые компоненты

  • Учетная запись Azure с двумя активными подписками и двумя клиентами Идентификатора Microsoft Entra. Создайте учетную запись бесплатно .

  • Разрешения учетной записи для создания субъекта-службы, назначения разрешений приложения и создания ресурсов в клиенте Идентификатора Microsoft Entra, связанном с каждой подпиской.

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этим практическим руководством требуется Azure CLI версии 2.31.0 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Используемые ресурсы

имя участника-службы Группа ресурсов Подписка или клиент Виртуальная сеть Расположение
spn-1-peer-vnet test-rg-1 подписка-1 vnet-1 Восточная часть США 2
spn-2-peer-vnet test-rg-2 подписка-2 vnet-2 западная часть США 2

Создание ресурсов подписки-1

  1. Используйте az sign-in для входа в подписку-1 с учетной записью пользователя с разрешениями на создание группы ресурсов, виртуальной сети и имени субъекта-службы в клиенте Идентификатора Microsoft Entra ID, связанном с подпиской-1

    az login
    
  2. Создайте группу ресурсов с помощью команды az group create.

    az group create \
        --name test-rg-1 \
        --location eastus2  
    
  3. Используйте az network vnet create , чтобы создать виртуальную сеть с именем vnet-1 в подписке-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
    

Создание spn-1-peer-vnet

Создайте spn1-peer-vnet с областью действия виртуальной сети, созданной на предыдущем шаге. Это имя субъекта-службы добавляется в область виртуальной сети-2 на следующем шаге, чтобы разрешить одноранговый узел виртуальной сети.

  1. Используйте az network vnet show , чтобы поместить идентификатор ресурса виртуальной сети, созданной ранее в переменной для использования на следующем шаге.

    vnetid=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  2. Используйте az ad sp create-for-rbac, чтобы создать spn-1-peer-vnet с ролью участника сети, ограниченной виртуальной сетью-1.

    az ad sp create-for-rbac \
        --name spn-1-peer-vnet \
        --role "Network Contributor" \
        --scope $vnetid
    

    Запишите выходные данные создания на шаге. Пароль отображается только в этом выходных данных. Скопируйте пароль в безопасное место для использования в последующих шагах входа.

    {
    "appId": "11112222-bbbb-3333-cccc-4444dddd5555",
    "displayName": "spn-1-peer-vnet",
    "password": "",
    "tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"    
    }
    
  3. Идентификатор приложения субъекта-службы используется в последующих шагах для завершения настройки имени субъекта-службы. Используйте az ad sp list , чтобы поместить идентификатор приложения субъекта-службы в переменную для последующего использования.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. Имя субъекта-службы, созданное на предыдущем шаге, должно иметь универсальный код ресурса (URI) перенаправления для завершения утверждения процесса проверки подлинности и должен быть преобразован в мультитенантное использование. Используйте az ad app update , чтобы добавить https://www.microsoft.com в качестве URI перенаправления и включить мультитенант в spn-1-peer-vnet.

    az ad app update \
        --id $appid1 \
        --sign-in-audience AzureADMultipleOrgs \
        --web-redirect-uris https://www.microsoft.com     
    
  5. Субъект-служба должен иметь разрешения User.Read в каталоге. Используйте az ad app permission add and az ad app permission grant to add the Microsoft Graph permissions of User.Read to the service principal.

    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
    

Создание ресурсов подписки-2

  1. Используйте az login для входа в подписку-2 с учетной записью пользователя с разрешениями на создание группы ресурсов, виртуальной сети и имени участника-службы в клиенте Идентификатора Microsoft Entra ID, связанном с подпиской-2

    az login
    
  2. Создайте группу ресурсов с помощью az group create.

    az group create \
        --name test-rg-2 \
        --location westus2  
    
  3. Используйте az network vnet create , чтобы создать виртуальную сеть с именем vnet-2 в подписке-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
    

Создание spn-2-peer-vnet

Создайте виртуальную сеть spn-2-peer-vnet с областью действия виртуальной сети, созданной на предыдущем шаге. Это имя субъекта-службы добавляется в область виртуальной сети-2 на следующем шаге, чтобы разрешить одноранговый узел виртуальной сети.

  1. Используйте az network vnet show , чтобы поместить идентификатор ресурса виртуальной сети, созданной ранее в переменной для использования на следующем шаге.

    vnetid=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  2. Используйте az ad sp create-for-rbac, чтобы создать spn-2-peer-vnet с ролью участника сети, ограниченной виртуальной сетью-2.

    az ad sp create-for-rbac \
        --name spn-2-peer-vnet \
        --role "Network Contributor" \
        --scope $vnetid
    

    Запишите выходные данные создания на шаге. Скопируйте пароль в безопасное место для использования в последующих шагах входа. Пароль снова не отображается.

    Выходные данные выглядят примерно так, как показано ниже.

    {
    "appId": "22223333-cccc-4444-dddd-5555eeee6666",
    "displayName": "spn-2-peer-vnet",
    "password": "",
    "tenant": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
    }    
    
  3. Идентификатор приложения субъекта-службы используется в последующих шагах для завершения настройки имени субъекта-службы. Используйте az ad sp list , чтобы поместить идентификатор имени участника-службы в переменную для последующего использования.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. Имя субъекта-службы, созданное на предыдущем шаге, должно иметь универсальный код ресурса (URI) перенаправления для завершения утверждения процесса проверки подлинности и должен быть преобразован в мультитенантное использование. Используйте az ad app update , чтобы добавить https://www.microsoft.com в качестве URI перенаправления и включить мультитенант в spn-2-peer-vnet.

    az ad app update \
        --id $appid2 \
        --sign-in-audience AzureADMultipleOrgs \
        --web-redirect-uris https://www.microsoft.com     
    
  5. Субъект-служба должен иметь разрешения User.Read в каталоге. Используйте az ad app permission add and az ad app permission grantto add the Microsoft Graph permissions of User.Read to the service principal.

    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
    

Регистрация spn-2-peer-vnet в подписке-1 и назначение разрешений для виртуальной сети-1

Учетная запись пользователя с разрешениями администратора в клиенте идентификатора Microsoft Entra ID должна завершить процесс добавления spn-2-vnet-peer в подписку-1. После завершения одноранговый узел spn-2-vnet-можно назначить разрешения для виртуальной сети-1.

Регистрация приложения spn-2-peer-vnet в подписке-1

Администратор в клиенте идентификатора Microsoft Entra 1 должен утвердить субъект-службу spn-2-peer-vnet , чтобы его можно было добавить в виртуальную сеть vnet-1. Используйте следующую команду, чтобы войти в подписку-2 , чтобы найти идентификатор приложения spn-2-peer-vnet.

  1. Используйте az login для входа в подписку-2.

    az login
    
  2. Используйте az ad sp list , чтобы получить идентификатор приложения spn-2-peer-vnet. Обратите внимание на идентификатор приложения в выходных данных. Этот идентификатор приложения используется в URL-адресе проверки подлинности в последующих шагах.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid2
    
  3. Используйте идентификатор приложения для spn-2-peer-vnet и идентификатор клиента Microsoft Entra ID для подписки-1, чтобы создать URL-адрес входа для утверждения. URL-адрес построен из следующего примера:

    https://login.microsoftonline.com/entra-tenant-id-subscription-1/oauth2/authorize?client_id={$appid2}&response_type=code&redirect_uri=https://www.microsoft.com
    

    URL-адрес выглядит примерно так, как показано в приведенном ниже примере.

    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
    
  4. Откройте URL-адрес в веб-браузере и войдите с помощью администратора в клиенте Идентификатора Microsoft Entra в подписке-1.

  5. Утвердить приложение spn-2-peer-vnet. Домашняя страница microsoft.com отображается, если проверка подлинности выполнена успешно.

Назначение виртуальной сети spn-2-peer-vnet виртуальной сети виртуальной сети-1

После утверждения администратором spn-2-peer-vnet добавьте его в виртуальную сеть vnet-1 в качестве участника сети.

  1. Используйте az login для входа в подписку-1.

    az login
    
  2. Используйте az ad sp list , чтобы найти appId для spn-2-peer-vnet и поместить в переменную для последующего использования.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. Используйте az network vnet show , чтобы получить идентификатор ресурса виртуальной сети-1 в переменную для использования в последующих шагах.

    vnetid=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  4. Используйте az role assignment создайте следующую команду, чтобы добавить spn-2-peer-vnet в vnet-1 в качестве участника сети.

    az role assignment create --assignee $appid2 \
        --role "Network Contributor" \
        --scope $vnetid
    

Регистрация spn-1-peer-vnet в подписке-2 и назначение разрешений для виртуальной сети-2

Учетная запись пользователя с разрешениями администратора в клиенте Идентификатора Записи Майкрософт должна завершить процесс добавления spn-1-peer-vnet в подписку-2. После завершения одноранговая сеть spn-1 может быть назначена разрешения для виртуальной сети-2.

Регистрация приложения spn-1-peer-vnet в подписке-2

Администратор в клиенте идентификатора Microsoft Entra 2 должен утвердить субъект-службу spn-1-peer-vnet, чтобы его можно было добавить в виртуальную сеть vnet-2. Используйте следующую команду, чтобы войти в подписку-1 , чтобы найти идентификатор приложения spn-1-peer-vnet.

  1. Используйте az login для входа в подписку-1.

    az login
    
  2. Используйте az ad sp list для получения идентификатора приложения spn-1-peer-vnet. Обратите внимание на идентификатор приложения в выходных данных. Этот идентификатор приложения используется в URL-адресе проверки подлинности в последующих шагах.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid1
    
  3. Используйте идентификатор приложения для spn-1-peer-vnet и идентификатор клиента Microsoft Entra ID для подписки-2, чтобы создать URL-адрес входа для утверждения. URL-адрес построен из следующего примера:

    https://login.microsoftonline.com/entra-tenant-id-subscription-2/oauth2/authorize?client_id={$appid1}&response_type=code&redirect_uri=https://www.microsoft.com
    

    URL-адрес выглядит примерно так, как показано в приведенном ниже примере.

    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
    
  4. Откройте URL-адрес в веб-браузере и войдите с правами администратора в клиенте Идентификатора Microsoft Entra в подписке-2.

  5. Утвердить приложение spn-1-peer-vnet. Домашняя страница microsoft.com отображается, если проверка подлинности выполнена успешно.

Назначение виртуальной сети spn-1-peer-vnet виртуальной сети-2

После утверждения администратором spn-1-peer-vnet добавьте его в виртуальную сеть vnet-2 в качестве участника сети.

  1. Используйте az login для входа в подписку-2.

    az login
    
  2. Используйте az ad sp list , чтобы найти идентификатор appId для spn-1-peer-vnet и поместить в переменную для последующего использования.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. Используйте az network vnet show , чтобы получить идентификатор ресурса виртуальной сети-2 в переменную для использования в последующих шагах.

    vnetid=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  4. Используйте az role assignment create, чтобы добавить spn-1-peer-vnet в vnet-2 в качестве участника сети.

    az role assignment create --assignee $appid1 \
        --role "Network Contributor" \
        --scope $vnetid
    

Одноранговая виртуальная сеть-1 в vnet-2 и vnet-2 в vnet-1

Для однорангового подключения vnet-1 к виртуальной сети-2 используйте идентификатор приложения субъекта-службы и пароль для входа в клиент Идентификатора Microsoft Entra, связанный с подпиской-1.

Получение идентификатора приложения spn-1-peer-vnet и spn-2-peer-vnet

В целях этой статьи войдите в каждую подписку и получите идентификатор приложения каждого субъекта-службы и идентификатор ресурса каждой виртуальной сети. Используйте эти значения для входа в каждую подписку с помощью имени участника-службы в последующих шагах. Эти действия не требуются для пирринга виртуальных сетей, если обе стороны уже имеют идентификатор приложения субъектов-служб и идентификатор ресурса виртуальных сетей.

  1. Используйте az login для входа в подписку-1 с обычной учетной записью пользователя.

    az login
    
  2. Используйте az network vnet show , чтобы получить идентификатор ресурса виртуальной сети-1 в переменную для использования в последующих шагах.

    vnetid1=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  3. Используйте az ad sp list , чтобы получить идентификатор appId spn-1-peer-vnet и поместить в переменную для использования в последующих шагах.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. Используйте az login для входа в подписку-2 с обычной учетной записью пользователя.

    az login
    
  5. Используйте az network vnet show , чтобы получить идентификатор ресурса виртуальной сети-2 в переменную для использования в последующих шагах.

    vnetid2=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  6. Используйте az ad sp list , чтобы получить идентификатор appId spn-2-peer-vnet и поместить в переменную для использования в последующих шагах.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid2
    
  7. Используйте az logout , чтобы выйти из сеанса Azure CLI с помощью следующей команды. Не закрывайте терминал.

    az logout
    

Пиринг виртуальных сетей

  1. Используйте az login для входа в подписку-1 с spn-1-peer-vnet. Чтобы завершить команду, необходимо идентификатор клиента Microsoft Entra ID, связанного с подпиской-1 . Пароль показан в примере с заполнителем переменной. Замените пароль, который вы указали во время создания ресурса. Замените заполнитель идентификатором --tenant клиента Microsoft Entra ID, связанного с подпиской-1.

    az login \
        --service-principal \
        --username $appid1 \
        --password $password \
        --tenant aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
    
  2. Используйте az login для входа в подписку-2 с spn-2-peer-vnet. Чтобы завершить команду, необходимо идентификатор клиента Microsoft Entra ID, связанного с подпиской-2 . Пароль показан в примере с заполнителем переменной. Замените пароль, который вы указали во время создания ресурса. Замените заполнитель на --tenant идентификатор клиента клиента Microsoft Entra ID, связанного с подпиской-2.

    az login \
        --service-principal \
        --username $appid2 \
        --password $password \
        --tenant bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f
    
  3. Используйте az account set, чтобы изменить контекст на подписку-1.

    az account set --subscription "subscription-1-subscription-id-NOT-ENTRA-TENANT-ID"
    
  4. Используйте az network vnet peering create , чтобы создать пиринг между виртуальной сетью-1 и 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
    
  5. Используйте az network vnet peering list , чтобы проверить пиринг между виртуальной сетью-1 и vnet-2.

    az network vnet peering list \
        --resource-group test-rg-1 \
        --vnet-name vnet-1 \
        --output table
    
  6. Используйте az account set, чтобы изменить контекст на подписку-2.

    az account set --subscription "subscription-2-subscription-id-NOT-ENTRA-TENANT-ID"
    
  7. Используйте az network vnet peering create to create to create the virtual network peering between vnet-2 and 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
    
  8. Используйте az network vnet peering list , чтобы проверить пиринг между виртуальной сетью-2 и vnet-1.

    az network vnet peering list \
        --resource-group test-rg-2 \
        --vnet-name vnet-2 \
        --output table