Azure托管应用:无需手动权限将VM接入现有VNet/子网
Azure市场托管应用VNet接入权限问题解决方案
核心差异:部署权限上下文
手动ARM部署用的是你自身的用户权限(对目标VNet有子网加入权限),但发布到市场后,默认用应用注册的服务主体执行部署——这个服务主体没有访问客户VNet资源组的权限,所以触发LinkedAuthorizationFailed错误。而Cisco的vMX应用用的是用户上下文部署,即部署时调用购买者的用户身份,购买者本身对自己的VNet有足够权限,自然不需要额外配置托管标识。
解决方法:切换到用户上下文部署
在Azure市场发布应用的配置阶段,找到部署设置选项,启用使用用户上下文进行部署。对应到ARM模板的部署资源中,需要指定部署身份使用用户上下文,示例配置如下:
{ "type": "Microsoft.Resources/deployments", "apiVersion": "2021-04-01", "name": "[parameters('deploymentName')]", "properties": { "mode": "Incremental", "templateLink": { "uri": "[parameters('templateUri')]", "contentVersion": "1.0.0.0" }, "parameters": "[parameters('templateParameters')]", "principalId": "[parameters('userPrincipalId')]" } }
这样部署流程会自动使用购买者的权限完成子网加入操作,不需要客户手动配置权限。
关于ARM模板隐式授权的可能性
不行。Azure的权限边界限制了ARM模板无法跨资源组自动授予权限,你没办法在模板里直接让服务主体获取客户VNet的子网加入权限。唯一的“隐式”方式就是利用用户上下文部署,借助购买者自身的权限完成操作。
备选方案(不推荐)
如果必须用服务主体部署,那就得配置托管标识,并且要求客户提前给这个托管标识分配子网加入权限(或更宽泛的网络参与者角色)到目标VNet。但这会增加客户的部署步骤,体验远不如用户上下文部署。
内容的提问来源于stack exchange,提问作者polonoko
相关产品推荐
相关产品推荐

