【问题标题】:Azure PowerShell Set-AzKeyVaultAccessPolicy command setting access policy to data factoryAzure PowerShell Set-AzKeyVaultAccessPolicy 命令设置对数据工厂的访问策略
【发布时间】:2021-03-15 17:09:08
【问题描述】:

在尝试通过 PowerShell 为我的 Azure 数据工厂提供访问策略(Azure 密钥保管库)时,我收到以下错误:

Set-AzKeyVaultAccessPolicy:操作返回了无效的状态代码 'BadRequest' 在 line:64 char:1

  • Set-AzKeyVaultAccessPolicy -VaultName $keyvaultname -ServicePrincipal ...
  •   + CategoryInfo          : CloseError: (:) [Set-AzKeyVaultAccessPolicy], Gr     aphErrorException
      + FullyQualifiedErrorId : Microsoft.Azure.Commands.KeyVault.SetAzureKeyVau     ltAccessPolicy
    

任何帮助将不胜感激。提前致谢。

这是我要执行的脚本:

## select subcription

$subcription='Visual Studio Enterprise – MPN'

Select-AzSubscription $subcription


## create a new resource group

$resourcegroupname=”gho-rg-dev”
$location="eastus"

$rg=New-AzResourceGroup `
        -Name $resourcegroupname `
        -Location $location


## create the storage account


$storageAccountName = "ghostoragelab"
$skuName = "Standard_LRS"

$storageAccount = New-AzStorageAccount -ResourceGroupName $resourcegroupname `
                     -Name $storageAccountName `
                     -Location $location `
                     -SkuName $skuName

$storageaccountkey=(Get-AzStorageAccountkey -ResourceGroupName $resourcegroupname -Name $storageAccount.StorageAccountName).Value[0]


##create azure data factory

$datafactoryname='lab-factory-dev'

$df= New-AzDataFactoryV2 `
        -ResourceGroupName $resourcegroupname -Name $datafactoryname -Location $location




## creating the azure key vault

$keyvaultname="labkeydev"

$keyvault=New-AzKeyVault -ResourceGroupName $resourcegroupname -Name $keyvaultname `
        -Location $location

# creating the secret key in keyvault

Set-AzKeyVaultSecret -VaultName $keyvaultname -Name "secret-access-key"`
 -SecretValue(ConvertTo-SecureString -String $storageaccountkey -AsPlainText -Force)

#Give access policy to the datafactory thorugh keyvault

*## this is where script is failing*

Set-AzKeyVaultAccessPolicy -VaultName $keyvaultname -ServicePrincipalName $df.DataFactoryId -PermissionsToSecrets Get

【问题讨论】:

  • 你能贴出你试过的代码吗?它可以提供更多帮助。
  • 请在此处提供完整的命令。
  • 添加了我试图通过powershell执行的脚本

标签: azure powershell azure-keyvault


【解决方案1】:

我想您想将MSI (Managed Service Identity) of the Data Factory 添加到您的密钥库的Access policies

您收到错误是因为您在此使用了-ServicePrincipalName $df.DataFactoryId 命令Set-AzKeyVaultAccessPolicy$df.DataFactoryId是数据工厂的resource id,你需要的是微星的Application ID(Client ID)

所以如果你想使用-ServicePrincipalName参数,你的命令应该是:

$appId = (Get-AzADServicePrincipal -ObjectId $df.Identity.PrincipalId).ApplicationId
Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ServicePrincipalName $appId -PermissionsToSecrets get

上述命令需要在 Azure AD 中获取服务主体的权限。如果你没有这个权限,你可以使用命令(我推荐你使用这个):

Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ObjectId $df.Identity.PrincipalId -PermissionsToSecrets get -BypassObjectIdValidation

如果您的数据工厂已经创建,您可以使用Get-AzDataFactoryV2 获取它,然后将其添加到访问策略中。

$datafactory = Get-AzDataFactoryV2 -ResourceGroupName <group name> -Name <factory name>
Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ObjectId $datafactory.Identity.PrincipalId -PermissionsToSecrets get -BypassObjectIdValidation

【讨论】:

  • 如果我想将用户添加到密钥库中的访问策略?
  • @Ghousethanedar 如果要添加用户,需要将用户在天蓝色广告中的objectid传递给-Objectid参数。
  • @Joy Wang 能否请您帮助我提供有用的命令语法
  • @Ghousethanedar 尝试:$Id = (Get-AzADUser -UserPrincipalName xxx@xxx.onmicrosoft.com).Id, Set-AzKeyVaultAccessPolicy -VaultName joykeyvault -ObjectId $Id -PermissionsToSecrets get -BypassObjectIdValidation
猜你喜欢
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2021-08-15
  • 2023-01-05
  • 2020-08-21
  • 2021-01-11
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多