首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VaultSharp:尝试列出机密时的“拒绝权限”

VaultSharp:尝试列出机密时的“拒绝权限”
EN

Stack Overflow用户
提问于 2021-03-05 18:03:53
回答 1查看 1.2K关注 0票数 1

我一直试图通过API简单地列出我的KeyValue库中的秘密,并且我正在使用AppRole auth获得“拒绝许可”。到目前为止我的情况是这样的。

Caller

代码语言:javascript
复制
private async Task RetrieveSecrets()
{
    // Fails here, though it's the actual service method that fails (see below)
    List<string> secrets = (await _vaultService.GetSecretsList()).ToList();
    AvailableSecrets.Clear();
    foreach (string secret in secrets)
    {
        AvailableSecrets.Add(secret);
    }
}

VaultService

代码语言:javascript
复制
internal class VaultService : IVaultService
{
    private IVaultClient _client;

    public VaultService(IOptions<ApplicationSettings> applicationSettings)
    {
        CreateClient(applicationSettings.Value);
    }

    public async Task<IEnumerable<string>> GetSecretsList()
    {
        Secret<ListInfo> secret = await _client.V1.Secrets.KeyValue.V2.ReadSecretPathsAsync("", "secret");
        ListInfo secrets = secret.Data;
        return secrets.Keys;
    }

    private void CreateClient(ApplicationSettings settings, bool forceRecreate = false)
    {
        if (_client == null || forceRecreate)
        {
            // Role authorization
            IAuthMethodInfo authMethod = new AppRoleAuthMethodInfo(settings.VaultRoleId, settings.VaultSecretId);
            VaultClientSettings vaultClientsettings = new VaultClientSettings(settings.VaultUrl, authMethod);

            _client = new VaultClient(vaultClientsettings);
        }
    }
}

我已经通过vault kv list secret/命令验证了密钥的存在。输出:

代码语言:javascript
复制
λ vault kv list secret/  
Keys  
----  
creds

我还仔细检查了政策:

代码语言:javascript
复制
λ vault policy read my-policy
# Dev servers have version 2 of KV secrets engine mounted by default, so will
# need these paths to grant permissions:
path "secret/data/*" {
  capabilities = ["create", "update","list"]
}

path "secret/data/foo" {
  capabilities = ["read","list"]
}

最后,我使用Postman和下面的http调用验证了RoleId和SecretId (以及正确的传入):

角色:http://127.0.0.1:8200/v1/auth/approle/role/my-role/role-id

秘密:http://127.0.0.1:8200/v1/auth/approle/role/my-role/secret-id

我已经在这里到处找过了,我甚至尝试用这个在上玩参数:

代码语言:javascript
复制
_client.V1.Secrets.KeyValue.V2ReadSecretPathsAsync("", "secret") // no dice
_client.V1.Secrets.KeyValue.V2ReadSecretPathsAsync("data", "secret") // also no dice

知道我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-08 22:45:49

经过大量的修改后,我终于发现了这个问题:一般情况下的权限问题。

密钥原来在策略文件中,最初是这样的:

代码语言:javascript
复制
λ vault policy read my-policy
# Dev servers have version 2 of KV secrets engine mounted by default, so will
# need these paths to grant permissions:
path "secret/data/*" {
  capabilities = ["create", "update","list"]
}

path "secret/data/foo" {
  capabilities = ["read","list"]
}

首先,第二条路基本上是垃圾。它之所以存在是因为它在我学习教程的时候被复制了。然而,更重要的是:第一条路径不允许我列出元数据。

最后,我将其修改为:

代码语言:javascript
复制
λ vault policy read my-policy
# Dev servers have version 2 of KV secrets engine mounted by default, so will
# need these paths to grant permissions:
path "secret/data/*" {
  capabilities = ["create", "update","read","list"]
}

path "secret/*" {
  capabilities = ["create","update","read","list"]
}

事实上,它们现在也都有read/create/update/list,这并不是真正重要的部分--我这样做是为了确保我的POC能够做它需要做的一切。这里最重要的部分是需要有listsecret/*的权限。

一旦我更新了政策,AppRole auth就完美地工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66497459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档