【问题标题】:python hvac library - how to read secret from vaultpython hvac 库 - 如何从保险库中读取秘密
【发布时间】:2020-11-09 11:16:51
【问题描述】:

我正在尝试使用 hvac lib 从保险库中读取一个秘密。 我使用令牌成功验证。 我的代码:

import hvac
import os

f = open('/var/run/secrets/kubernetes.io/serviceaccount/token')
jwt = f.read()
client = hvac.Client(url='https://vault.domain.com', verify='/etc/ssl/certs/ca-certificates.crt')
client.auth_kubernetes("namespace1", jwt)
print(client.is_authenticated())

效果不错:

True

但如果我添加阅读秘密的部分:

response = client.kv.v1.read_secret(path='path/admin_pass')

我得到 403 禁止

    raise exceptions.Forbidden(message, errors=errors, method=method, url=url)
hvac.exceptions.Forbidden: 1 error occurred:
    * permission denied

, on get https://vault.domain.com/v1/secret/path/admin_pass

我想知道为什么,因为这条路径被赋予了权限

path "path/admin_pass" {
  capabilities = ["read","list"]
}

hvac 使用的 url 与 vault 的 webUI 中使用的 url 有点不同,这有点奇怪:

网页界面:

https://vault.domain.com/ui/vault/path/show/admin_pass

Python 暖通空调:

https://vault.domain.com/v1/secret/path/admin_pass

有什么想法吗?

【问题讨论】:

    标签: python-3.x hashicorp-vault


    【解决方案1】:

    您的 acl 需要包含秘密引擎路径:secret/,假设您的密钥/值秘密引擎安装到 secret(这是默认值)

    除了秘密挂载 - 当涉及到 acl 时,/data 必须添加到实际路径之前。

    通常您还希望允许访问secret/metadata/... 这允许列出路径

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

    【讨论】:

    • 您好,我刚刚尝试使用此代码,但仍然出现错误。知道如何解决这个问题吗?导入 hvac 客户端 = hvac.Client(url='vault.abc.com:1100/') 响应 = client.secrets.kv.v2.read_secret_version(path='/secrets/secret/show/ab/ss/dd') Error- raise_for_error 引发异常。Forbidden(message, errors=errors, method=method, url=url) hvac.exceptions。禁止:发生 1 个错误:* 权限被拒绝
    猜你喜欢
    • 2018-04-28
    • 2020-06-27
    • 2022-12-04
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多