gpt4 book ai didi

azure - 如何使用 Azure Bicep 将操作系统磁盘的网络设置为AllowPrivate“专用终结点(通过磁盘访问)”

转载 作者:行者123 更新时间:2023-12-03 03:47:59 28 4
gpt4 key购买 nike

我需要使用 Azure bicep 创建虚拟机,其中操作系统磁盘的网络需要设置为专用

在 Bicep 中:它是在磁盘资源下定义的,属性“networkAccessPolicy”设置为“AllowPrivate”

在门户中:在磁盘资源页面 -> 网络 -> 专用端点(通过磁盘访问)下定义

方法:

  1. 在虚拟机资源中创建操作系统磁盘,但我无法设置网络访问策略

  2. 在磁盘资源中创建操作系统磁盘,然后附加到虚拟机资源,但是这样我就不允许我需要指定它们的特定“osProfile”操作系统配置文件:{计算机名:'字符串'管理员用户名:'字符串'管理员密码:'字符串'窗口配置:{提供VMAgent: bool}}

最佳答案

这是可以实现的,但是对于Bicep来说这不是一个很好的解决方案,因为需要修补操作系统磁盘来关联diskAccess资源,而这种关联目前还没有实现可用 - afaik - 作为 ARMBicep 中的单独资源。因此,需要一些“二头肌模块跳跃”方法来分阶段实现这种修补。

我扩展了虚拟机的现有 vm.bicep 模板,并为磁盘添加了子网:

...
{
name: subnetDiskName
properties: {
addressPrefix: subnetDiskPrefix
privateEndpointNetworkPolicies: 'Disabled'
}
}
...

vm.bicep 的末尾,我添加了对此子网的引用,以便我可以将其作为参数传递到下一阶段。修补需要分为 2 个阶段/模块:

  1. 再次获取/获取操作系统磁盘作为对象
  2. 使用现有对象数据修补/放置操作系统磁盘 + 对 diskAccess 资源的引用
...
resource subnetDisk 'Microsoft.Network/virtualNetworks/subnets@2021-02-01' existing = {
name: subnetDiskName
parent: vnet
}

module patchDisk 'get-patch-disk.bicep' = {
name: 'getPatchDisk'
params: {
virtualMachineName: virtualMachineName
diskName: vm.properties.storageProfile.osDisk.name
location: location
subnetId: subnetDisk.id
}
}

对于第 1 阶段 get-patch-disk.bicep,只需将当前操​​作系统磁盘作为对象检索并将其传递:

param virtualMachineName string
param diskName string
param location string = resourceGroup().location
param subnetId string

resource vmDiskGet 'Microsoft.Compute/disks@2020-12-01' existing = {
name: diskName
}

module vmDiskPatch 'patch-disk.bicep' = {
name: 'patchDisk'
params: {
virtualMachineName: virtualMachineName
diskName: diskName
vmDiskGet: vmDiskGet
location: location
subnetId: subnetId
}
}

然后在第 2 阶段 patch-disk.bicep 创建 diskAccess 资源以及 privateEndpoint 并通过传输将其修补到操作系统磁盘中刚刚检索的对象中的所有给定属性并添加专用磁盘访问所需的属性。

param virtualMachineName string
param diskName string
param location string = resourceGroup().location
param vmDiskGet object
param subnetId string

var privateEndpointName = 'privateEndpoint${uniqueString(resourceGroup().name)}'
var privateLinkConnectionName = 'privateLink${uniqueString(resourceGroup().name)}'

var diskAccessName = 'diskAccess${uniqueString(resourceGroup().name)}'

resource diskAccess 'Microsoft.Compute/diskAccesses@2020-12-01' = {
name: diskAccessName
location: location
tags: {
vmName: virtualMachineName
}
}

resource privateEndpoint 'Microsoft.Network/privateEndpoints@2020-06-01' = {
name: privateEndpointName
location: location
tags: {
vmName: virtualMachineName
}
properties: {
subnet: {
id: subnetId
}
privateLinkServiceConnections: [
{
name: privateLinkConnectionName
properties: {
privateLinkServiceId: diskAccess.id
groupIds: [
'disks'
]
}
}
]
}
}

resource vmDiskPut 'Microsoft.Compute/disks@2020-12-01' = {
name: diskName
location: vmDiskGet.location
properties: {
diskAccessId: diskAccess.id
networkAccessPolicy: 'AllowPrivate'
creationData: vmDiskGet.properties.creationData
diskSizeGB: vmDiskGet.properties.diskSizeGB
}
}

免责声明

我认为更明智的解决方案是在一个 Bicep 模板中创建 diskAccess 资源以及 VM,然后返回 diskAccess.idvm.properties。 storageProfile.osDisk.name 作为输出参数。通过这些输出参数,使用简单的 az disk update -n "{diskName}"--network-access-policy AllowPrivate --disk-access "{diskAccessId}" 进行修补。

关于azure - 如何使用 Azure Bicep 将操作系统磁盘的网络设置为AllowPrivate“专用终结点(通过磁盘访问)”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68385774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com