다음을 통해 공유


다른 구독의 가상 네트워크를 서비스 주체 이름으로 연결

사용자 계정 또는 게스트 계정을 사용하지 않고 다른 구독에서 가상 네트워크를 연결해야 하는 시나리오가 있습니다. 이 가상 네트워크 방법에서 두 가상 네트워크를 다른 구독의 SPN(서비스 사용자 이름)과 피어하는 방법을 알아봅니다. 서로 다른 구독의 가상 네트워크와 Microsoft Entra ID 테넌트 간의 가상 네트워크 피어링이 Azure CLI 또는 PowerShell을 통해 피어링되어야 합니다. 현재 Azure Portal에는 다른 구독의 SPN과 가상 네트워크를 피어하는 옵션이 없습니다.

필수 조건

  • 활성 구독 2개와 Microsoft Entra ID 테넌트 2개가 있는 Azure 계정 체험 계정을 만듭니다.

  • 서비스 주체를 만들고, 앱 권한을 할당하고, 각 구독과 연결된 Microsoft Entra ID 테넌트에 리소스를 만들 수 있는 계정 권한입니다.

  • 이 방법 문서대로 하려면 Azure CLI 버전 2.31.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

사용된 리소스

SPN Resource group 구독/테넌트 가상 네트워크 위치
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 가입을 사용하여 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 만들기를 사용하여 subscription-1에서 vnet-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 보기를 사용하여 앞에서 만든 가상 네트워크의 리소스 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": "11112222-bbbb-3333-cccc-4444dddd5555",
    "displayName": "spn-1-peer-vnet",
    "password": "",
    "tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"    
    }
    
  3. 서비스 주체의 appId는 SPN의 구성을 완료하기 위해 후속 단계에서 사용됩니다. az ad sp 목록을 사용하여 나중에 사용할 수 있도록 SPN의 appId를 변수에 배치합니다.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. 이전 단계에서 만든 SPN에는 인증 프로세스 승인을 완료하기 위한 리디렉션 URI가 있어야 하며 다중 테넌트 사용으로 변환되어야 합니다. az ad app 업데이트를 사용하여 리디렉션 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 권한 추가az ad app 권한 부여를 사용하여 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 로그인을 사용하여 subscription-2와 연결된 Microsoft Entra ID 테넌트에서 리소스 그룹, 가상 네트워크 및 SPN을 만들 수 있는 권한이 있는 사용자 계정으로 subscription-2로 로그인합니다.

    az login
    
  2. az 그룹 만들기를 사용하여 리소스 그룹을 만듭니다.

    az group create \
        --name test-rg-2 \
        --location westus2  
    
  3. az network vnet 만들기를 사용하여 subscription-2에서 vnet-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을 만듭니다. 이 SPN은 가상 네트워크 피어를 허용하기 위해 향후 단계에서 vnet-2 범위에 추가됩니다.

  1. az network vnet 보기를 사용하여 앞에서 만든 가상 네트워크의 리소스 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": "22223333-cccc-4444-dddd-5555eeee6666",
    "displayName": "spn-2-peer-vnet",
    "password": "",
    "tenant": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
    }    
    
  3. 서비스 주체의 appId는 SPN의 구성을 완료하기 위해 후속 단계에서 사용됩니다. az ad sp 목록을 사용하여 나중에 사용할 수 있도록 SPN의 ID를 변수에 배치합니다.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. 이전 단계에서 만든 SPN에는 인증 프로세스 승인을 완료하기 위한 리디렉션 URI가 있어야 하며 다중 테넌트 사용으로 변환되어야 합니다. az ad app 업데이트를 사용하여 리디렉션 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 권한 추가az ad app 권한 부여를 사용하여 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-peervnet-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 로그인을 사용하여 subscription-2에 로그인합니다.

    az login
    
  2. az ad sp 목록을 사용하여 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 및 subscription-1Microsoft 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/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을 열고 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 로그인을 사용하여 subscription-1에 로그인합니다.

    az login
    
  2. az ad sp 목록을 사용하여 spn-2-peer-vnet에 대한 appId를 찾고 나중에 사용할 변수에 배치합니다.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. az network vnet 보기를 사용하여 vnet-1 리소스 ID를 이후 단계에서 사용할 변수로 가져옵니다.

    vnetid=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  4. az 역할 할당 만들기 다음 명령을 사용하여 spn-2-peer-vnet에서 vnet-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-vnetvnet-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 로그인을 사용하여 subscription-1에 로그인합니다.

    az login
    
  2. az ad sp 목록을 사용하여 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/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을 열고 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 로그인을 사용하여 subscription-2에 로그인합니다.

    az login
    
  2. az ad sp 목록을 사용하여 spn-1-peer-vnet에 대한 appId를 찾고 나중에 사용할 변수에 배치합니다.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  3. az network vnet 보기를 사용하여 vnet-2 리소스 ID를 이후 단계에서 사용할 변수로 가져옵니다.

    vnetid=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  4. az 역할 할당 만들기를 사용하여 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 로그인을 사용하여 일반 사용자 계정으로 subscription-1에 로그인합니다.

    az login
    
  2. az network vnet 보기를 사용하여 vnet-1의 리소스 ID를 이후 단계에서 사용할 변수로 가져옵니다.

    vnetid1=$(az network vnet show \
                --resource-group test-rg-1 \
                --name vnet-1 \
                --query id \
                --output tsv)
    
  3. az ad sp 목록을 사용하여 spn-1-peer-vnet의 appId를 가져오고 이후 단계에서 사용할 변수에 배치합니다.

    appid1=$(az ad sp list \
                --display-name spn-1-peer-vnet \
                --query [].appId \
                --output tsv)
    
  4. az 로그인을 사용하여 일반 사용자 계정으로 subscription-2에 로그인합니다.

    az login
    
  5. az network vnet 보기를 사용하여 vnet-2 리소스 ID를 이후 단계에서 사용할 변수로 가져옵니다.

    vnetid2=$(az network vnet show \
                --resource-group test-rg-2 \
                --name vnet-2 \
                --query id \
                --output tsv)
    
  6. az ad sp 목록을 사용하여 spn-2-peer-vnet의 appId를 가져오고 이후 단계에서 사용할 변수에 배치합니다.

    appid2=$(az ad sp list \
                --display-name spn-2-peer-vnet \
                --query [].appId \
                --output tsv)
    echo $appid2
    
  7. az 로그인을 사용하여 다음 명령을 사용하여 Azure CLI 세션에서 로그아웃합니다. 터미널 닫지 마세요.

    az logout
    

가상 네트워크 피어

  1. az 로그인을 사용하여 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 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
    
  2. az 로그인을 사용하여 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 bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f
    
  3. az 계정 설정을 사용하여 컨텍스트를 subscription-1로 변경합니다.

    az account set --subscription "subscription-1-subscription-id-NOT-ENTRA-TENANT-ID"
    
  4. az network vnet 피어링 만들기를 사용하여 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 피어링 리스트를 사용하여 vnet-1vnet-2간의 가상 네트워크 피어링을 확인합니다.

    az network vnet peering list \
        --resource-group test-rg-1 \
        --vnet-name vnet-1 \
        --output table
    
  6. az 계정 설정을 사용하여 컨텍스트를 subscription-2로 변경합니다.

    az account set --subscription "subscription-2-subscription-id-NOT-ENTRA-TENANT-ID"
    
  7. az network vnet 피어링 만들기를 사용하여 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 피어링 목록을 사용하여 vnet-2vnet-1간의 가상 네트워크 피어링을 확인합니다.

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