我一直在测试最近发布的Azure托管服务标识(MSI),并使用此处文档中描述的ARM模板方法成功为我们的应用服务创建了MSI:How to use Azure Managed Service Identity (public preview) in App Service and Azure Functions
但是,我想在其他资源(例如密钥保管库)上授予对托管标识的访问权限。我已经能够通过门户网站执行此操作,但需要能够在PowerShell中编写脚本以便与我们的持续部署版本集成。
我已通过执行Set-AzureRmKeyVaultAccessPolicy cmdlet使用PowerShell成功创建了访问权限。但是,我只能使用硬编码的对象ID执行此操作,一旦创建了MSI,就可以从门户中手动复制和粘贴。
我的问题是,如何在PowerShell中获取对MSI对象ID的引用,以便我可以在其他资源上授予对它的访问权限?我能找到的唯一示例(例如this one),仅指虚拟机,而不是应用服务。
答案 0 :(得分:2)
您可以使用Get-AzureADServicePrincipal
。
$web=Get-AzureADServicePrincipal -SearchString "<name>"
$web.ObjectId
默认情况下,该名称是您的网络应用名称。
更新
对于OP的场景,我们可以使用template来获取对Azure MSI的引用。
答案 1 :(得分:0)
如果要使用Azure RM PowerShell命令行开关,请使用:
$(Get-AzureRmADServicePrincipal -SearchString $Name | where {$_.DisplayName -eq $Name}).Id
其中部分是为了确保您拥有特定的SP,而不是具有相同名称的多个结果开始。
编辑: 即便如此,也可能导致多个值。更好的解决方案是进一步过滤:
Get-AzureRmADServicePrincipal -SearchString $Name | where {($_.DisplayName -eq $Name) -and ($_.ServicePrincipalNames -match "https://identity.azure.net")}
答案 2 :(得分:0)
因为您是使用ARM部署资源的,所以我想添加此答案,因为您只能使用ARM:
为密钥库启用ARM模板部署:
{
"type": "Microsoft.KeyVault/vaults",
"name": "[parameters('keyVaultName')]",
...
"properties": {
"enabledForTemplateDeployment": true,
...
}
}
创建系统标识:
{
"type": "Microsoft.Web/sites",
"name": "[parameters('functionAppName')]",
...
"identity": {
"type": "SystemAssigned"
}
...
}
创建访问策略:
{
"apiVersion": "2018-02-14",
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"properties": {
"accessPolicies": [
{
"tenantId": "[parameters('tenantId')]",
"objectId": "[reference(resourceId('Microsoft.Web/sites', parameters('functionAppName')), '2018-02-01', 'Full').identity.principalId]",
"permissions": {
"secrets": [ "get" ]
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
"[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
]
}
答案 3 :(得分:0)
使用最新的AzureRM模块(6.13.1)
$AppProp = Get-AzureRmWebApp -ResourceGroupName $resourceGroupName -Name $name
写输出$AppProp.Identity
此身份属性提供了有关MSI的所有必需详细信息。
Type : SystemAssigned
TenantId : c764619f-8856-4a9f-a81e-eeb0c3f93592
PrincipalId : 3d317dfe-5589-4aae-94a4-51f1776979a7