サービス プリンシパル名を使用して、異なるサブスクリプションの仮想ネットワークを接続する

ユーザー アカウントやゲスト アカウントを使用せずに、異なるサブスクリプションの仮想ネットワークに接続する必要があるシナリオが存在します。 この仮想ネットワークの方法では、異なるサブスクリプションのサービス プリンシパル名 (SPN) を使用して 2 つの仮想ネットワークをピアリングする方法について説明します。 異なるサブスクリプション内の仮想ネットワークと Microsoft Entra ID テナント間の仮想ネットワーク ピアリングは、Azure CLI または PowerShell を使用してピアリングする必要があります。 現在、Azure portal には、異なるサブスクリプション内の SPN と仮想ネットワークをピアリングするオプションはありません。

前提条件

  • 2 つのアクティブなサブスクリプションと 2 つの Microsoft Entra ID テナントを持つ Azure アカウント。 無料でアカウントを作成できます

  • サービス プリンシパルを作成し、アプリのアクセス許可を割り当て、各サブスクリプションに関連付けられている Microsoft Entra ID テナントにリソースを作成するためのアカウント アクセス許可。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この操作方法に関する記事では、Azure CLI のバージョン 2.31.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

使用済みのリソース

SPN リソース グループ サブスクリプション/テナント 仮想ネットワーク 場所
spn-1-peer-vnet test-rg-1 subscription-1 vnet-1 米国東部 2
spn-2-peer-vnet test-rg-2 subscription-2 vnet-2 米国西部 2

subscription-1 リソースを作成する

  1. az sign-in を使用して、subscription-1 に関連付けられた Microsoft Entra ID テナントにリソース グループ、仮想ネットワーク、SPN を作成するアクセス許可を持つユーザー アカウントで subscription-1 にサインインします。

    az login
    
  2. az group create を使用して、リソース グループを作成します。

    az group create \
        --name test-rg-1 \
        --location eastus2  
    
  3. az network vnet create を使用して、subscription-1vnet-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 を作成します。 この SPN は、仮想ネットワーク ピアを許可するために、今後の手順で vnet-2 のスコープに追加されます。

  1. az network vnet show を使用して、前に作成した仮想ネットワークのリソース ID を、後の手順で使用するために変数に配置します。

    vnetid=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  2. az ad sp create-for-rbac を使用して、仮想ネットワーク vnet-1 にスコープ指定されたネットワーク共同作成者のロールを持つ spn-1-peer-vnet を作成します。

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

    このステップでの作成の出力をメモします。 この出力には、パスワードのみが表示されます。 後のサインイン手順で使用するので、パスワードをコピーしておきます。

    {
    "appId": "baa9d5f8-c1f9-4e74-b9fa-b5bc551e6cd0",
    "displayName": "spn-1-peer-vnet",
    "password": "",
    "tenant": "c2d26d12-71cc-4f3b-8557-1fa18d077698"    
    }
    
  3. サービス プリンシパルの appId は、以降の手順で SPN の構成を完了するために使用されます。 az ad sp list を使用して、後で使用するために SPN の appId を変数に配置します。

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. 前の手順で作成した SPN には、認証プロセスの承認を完了するためのリダイレクト URI が必要であり、マルチテナント使用に変換する必要があります。 az ad app update を使用して、リダイレクト URI として https://www.microsoft.com を追加し、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 addaz ad app permission grant を使用して、User.Read の Microsoft Graph アクセス許可をサービス プリンシパルに追加します。

    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
    

subscription-2 リソースを作成する

  1. az login を使用して、subscription-2 に関連付けられた Microsoft Entra ID テナントにリソース グループ、仮想ネットワーク、SPN を作成するアクセス許可を持つユーザー アカウントで subscription-2 にサインインします。

    az login
    
  2. az group create を使用して、リソース グループを作成します。

    az group create \
        --name test-rg-2 \
        --location westus2  
    
  3. az network vnet create を使用して、subscription-2vnet-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 を作成する

前の手順で作成した仮想ネットワークへのスコープを持つ spn2-peer-vnet を作成します。 この SPN は、仮想ネットワーク ピアを許可するために、今後の手順で vnet-2 のスコープに追加されます。

  1. az network vnet show を使用して、前に作成した仮想ネットワークのリソース ID を、後の手順で使用するために変数に配置します。

    vnetid=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  2. az ad sp create-for-rbac を使用して、仮想ネットワーク vnet-2 にスコープ指定されたネットワーク共同作成者のロールを持つ spn-2-peer-vnet を作成します。

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

    このステップでの作成の出力をメモします。 後のサインイン手順で使用するので、パスワードをコピーしておきます。 パスワードは再び表示されません。

    出力は次の出力のようになります。

    {
    "appId": "19b439a8-614b-4c8e-9e3e-b0c901346362",
    "displayName": "spn-2-peer-vnet",
    "password": "",
    "tenant": "24baaf57-f30d-4fba-a20e-822030f7eba3"
    }    
    
  3. サービス プリンシパルの appId は、以降の手順で SPN の構成を完了するために使用されます。 az ad sp list を使用して、後で使用するために SPN の ID を変数に配置します。

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. 前の手順で作成した SPN には、認証プロセスの承認を完了するためのリダイレクト URI が必要であり、マルチテナント使用に変換する必要があります。 az ad app update を使用して、リダイレクト URI として https://www.microsoft.com を追加し、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 addaz ad app permission grant を使用して、User.Read の Microsoft Graph アクセス許可をサービス プリンシパルに追加します。

    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
    

subscription-1 に spn-2-peer-vnet を登録し、vnet-1 にアクセス許可を割り当てる

Microsoft Entra ID テナントの管理者アクセス許可を持つユーザー アカウントは、spn-2-vnet-peersubscription-1 に追加するプロセスを完了する必要があります。 完了すると、spn-2-vnet-peer に、vnet-1 へのアクセス許可を割り当てることができます。

subscription-1 に spn-2-peer-vnet アプリを登録する

subscription-1 Microsoft Entra ID テナントの管理者は、仮想ネットワーク vnet-1 に追加できるように、サービス プリンシパル spn-2-peer-vnet を承認する必要があります。 次のコマンドを使用して、subscription-2 にサインインし、spn-2-peer-vnet の appID を見つけます。

  1. az login を使用して subscription-2 にサインインします。

    az login
    
  2. az ad sp list を使用して、spn-2-peer-vnet の appId を取得します。 出力内の appID をメモします。 この appID は、後の手順の認証 URL で使用されます。

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid2
    
  3. spn-2-peer-vnet の appid と、subcription-1 の Microsoft Entra ID テナント ID を使用して、承認用のサインイン 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/c2d26d12-71cc-4f3b-8557-1fa18d077698/oauth2/authorize?client_id=19b439a8-614b-4c8e-9e3e-b0c901346362&response_type=code&redirect_uri=https://www.microsoft.com
    
  4. Web ブラウザーで URL を開き、subscription-1 の Microsoft Entra ID テナントの管理者でサインインします。

  5. アプリケーション spn-2-peer-vnet を承認します。 認証が成功すると、microsoft.com ホームページが表示されます。

vnet-1 に spn-2-peer-vnet を割り当てる

管理者が spn-2-peer-vnet を承認した後、ネットワーク共同作成者として仮想ネットワーク vnet-1 に追加します。

  1. az login を使用して、subscription-1 にサインインします。

    az login
    
  2. az ad sp list を使用して、spn-2-peer-vnet の appId を検索し、後で使用するために変数に配置します。

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. az network vnet show を使用して、vnet-1 のリソース ID を取得し、後の手順で使用するために変数に配置します。

    vnetid=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  4. 次のコマンド az role assignment create を使用して、ネットワーク共同作成者として spn-2-peer-vnetvnet-1 に追加します。

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

subscription-2 に spn-1-peer-vnet を登録し、vnet-2 にアクセス許可を割り当てる

Microsoft Entra ID テナントの管理者アクセス許可を持つユーザー アカウントは、spn-1-peer-vnetsubscription-2 に追加するプロセスを完了する必要があります。 完了すると、spn-1-peer-vnet に、vnet-2 へのアクセス許可を割り当てることができます。

subscription-2 に spn-1-peer-vnet アプリを登録する

subscription-2 Microsoft Entra ID テナントの管理者は、仮想ネットワーク vnet-2 に追加できるように、サービス プリンシパル spn-1-peer-vnet を承認する必要があります。 次のコマンドを使用して、subscription-1 にサインインし、spn-1-peer-vnet の appID を見つけます。

  1. az login を使用して、subscription-1 にサインインします。

    az login
    
  2. az ad sp list を使用して、spn-1-peer-vnet の appId を取得します。 出力内の appID をメモします。 この appID は、後の手順の認証 URL で使用されます。

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid1
    
  3. spn-1-peer-vnet の appid と、subscription-2 の Microsoft Entra ID テナント ID を使用して、承認用のサインイン 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/24baaf57-f30d-4fba-a20e-822030f7eba3/oauth2/authorize?client_id=baa9d5f8-c1f9-4e74-b9fa-b5bc551e6cd0&response_type=code&redirect_uri=https://www.microsoft.com
    
  4. Web ブラウザーで URL を開き、subscription-2 の Microsoft Entra ID テナントの管理者でサインインします。

  5. アプリケーション spn-1-peer-vnet を承認します。 認証が成功すると、microsoft.com ホームページが表示されます。

vnet-2 に spn-1-peer-vnet を割り当てる

管理者が spn-1-peer-vnet を承認した後、ネットワーク共同作成者として仮想ネットワーク vnet-2 に追加します。

  1. az login を使用して subscription-2 にサインインします。

    az login
    
  2. az ad sp list を使用して、spn-1-peer-vnet の appId を検索し、後で使用するために変数に配置します。

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. az network vnet show を使用して、vnet-2 のリソース ID を取得し、後の手順で使用するために変数に配置します。

    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-vnetvnet-2 に追加します。

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

vnet-1 を vnet-2 にピアリングし、vnet-2 を vnet-1 にピアリングする

vnet-1vnet-2 にピアリングするには、サービス プリンシパルの appId とパスワードを使用して、subscription-1 に関連付けられている Microsoft Entra ID テナントにサインインします。

spn-1-peer-vnet と spn-2-peer-vnet の appId を取得する

この記事では、各サブスクリプションにサインインし、各 SPN の appID と各仮想ネットワークのリソース ID を取得します。 これらの値を使用して、後の手順で SPN を使用して各サブスクリプションにサインインします。 双方に SPN の appID と仮想ネットワークのリソース ID が既にある場合、仮想ネットワークをピアリングするためにこれらの手順は必要ありません。

  1. az login を使用して、通常のユーザー アカウントで subscription-1 にサインインします。

    az login
    
  2. az network vnet show を使用して、vnet-1 のリソース ID を取得し、後の手順で使用するために変数に配置します。

    vnetid1=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  3. az ad sp list を使用して、spn-1-peer-vnet の appId を取得し、後の手順で使用するために変数に配置します。

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. az login を使用して、通常のユーザー アカウントで subscription-2 にサインインします。

    az login
    
  5. az network vnet show を使用して、vnet-2 のリソース ID を取得し、後の手順で使用するために変数に配置します。

    vnetid2=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  6. az ad sp list を使用して、spn-2-peer-vnet の appId を取得し、後の手順で使用するために変数に配置します。

    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 を使用して、spn-1-peer-vnetsubscription-1 にサインインします。 コマンドを完了するには、subscription-1 に関連付けられている Microsoft Entra ID テナントのテナント ID が必要です。 パスワードは、変数プレースホルダーを使用して例に示されています。 リソースの作成時にメモしたパスワードに置き換えます。 --tenant のプレースホルダーを、subscription-1 に関連付けられている Microsoft Entra ID テナントのテナント ID に置き換えます。

    az login \
        --service-principal \
        --username $appid1 \
        --password $password \
        --tenant c2d26d12-71cc-4f3b-8557-1fa18d077698
    
  2. az login を使用して、spn-2-peer-vnetsubscription-2 にサインインします。 コマンドを完了するには、subscription-2 に関連付けられている Microsoft Entra ID テナントのテナント ID が必要です。 パスワードは、変数プレースホルダーを使用して例に示されています。 リソースの作成時にメモしたパスワードに置き換えます。 --tenant のプレースホルダーを、subscription-2 に関連付けられている Microsoft Entra ID テナントのテナント ID に置き換えます。

    az login \
        --service-principal \
        --username $appid2 \
        --password $password \
        --tenant 24baaf57-f30d-4fba-a20e-822030f7eba3
    
  3. az account set を使用して、コンテキストを subscription-1 に変更します。

    az account set --subscription "subscription-1-subscription-id-NOT-ENTRA-TENANT-ID"
    
  4. az network vnet peering create を使用して、vnet-1vnet-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 を使用して、vnet-1vnet-2 の間の仮想ネットワーク ピアリングを検証します。

    az network vnet peering list \
        --resource-group test-rg-1 \
        --vnet-name vnet-1 \
        --output table
    
  6. az account set を使用して、コンテキストを subscription-2 に変更します。

    az account set --subscription "subscription-2-subscription-id-NOT-ENTRA-TENANT-ID"
    
  7. az network vnet peering create を使用して、vnet-2vnet-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 を使用して、vnet-2vnet-1 の間の仮想ネットワーク ピアリングを検証します。

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