PowerShell を使用して Azure テナント間でギャラリー VM イメージを共有する

共有イメージ ギャラリーでは、Azure RBAC を使用してイメージを共有できます。 Azure RBAC を使用すると、テナント内でイメージを共有できます。また、テナントの外部にいる個人と共有することもできます。 この単純な共有オプションの詳細については、「ギャラリーを共有する」を参照してください。

ただし、Azure テナントの外部で大規模にイメージを共有する場合は、共有を容易にするためにアプリ登録を作成することをお勧めします。 アプリ登録を使用すると、次のようにより複雑な共有シナリオが可能になります。

  • ある会社が別の会社を買収し、Azure インフラストラクチャは別々のテナントに分散しているときの共有イメージの管理。
  • Azure パートナーは、お客様の代理で Azure インフラストラクチャを管理します。 イメージのカスタマイズはパートナーのテナント内で行われますが、インフラストラクチャのデプロイはお客様のテナント内で行われます。

アプリの登録を作成する

イメージ ギャラリーのリソースを共有するために、両方のテナントが使用するアプリケーション登録を作成します。

  1. Azure portal で [アプリの登録 (プレビュー)] を開きます。
  2. ページ上部のメニューから [New registration](新しい登録) を選択します。
  3. [名前] に「myGalleryApp」と入力します。
  4. [サポートされているアカウントの種類] で、 [任意の組織のディレクトリ内のアカウントと、個人用の Microsoft アカウント] を選択します。
  5. [リダイレクト URI] に「 https://www.microsoft.com 」と入力し、 [登録] を選択します。 アプリの登録が作成されたら、概要ページが開きます。
  6. 概要ページの [Application (client) ID](アプリケーション (クライアント) ID) をコピーし、後で使用するために保存します。
  7. [Certificates & secrets](証明書とシークレット) を選択してから、 [New client secret](新しいクライアント シークレット) を選択します。
  8. [説明] に「Shared image gallery cross-tenant app secret」と入力します。
  9. [有効期限][1 年] の既定値のままにして [追加] を選択します。
  10. シークレットの値をコピーし、それを安全な場所に保存します。 ページを閉じると、取得できなくなります。

共有イメージ ギャラリーを使用するためのアクセス許可をアプリの登録に付与します。

  1. Azure portal で、他のテナントと共有する共有イメージ ギャラリーを選択します。
  2. [アクセス制御 (IAM)] を選択したら、 [ロール割り当ての追加][追加] を選択します。
  3. [ロール][閲覧者] を選択します。
  4. [アクセスの割り当て先][Azure AD のユーザー、グループ、サービス プリンシパル] のままにします。
  5. [選択] に「myGalleryApp」と入力し、一覧に表示されたら選択します。 完了したら、 [保存] を選択します。

テナント 2 にアクセス権を付与する

ブラウザーを使用してサインインを要求することで、テナント 2 にアプリケーションへのアクセス権を付与します。 <Tenant2 ID> を、イメージ ギャラリーを共有するテナントのテナント ID に置き換えます。 <Application (client) ID> を、作成したアプリの登録のアプリケーション ID に置き換えます。 置き換えが完了したら、URL をブラウザーに貼り付け、サインイン プロンプトに従ってテナント 2 にサインインします。

https://login.microsoftonline.com/<Tenant 2 ID>/oauth2/authorize?client_id=<Application (client) ID>&response_type=code&redirect_uri=https%3A%2F%2Fwww.microsoft.com%2F 

Azure portal でテナント 2 としてサインインし、アプリの登録に、VM を作成するリソース グループへのアクセス権を付与します。

  1. リソース グループを選択し、 [アクセス制御 (IAM)] を選択します。 [ロールの割り当ての追加][追加] を選択します。
  2. [ロール] に「共同作成者」と入力します。
  3. [アクセスの割り当て先][Azure AD のユーザー、グループ、サービス プリンシパル] のままにします。
  4. [選択] に「myGalleryApp」と入力し、一覧に表示されたら選択します。 完了したら、 [保存] を選択します。

注意

同じマネージド イメージを使用して別のイメージ バージョンを作成する前に、そのイメージ バージョンが構築とレプリケーションを完全に完了するまで待つ必要があります。

重要

ポータルを使用して、別の Azure テナント内のイメージから VM をデプロイすることはできません。 テナント間で共有されているイメージから VM を作成するには、Azure CLI または PowerShell を使用する必要があります。

PowerShell を使用した VM の作成

アプリケーション ID、シークレット、およびテナント ID を使用して両方のテナントにログインします。

$applicationId = '<App ID>'
$secret = <Secret> | ConvertTo-SecureString -AsPlainText -Force
$tenant1 = "<Tenant 1 ID>"
$tenant2 = "<Tenant 2 ID>"
$cred = New-Object -TypeName PSCredential -ArgumentList $applicationId, $secret
Clear-AzContext
Connect-AzAccount -ServicePrincipal -Credential $cred  -Tenant "<Tenant 1 ID>"
Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant "<Tenant 2 ID>"

アプリの登録のアクセス許可があるリソース グループに VM を作成します。 この例の情報を自身のものに置き換えます。

$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "myVMfromImage"

# Set a variable for the image version in Tenant 1 using the full image ID of the shared image version
$image = "/subscriptions/<Tenant 1 subscription>/resourceGroups/<Resource group>/providers/Microsoft.Compute/galleries/<Gallery>/images/<Image definition>/versions/<version>"

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location

# Networking pieces
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
  -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Allow
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration using the $image variable to specify the shared image
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzVMSourceImage -Id $image | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

次のステップ

Azure Portal を使用して、共有イメージ ギャラリー リソースも作成できます。