在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Service Fabric AD 应用程序上分配服务主体管理员角色

服务主体的Azure AD OIDC ID令牌

用于部署和禁用 Azure 流分析服务的 ARM 模板

如何使用 Azure ARM 模板将 VM 部署到资源组“A”并引用资源组“B”中的现有密钥保管库?

使用 ARM 模板将 Azure KeyVault 机密从 KeyVault 获取到应用服务

如何使用 arm 模板更新 azure appsettings