Azure 如何在同一ARM模板中授予VM对密钥库的访问权限

Azure 如何在同一ARM模板中授予VM对密钥库的访问权限,azure,azure-virtual-machine,azure-keyvault,arm-template,Azure,Azure Virtual Machine,Azure Keyvault,Arm Template,我正在尝试创建一个ARM模板,该模板能够配置VM和密钥库。VM标识设置为“SystemAssigned”类型。请参阅下面的代码片段: ... "name": "[variables('VM1')]", "type": "Microsoft.Compute/virtualMachines", "identity": { "type": "SystemAssigned" }, "

我正在尝试创建一个ARM模板,该模板能够配置VM和密钥库。VM标识设置为“SystemAssigned”类型。请参阅下面的代码片段:

        ...
        "name": "[variables('VM1')]",
        "type": "Microsoft.Compute/virtualMachines",
        "identity": { 
            "type": "SystemAssigned"
        },
        "apiVersion": "2019-07-01",
        ...
我希望能够授予VM访问Vault中机密的权限。为此,需要检索
accessPolicies
tenantID
ObjectID
。对于我正在使用的租户:

“tenantId”:“[subscription().tenantId]”,

是否有类似的方法来引用在同一模板中创建的VM的ObjectID


谢谢

您需要使用引用来获取VM的托管服务标识的对象id(主体id),以分配对KeyVault的访问权

我看到KeyVault需要租户ID和对象ID

模板中应已包含的租户
“tenantId”:“[subscription().tenantId]”

ObjectID是PrincipalId,如下面链接的文档和示例所示

{
    "apiVersion": "2017-09-01",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "[parameters('rbacGuid')]",
    "properties": {
        "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
        "principalId": "[reference(variables('vmResourceId'), '2017-12-01', 'Full').identity.principalId]",
        "scope": "[resourceGroup().id]"
    },
     "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
    ]
}

有时命名可能会有点混乱,它最近被清理了一点,但在某一点上,主体Id、对象Id和应用程序Id或多或少可以互换使用。