以服务原则运行时,Pulumi 无法访问刚刚创建的密钥库

问题描述

我使用 Pulumi 创建了一个 Azure keyvault:

 var currentConfig = Output.Create(GetClientConfig.InvokeAsync());
 var keyvault = new keyvault(vaultname,new keyvaultArgs
{
  Name = vaultname,Location = _resourceGroup.Location,ResourceGroupName = _resourceGroup.Name,TenantId = currentConfig.Apply(q => q.TenantId),SkuName = "standard",Accesspolicies =
  {
    new Pulumi.Azure.keyvault.Inputs.keyvaultAccesspolicyArgs
    {
      TenantId=currentConfig.Apply(q=>q.TenantId),ObjectId=currentConfig.Apply(q=>q.ObjectId),KeyPermissions={"get","create","list"},SecretPermissions={"set","get","delete","purge","recover","list"}
    },new Pulumi.Azure.keyvault.Inputs.keyvaultAccesspolicyArgs    
  }
});

如您所见,我不仅创建了 keyvault,而且还添加了当前的 ObjectId 作为访问策略。

在那之后,我直接尝试向 keyvault 添加一个条目:

new Secret("secret",new SecretArgs
{
  Name = "secret",Value = "value",keyvaultId = keyvault.Id
});

当使用用户登录 (az login) 时,这在本地工作正常,但是当使用服务原则 (DevOps) 时,Vault-Creation 仍然有效,但由于权限问题添加机密失败:

azure:keyvault:Secret connectionstrings-blobstorageaccountkey 创建错误:检查现有秘密的存在 “连接字符串-blobstorageaccountkey”(密钥保管库 "https://(vaultname).vault.azure.net/"): keyvault.BaseClient#GetSecret:响应请求失败: StatusCode=403 -- 原始错误:autorest/azure:服务返回了一个 错误。 Status=403 Code="Forbidden" Message="用户、组或 应用 'appid=;oid=(objectId);iss=https://sts.windows.net/***/' 没有秘密获得密钥保管库的许可 ';location=西欧'。

我在 Pulumi.Azure 使用“经典”(非下一代)变体

解决方法

此问题的原因是我在本地使用我的个人 azure 帐户 pulumi up。之后将 pulumi up 作为服务连接运行时,由于凭据不同,无法访问。

为服务使用不同的堆栈(和不同的资源)时,一切正常。

因此,如果测试 pulumi 配置,如果需要权限(它们几乎总是如此),则在本地测试时应始终使用不同的堆栈。

我把这个问题留在这里是因为我怀疑会有更多的人掉进同一个坑里。