【问题标题】:How to create a VM from a shared image gallery in a different azure customer account如何从不同 Azure 客户帐户中的共享映像库创建 VM
【发布时间】:2021-02-10 10:16:22
【问题描述】:

我已经设置了一个共享图像库并向其中添加了一个 VM 图像。我可以通过它在我的订阅中配置一个新的 VM。一位朋友想在他的订阅中使用同一个映像来预配同一个 VM,这是一个完全不同的 Azure 帐户。他已将我临时添加为他的订阅的所有者,我可以从我的 azure 门户更改目录以访问和使用它没有问题。

当我尝试创建 VM 时,我无法从他的订阅(一个完全不同的 Azure 帐户)中找到我的订阅/帐户中的画廊。

我尝试过注册应用程序,甚至在他的订阅中添加了应用程序的权限(贡献者)。还是看不到。

这有可能还是我做错了什么?

非常感谢

【问题讨论】:

标签: azure azure-virtual-machine


【解决方案1】:

目前,我们无法使用门户从另一个 Azure 租户中的映像部署 VM。若要从租户之间共享的映像创建 VM,必须使用 Azure CLI 或 Powershell。更多详情请参考here

例如

  1. 在租户 1 中创建服务主体

  2. 授予租户 2 访问权限

一个。将 sp 注册到租户 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

b.将 Azure RABC 角色 Contributor 分配给 sp

  1. 创建虚拟机

一个。使用应用程序 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 $tenant1
Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $tenant2

b.创建虚拟机

$resourceGroup = ""
$location = ""
$vmName = ""

# 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多