如何在Azure ARM模板中获取目录租户名称?

3
我需要在我的ARM模板中使用租户(目录租户)名称(特别是创建Web应用程序时)。 enter image description here 可以使用subscription().displayName获取订阅名称,但是如何获取关联的目录租户名称呢?
[subscription().tenantId.displayName][subscription().tenantId.Name]这样的表达式不起作用,而且我无法在网上找到任何有关此属性的存在。
我不想硬编码它,因为它可以很容易地由订阅所有者或帐户管理员更改,因此我正在寻找一些现有的变量\参数\等。

所以你需要将其作为参数传递或从某个资源属性中读取。 - 4c74356b41
我不想使用硬编码的对象。你能更具体一些吗?比如说,哪个资源有“租户名称”属性? - Sergey
据我所知,并没有一个(程序),但你可以创建一个资源并将其属性设置为租户名称。另外,自从什么时候参数被硬编码了?顺便说一下,你可以创建一个只输出租户名称并部署的假模板。之后你可以在你的模板中读取它的输出。虽然这样做实际上是硬编码的。 - 4c74356b41
我会尽力更有说服力一些 - 因为在ARM模型中无法从任何内部对象中获取“租户名称”,唯一的方法是手动指定它。想象一下,如果账户管理员或订阅所有者/全局管理员某天更改了目录名称 - 那么我所依赖的(旧)名称的所有代码都将失败。我如何确保始终拥有“最新”的目录名称?我如何创建一个资源并将其属性设置为租户名称,考虑到名称可能会在未来更改? - Sergey
1
你不能这样做,因为没有相应的ARM函数。唯一的办法是创建一个PowerShell或其他脚本来动态获取数据并将其作为参数传递。说实话,你本来就不应该使用租户名称。 - 4c74356b41
3个回答

14

现在模板函数已经可以使用租户ID了。请使用subscription()函数:subscription()。

可参考以下输出示例:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [],
    "outputs": {
        "subscriptionOutput": {
            "value": "[subscription()]",
            "type" : "object"
        }
    }
}

租户 ID:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [],
    "outputs": {
        "subscriptionOutput": {
            "value": "[subscription().tenantId]",
            "type" : "object"
        }
    }
}

参考:

https://learn.microsoft.com/zh-cn/azure/azure-resource-manager/templates/template-functions-resource#subscription


2

无法做到这一点。您只能返回这些值:

{
    "id": "/subscriptions/{subscription-id}",
    "subscriptionId": "{subscription-id}",
    "tenantId": "{tenant-id}",
    "displayName": "{name-of-subscription}"
}

参考资料:https://learn.microsoft.com/zh-cn/azure/azure-resource-manager/resource-group-template-functions-resource#subscription

这是一个与IT技术相关的资源链接,它提供了有关Azure资源管理器中资源组模板函数中订阅函数的详细信息。请注意,本文档保留了HTML标签,以便您更好地理解和使用。

0
您可以将部署脚本作为第一个资源运行。然后,在 PowerShell 中将租户名称作为标签写入您的 ARM 模板正在部署到的资源组。您还需要在部署中创建受管理的身份。

https://learn.microsoft.com/en-us/azure/templates/microsoft.managedidentity/userassignedidentities?pivots=deployment-language-arm-template

https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/deployment-script-template

Connect-AzAccount -identity
$TN = (Get-AzTenant).Name
$Tags += @{"TenantName"=$TN}
Set-AzResourceGroup -Name <your-resource-group-name> -Tag $Tags

然后在你的 ARM 模板中,只需引用即可

"[resourceGroup().tags.TenantName]"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接