You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ARM模板创建Azure VM时将其加入Azure AD组

解决方案:将Azure AD组加入脚本集成到ARM模板(委派权限场景)

核心问题拆解

你的场景中,部署SPN仅被授予委派API权限,这意味着操作Azure AD组需要「有权限的用户身份」+「SPN」的双重认证,而ARM模板默认的部署上下文是SPN的非交互式身份,无法直接触发交互式认证流程,所以需要通过调整认证逻辑和脚本适配来实现集成。

可行实现步骤

1. 调整认证逻辑:用Key Vault托管用户凭据

出于安全考虑,不要在脚本中硬编码用户凭据,而是将用户的认证信息存储在Azure Key Vault中,让虚拟机通过自身的托管身份获取凭据,完成交互式认证。

2. 编写适配的PowerShell脚本

修改你手动运行的脚本,使其支持从Key Vault拉取凭据并完成认证、组加入操作:

# 加载Azure模块(如果未预装)
Install-Module AzureAD -Force -AllowClobber -Scope CurrentUser

# 通过VM的系统分配身份获取Key Vault中的用户凭据
$secret = Get-AzKeyVaultSecret -VaultName "你的密钥库名称" -Name "aad-user-cred" -AsPlainText
$securePwd = ConvertTo-SecureString $secret -AsPlainText -Force
$userCred = New-Object System.Management.Automation.PSCredential("你的用户账号@租户域名", $securePwd)

# 用用户凭据完成Azure AD认证(依赖SPN的委派权限)
Connect-AzureAD -Credential $userCred -TenantId "你的租户ID"

# 获取目标VM的AD对象ID(VM需已注册到Azure AD)
$vmObjectId = (Get-AzADServicePrincipal -DisplayName "你的VM名称").Id

# 将VM加入指定Azure AD组
Add-AzureADGroupMember -ObjectId "目标组的对象ID" -RefObjectId $vmObjectId

3. 将脚本集成到ARM模板的自定义扩展

在ARM模板的VM资源节点下,添加CustomScriptExtension资源,引用存储在Azure Blob存储中的脚本(或直接内嵌脚本内容):

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(parameters('vmName'), '/JoinAADGroup')]",
  "apiVersion": "2023-07-01",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[resourceId('Microsoft.Compute/virtualMachines', parameters('vmName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.10",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://你的存储账户.blob.core.windows.net/scripts/JoinAADGroup.ps1"
      ]
    },
    "protectedSettings": {
      "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File JoinAADGroup.ps1"
    }
  }
}

4. 关键权限配置

  • VM托管身份权限:给VM的系统分配/用户分配身份授予Key Vault的「机密读取」权限
  • Azure AD权限:确保用于认证的用户拥有「添加组成员」的权限,同时SPN已被委派对应Azure AD组操作的委派权限
  • 存储权限:如果脚本存在Blob存储中,需确保VM能访问该Blob(可设置存储容器为私有,给VM身份授予存储Blob读取权限)

替代方案:使用临时应用权限

如果交互式认证不符合你的流程,可以通过Azure AD PIM(特权身份管理)给SPN分配临时应用权限(而非委派权限),部署时激活临时权限,让ARM模板能以SPN的非交互式身份完成组加入操作,绕过双重认证的限制。


内容的提问来源于stack exchange,提问作者ramoj kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:52:32