我有一个使用Azure bicep创建虚拟机的需求,其中OS磁盘的联网需要设置为私有
在Bicep中:它在磁盘资源下定义,属性“networkAccessPolicy”设置为“AllowPrivate”
在portal中:在磁盘资源页面-〉网络-〉私有端点(通过磁盘访问)下定义
方法:
1.在虚拟机资源中创建操作系统磁盘,但没有选项可供我设置networkAccessiPolicy
1.在磁盘资源中创建操作系统磁盘,然后附加到虚拟机资源,但是这样我就不允许指定特定的“osProfile”,我需要指定它们osProfile:{计算机名称:'string' adminUsername:'string' adminPassword:'string' windowsConfiguration:{ provisionVMAgent:bool } }
2条答案
按热度按时间slwdgvem1#
这是可以实现的,但使用Bicep并不是一个好的解决方案,因为需要对OS磁盘进行修补以关联diskAccess资源,而这一关联目前在ARM或Bicep中作为单独的资源不可用。因此,需要一些“Bicep模块跳跃”方法来分阶段实现此修补。
我为虚拟机扩展了现有的
vm.bicep
模板,并为磁盘添加了子网:在
vm.bicep
的末尾,我添加了一个对这个子网的引用,这样我就可以将它作为参数传递给下一个阶段。修补需要分为2个阶段/模块:1.再次作为对象获取/获取操作系统磁盘
1.使用现有对象数据修补/放置操作系统磁盘+引用
diskAccess
资源对于阶段1
get-patch-disk.bicep
,只需检索当前操作系统磁盘作为对象并将其传递:然后,在阶段2中,
patch-disk.bicep
创建diskAccess
资源沿着privateEndpoint
,并将其修补到OS磁盘中,方法是从刚刚检索到的对象中传输所有给定的属性,并添加私有磁盘访问所需的属性。免责声明
我想更聪明的解决方案是在一个Bicep模板中创建
diskAccess
资源沿着VM,然后返回diskAccess.id
和vm.properties.storageProfile.osDisk.name
作为输出参数。使用这些输出参数,使用简单的az disk update -n "{diskName}" --network-access-policy AllowPrivate --disk-access "{diskAccessId}"
进行修补。lvmkulzt2#
我也遇到了同样的情况,也调查了问题中提到的两种方法。再加上微软的支持,我们无法实现其中的任何一种方法。
我最终创建了一个deploymentScript,它运行一个简单的AzureCLI命令将osDisk的
network-access-policy
设置为DenyAll
:何处
vmOSDiskName
是VM的资源定义中给定的osDisk的名称,以及vmResource
是Bicep文件中VM资源的符号名称