问题描述
我使用 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 作为访问策略。
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 配置,如果需要权限(它们几乎总是如此),则在本地测试时应始终使用不同的堆栈。
我把这个问题留在这里是因为我怀疑会有更多的人掉进同一个坑里。