用一句简短的话描述一下python包。

vault-anyconfig的Python项目详细描述


vaultanyconfig

azure devops buildsazure devops testsazure devops coverage

pypi-versionpypi-licensepypi-pypi-python-versionspypi-formatpypi-status " rel="nofollow">pyUp-更新

使用加载和转储功能扩展hvac hashicorp vault客户端 任何配置。这允许自动混合来自保险库的机密,允许您存储配置 填充了所有详细信息的文件保存为机密,然后访问hashicorp保险库将机密加载到内存字典中。

支持的秘密引擎

目前,保险库anyconfig仅支持键值存储的版本1和版本2。

kv2限制

  • 仅限Vault anyconfig将读取机密的最新版本,以保持配置的简单性。关于文件
  • 由于暖通空调客户端的限制,您必须在kv2密钥的安装点之后添加数据,例如机密/data/example机密

文件和格式

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

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

保险库配置

这将配置到保管库的连接,并且必须至少包含一个成员(通常是url参数)。如果本节未提供或 如果保留为空,则将不配置保险库实例,而只使用anyconfig功能。

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

示例

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

保险库身份验证

这提供了用于auto-auth方法的身份验证,并且必须命名为vault-creds。它应该包含名为auth_method的成员 它应该与hvac客户机中的一个auth方法对应(不带"auth/code>"前缀),例如approle。其余成员 应与指定身份验证方法的参数匹配。

示例

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

主要配置

主配置应该由您需要的配置部分组成,而不包括包含的机密(除非需要passthrough模式) 以及一个名为"保险库机密"的部分。在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"}}
保险库机密用法

a保险库机密条目必须具有配置键机密路径。配置键是指向配置项的点分隔路径,应该 被添加或更新。secret_路径是密钥位于保险库中的路径。例如:

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

vault_secrets中,website.db_userconfig_键,而secret/mysql/customersecret_路径。在保险库中的秘密路径上使用的密钥 将是db_用户

默认情况下,配置键的最后一部分将用作保险库中的密钥。但是,可以添加唯一的密钥 在秘密路径上使用点分隔符。举例来说:

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

此示例从mysql/customersecret获取名为user的值,并将其映射到网站部分的db_user键。 这样就可以在不同的配置中使用相同的密钥,而不必强制所有的配置键名称都是相同的。例如, 如果cron作业还需要来自mysql/customer.user的user值,但它的配置名为user,那么您可能会得到一个配置 文件如下:

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

键值存储v2限制:必须在装入点之后包含数据,例如,应该 secret/data/mysql/customer使用v2时。

保险库文件的使用

注意如果可能,最好将机密作为字符串处理,并仅在内存中使用它们。仅在为应用程序配置时使用此模式 需要将机密作为文件提供(TLS密钥文件的常见要求)。

注意保险库机密不同的是,保险库文件部分保留在保险库anyconfig返回的字典中,以便保留映射 将最终配置写入文件时(例如在cli中)。

警告!存储库文件的功能要求它作为应用程序的用户运行,并且必须具有适当的权限 要存储文件的文件和位置。

警告!保险库文件会很高兴地覆盖您的文件,并且不会备份。

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

有两种主要方法可以使用vault_文件部分。首先是直接指定一个文件位置,并以密钥作为路径。 例如:

{"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使用file作为保险库机密中的密钥。但是,secret_path可以使用vault_secrets中使用的相同点符号来指定密钥,例如secret/acme/secret key.key

警告!如果将路径与键分开,则秘密路径字符串只能使用点()。额外的点会导致保险库的任何配置抛出 错误.

键值存储v2限制:必须在装入点后包含数据,例如,机密/网站/代理应该是 使用v2时的机密/数据/网站/代理

配置文件指南

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

用法

初始化

可以通过三种方式初始化vaultanyconfig(对于两种不同的模式):

  1. 从保险库配置文件(请参见文件和格式)
  2. 通过指定初始化hvac客户端时使用的参数
  3. 通过不提供任何参数(或带有空的保险库配置部分的配置文件),在这种情况下,它处于passthrough模式,其中机密是从保险库加载的而不是

使用保险库进行身份验证

您可以使用auto_auth提供一个文件,如"文件和格式"部分所述,也可以直接使用 暖通空调客户端。如果设置了passthrough模式,自动验证将始终返回 是,但hvac客户端方法将失败,因此建议在可能的情况下使用auto-auth

加载/保存插入密钥的文件

只需根据需要调用loadloadsdumpdumps方法。调用与直接调用anyconfig方法相同。

更改日志

0.0.1-偏差(2019-04-05)

  • pypi上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误