用一句简短的话描述一下python包。
vault-anyconfig的Python项目详细描述
vaultanyconfig
使用加载和转储功能扩展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_user
是config_键
,而secret/mysql/customer
是secret_路径
。在保险库中的秘密路径上使用的密钥
将是db_用户
默认情况下,配置键
的最后一部分将用作保险库中的密钥。但是,可以添加唯一的密钥
在秘密路径上使用点分隔符。举例来说:
{"website":{},"vault_secrets":{"website.db_user":"secret/mysql/customer.user"}}
此示例从mysql/customer
secret获取名为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-creds
和vault-config
部分分离为
他们自己的文件并对其使用限制性权限,例如400
,因为访问Vault所需的机密必须存在于这些文件中。
用法
初始化
可以通过三种方式初始化vaultanyconfig(对于两种不同的模式):
- 从保险库配置文件(请参见文件和格式)
- 通过指定初始化hvac客户端时使用的参数
- 通过不提供任何参数(或带有空的
保险库配置
部分的配置文件),在这种情况下,它处于passthrough模式,其中机密是从保险库加载的而不是。
使用保险库进行身份验证
您可以使用auto_auth
提供一个文件,如"文件和格式"部分所述,也可以直接使用
暖通空调客户端。如果设置了passthrough模式,自动验证
将始终返回
是,但hvac客户端方法将失败,因此建议在可能的情况下使用auto-auth
。
加载/保存插入密钥的文件
只需根据需要调用load
,loads
,dump
或dumps
方法。调用与直接调用anyconfig方法相同。
更改日志
0.0.1-偏差(2019-04-05)
- pypi上的第一个版本。