Azure KeyVault:SPN KeyVault访问被拒绝

时间:2018-08-14 15:09:43

标签: azure azure-devops azure-keyvault

我正在VSTS中使用以下Azure Powershell命令。

static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime,
                                      CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void *userInfo)
{
    static dispatch_queue_t sDisplayQueue;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sDisplayQueue = dispatch_queue_create("com.company.app.displayLink", NULL);
    });

    dispatch_sync(sDisplayQueue, ^{
        <stuff>
    });
    return kCVReturnSuccess;
}

我在VSTS中运行时遇到## [错误]访问被拒绝的错误,但是从整体上讲它可以正常工作。

我已经在KV的访问策略中添加了SPN,并且还具有对秘密的GET和SET权限。

需要帮助进行故障排除。

1 个答案:

答案 0 :(得分:2)

要将VSTS链接到您,需要授予服务主体(该主体在VSTS中形成服务端点)访问密钥库;你已经知道了

可能令人困惑的是,您可以根据您的用例分配应用程序和服务主体以访问密钥库。因此,必须确保将正确的对象分配给访问策略。

确保分配正确对象的最佳方法是通过Azure Powershell进行操作。

运行已登录的Azure Powershell会话:

$spObjectId = Get-AzureRmAdServicePrincipal -SearchString <ServicePrincipalName> | Foreach-Object {$_.Id}

Set-AzureRmKeyVaultAccessPolicy -VaultName <VaultName> -ObjectId $spObjectId -PermissionsToSecrets Get,Set

如果您想查看访问策略的更多详细信息(对象ID,权限等),还可以通过Powershell获得这些信息:

Get-AzureRmKeyVault -VaultName <VaultName> | Foreach-Object {$_.AccessPolicies}