2

我正在尝试通过从 Azure DevOps 发布管道触发的 Azure PowerShell 脚本自动创建某些天蓝色资源。我想创建一个函数应用程序,并自动集成对现有 Key Vault 中机密的读取权限。此 Key Vault 位于同一 Azure 订阅中。

虽然我可以按照文档创建大多数资源,但似乎缺少有关使用 Azure PowerShell 创建某些资源的文档(或者我找不到它)。

如果我按照此链接中的示例进行操作,我可以通过使用 Azure 门户中的 UI 毫无问题地完成它,但我在Microsoft Docs上找不到任何文档来使用 PowerShell 来完成它。

    Write-Host "Creating Function App..."
    $fnApp = New-AzFunctionApp   -Name $functionAppName `
                        -ResourceGroupName $emailFunctionRg `
                        -Location "$(AzureRegion)" `
                        -StorageAccount $storageName `
                        -Runtime dotnet `
                        -FunctionsVersion '3' `
                        -IdentityType SystemAssigned
    Write-Host "Function App created!"

    Write-Host "Assigning Key Vault access..."
    $appId = Get-AzADServicePrincipal -DisplayName $functionAppName
    Set-AzKeyVaultAccessPolicy -VaultName EmailSettings -ServicePrincipalName $appId -PermissionsToSecrets Get,List
    Write-Host "Key Vault access granted!"

运行Set-AzKeyVaultAccessPolicy失败并显示“权限不足,无法完成操作”。. 但我不确定这是否是正确的路径,这只是一个猜测,基于文档中的可用功能。

有任何想法吗?

4

2 回答 2

1

在这里检查两个潜在问题:

  1. 您的应用程序创建将结果分配给 $fnApp。也许$fnApp或如上所述,$fnApp.ApplicationId您应该将其用于-ServicePrincipalName访问策略授权的参数。
  2. 您无权分配 RBAC 角色。转到 Key Vault,选择Access Control,然后单击角色分配选项卡并验证您的用户是否以管理员、用户访问管理员或所有者的身份出现在列表中。

编辑:关于 RBAC 权限,由于它是在 Azure DevOps 的 Azure Powershell 中运行的,因此您需要检查服务连接的服务主体的角色分配 - 在 Azure 门户中的 Azure Active Directory 下,查找用于创建的主体服务连接,并确保 THAT 在密钥保管库上获得正确的角色。

于 2021-02-22T13:11:33.143 回答
0

经过一些试验和错误后,我得出的结论是,我没有为 Set-AzKeyVaultAccessPolicy cmdlet 使用正确的参数。

以下脚本将起作用(如果运行它的服务原则具有适当的角色,例如他/她的回答中提到的 WaitingForGuacamole):

Write-Host "Creating Function App..."
$fnApp = New-AzFunctionApp -Name <FnAppName> `
                    -ResourceGroupName <ResourceGroupName> `
                    -Location <AzureRegion> `
                    -StorageAccount <StorageAccount> `
                    -Runtime dotnet `
                    -FunctionsVersion '3' `
                    -IdentityType SystemAssigned
Write-Host "Function App created!"

Write-Host "Assigning Key Vault access..."
Set-AzKeyVaultAccessPolicy -VaultName <NameOfTheKeyVault> -ObjectId (Get-AzADServicePrincipal -DisplayName <FnAppName>).Id -PermissionsToSecrets <Get, List, etc...>
Write-Host "Key Vault access granted!"
于 2021-02-23T10:50:13.107 回答