跳转到主要内容

用一句话描述你的Python包。

项目描述

VaultAnyconfig

Azure DevOps builds Azure DevOps tests Azure DevOps coverage

PyPI - Version PyPI - License PyPI - Python Versions PyPI - Format PyPI - Status PyUp - Updates

扩展了HVAC Hashicorp Vault客户端,并从anyconfig中添加了加载和转储功能。这允许自动混合Vault中的机密,允许您存储一个包含所有详细信息(除了机密)的配置文件,然后访问Hashicorp Vault将机密加载到内存字典中。

支持的机密引擎

目前vault-anyconfig 支持1和2版本的键值存储。

kv2限制

  • vault-anyconfig 将读取机密的最新版本以保持配置文件的简单性
  • 由于HVAC客户端的限制,必须在kv2机密的mountpoint后添加data,例如secret/data/example-secret

文件和格式

有三个配置文件(也可以作为字符串提供),可以存储在一个、两个或三个文件中,只要它们正确编写即可。

本节中的示例将是JSON,但可以使用任何由anyconfig支持的文件格式。

Vault配置

这配置了与Vault的连接,必须包含至少一个成员(通常是url参数)。如果没有提供此部分或为空,则不会配置Vault实例,而是仅使用anyconfig功能。

该部分必须命名为 vault_config,可以包含初始化 HVAC 客户端 的任何有效参数。

示例

{
    "vault_config": {
        "url": "https://vault.acme.com:8200"
    }
}

Vault 认证

这为使用 auto_auth 方法提供了认证,必须命名为 vault_creds。它应该包含一个名为 auth_method 的成员,该成员应与 HVAC 客户端 中的某个认证方法相对应(不带 "auth_" 前缀),例如 approle。其余成员应与指定的认证方法的参数相匹配。

示例

{
    "vault_creds": {
        "role_id": "sample-role-id",
        "secret_id": "sample-secret-id",
        "auth_method": "approle"
    }
}

主要配置

主要配置应包含您所需的配置部分(不包括秘密,除非需要透明模式),以及一个名为 vault_secrets 的部分。在 vault_secrets 部分,键是用于插入到您的配置中的键的点分隔路径,值是 Vault 中秘密的路径。请参阅 vault_secrets 使用部分,了解指定秘密的不同方法。

此外,还包括一个 vault_files 部分,用于从 Vault 获取文件并将其写入磁盘。这不被推荐(应尽量减少秘密持久化的时间),但包括用于需要秘密文件路径的旧应用程序(例如 TLS 证书)。

原始配置示例

{
    "website": {
        "host": "http://acme.com",
        "site-name": "Great Products for Coyotes",
        "tls-key": "/etc/web/acme.com.key",
        "tls-cert": "/etc/web/acme.com.crt"
    },
    "vault_secrets": {
        "website.db_user": "secret/mysql/customer.user",
        "website.db_pwd": "secret/mysql/customer.password"
    },
    "vault_files": {
        "website.tls-key": "secret/website/proxy.key",
        "website.tls-cert": "secret/website/proxy.cert"
    }
}
结果字典示例
{
    "website": {
        "host": "http://acme.com",
        "site-name": "great products",
        "tls-key": "/var/acme/acme.com.key",
        "tls-cert": "/var/acme/acme.com.crt",
        "db_user": "customer",
        "db_pwd": "customer-password"
    },
    "vault_files": {
        "website.tls-key": "secret/website/proxy.key",
        "website.tls-cert": "secret/website/proxy.cert"
    }
}
vault_secrets 使用

vault_secrets 条目必须有一个 config key 和一个 secret pathconfig_key 是要添加或更新的配置项的点分隔路径。secret_path 是秘密在 Vault 中的路径。例如

{
    "website": {},
    "vault_secrets": {
       "website.db_user": "secret/mysql/customer"
    }    
}

vault_secrets 中,website.db_userconfig_key,而 secret/mysql/customersecret_path。在 Vault 的 secret_path 中使用的键将是 db_user

默认情况下,config key 的最后一个部分将被用作 Vault 中秘密的键。然而,您可以在 secret_path 上添加一个带有点分隔符的唯一键。以下是一个例子

{
    "website": {},
    "vault_secrets": {
        "website.db_user": "secret/mysql/customer.user"
    }     
}

此示例从 mysql/customer 秘密中获取名为 user 的值,并将其映射到 website 部分的 db_user 键。这允许在不同的配置中从相同的秘密中提取内容,而不必强制所有 config_key 名称都相同。例如,如果 cron 作业也需要从 mysql/customer.user 获取 user 值,但其配置将其命名为 user,那么您可能会得到一个看起来像这样的配置文件

{
    "website": {},
    "vault_secrets": {
        "mailer_cron.user": "secret/mysql/customer.user"
    }     
}

Key-Value Store V2 限制:您必须在挂载点后包含 data,例如,使用 V2 时,secret/mysql/customer 应为 secret/data/mysql/customer

vault_files 使用

注意 在可能的情况下,请优先将秘密作为字符串处理,并在内存中使用它们。只有当为需要将秘密作为文件提供的应用程序配置时才使用此模式(例如 TLS 密钥文件)。

注意vault_secrets 不同,vault_files 部分保留在 vault_anyconfig 返回的字典中,以便在将最终配置写入文件(例如 CLI)时保留映射。

警告! vault_files 功能假定它正在以应用程序用户身份运行,并且必须具有对文件和要存储文件的位置的适当权限。

警告! vault_files 将愉快地覆盖您的文件,并且不保留备份。

警告! 如果文件位置更改,它将不会删除!负责任地使用。

使用 vault_files 部分有两种主要方式。第一种是直接指定文件位置和秘密作为路径。例如

{
    "vault_files": {
        "/var/acme/acme.com.crt": "secret/website/proxy.key"
    }
}

第二种方法是引用配置中的键。这避免了在配置的多个部分中重复文件路径。

{
    "website": {
        "tls-key": "/etc/web/acme.com.key",
        "tls-cert": "/etc/web/acme.com.crt",
    },
    "vault_files": {
        "website.tls-key": "secret/website/proxy.key",
        "website.tls-cert": "secret/website/proxy.cert"
    }
}

默认情况下,secret_path在Vault密钥中使用file作为键。但是,secret_path可以使用与vault_secrets中相同的点表示法来指定键,例如:secret/acme/secret-key.key

警告! 当从路径中分隔键时,secret_path字符串只能使用点(.)。额外的点将导致vault_anyconfig抛出错误。

Key-Value Store V2限制:在使用V2时,必须在挂载点后包含data,例如,secret/website/proxy在使用V2时应为secret/data/website/proxy

配置文件指南

尽管可以将所有三个文件合并为一个文件,但建议将vault_credsvault_config部分分离到自己的文件中,并对其使用限制性权限,例如400,因为访问Vault所需的机密必须存在于这些文件中。

使用

初始化

VaultAnyconfig可以通过三种方式(针对两种不同模式)进行初始化:

  1. 从一个Vault配置文件中(请参阅文件和格式说明)
  2. 通过指定初始化HVAC客户端时使用的参数。
  3. 不提供任何参数(或一个包含空vault_config部分的配置文件),在这种情况下,它处于透传模式,其中不会从Vault加载机密。

与Vault进行身份验证

您可以通过提供文件作为说明中的说明来使用auto_auth,或者您可以直接使用HVAC客户端中的认证方法。如果设置了透传模式,auto_auth将始终返回true,但HVAC客户端方法将失败,因此建议尽可能使用auto_auth

插入密钥加载/保存文件

只需按需调用loadloadsdumpdumps方法。调用方式与直接调用anyconfig方法相同。

变更日志

0.0.1-dev (2019-04-05)

  • 首次发布在PyPI上。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

vault-anyconfig-0.3.1.tar.gz (26.6 kB 查看散列)

上传时间:

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面