在 ARM 模板中引用 Azure AD 服务主体 ID

Posted

技术标签:

【中文标题】在 ARM 模板中引用 Azure AD 服务主体 ID【英文标题】:Referencing an Azure AD service principal ID within an ARM template 【发布时间】:2021-11-09 02:22:44 【问题描述】:

有没有办法通过内置的 ARM 模板函数获取 Azure AD 服务主体 ID?我正在寻找与 Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider" 等效的 ARM 并画一个空白。

上下文:我正在关注a tutorial on deploying a Service Fabric managed cluster using an existing load balancer,本教程要求您运行 powershell 命令以获取资源提供者的服务主体 ID,然后在 ARM 模板中对所述 ID 进行硬编码。此 ID 预计因租户而异,同一模板将部署到多个租户。

【问题讨论】:

不,您无法从 ARM 获取 AAD 对象。这些是不同的 API。最适合您的选择是将 SP ID 作为 ARM 模板的参数传递。 【参考方案1】:

对于某些 Azure 资源,您可以使用 reference template function with the full parameter 检索身份属性。

但是,在 ARM 中没有检索服务主体 ID 的通用方法。 Get-AzADServicePrincipal powershell cmdlet 需要 Azure AD 图形权限,目前无法授予用户在 ARM 模板中分配的 MSI。

【讨论】:

【参考方案2】:

我们可以将资源提供者命名空间用作 Microsoft.ServiceFabric

另外,可以通过下面的方式来获取principal id,只需要传递几个参数。

[reference(concat(resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase')), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]

参考模板如下:


  "type": "Microsoft.KeyVault/vaults",
  "name": "[variables('uniqueResourceNameBase')]",
  "apiVersion": "2016-10-01",
  "location": "[resourceGroup().location]",
  "properties": 
    "sku": 
      "family": "A",
      "name": "standard"
    ,
    "tenantId": "[subscription().tenantid]",
    "accessPolicies": [
      
        "tenantId": "[subscription().tenantid]",
        "objectId": "[reference(concat(resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase')), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]",
        "permissions": 
          "keys": [],
          "secrets": [
            "get"
          ],
          "certificates": []
        
      
    ],
    "enabledForDeployment": false,
    "enabledForDiskEncryption": false,
    "enabledForTemplateDeployment": false
  ,
  "dependsOn": [
    "[resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase'))]"
  ]

注意:根据您的要求修改资源提供者命名空间和参数。

【讨论】:

以上是关于在 ARM 模板中引用 Azure AD 服务主体 ID的主要内容,如果未能解决你的问题,请参考以下文章