hashicorp vault的cli工具
vault-cli的Python项目详细描述
hashicorp vault的cli工具
这些工具允许与保险库API进行简单的交互,允许 使用yaml配置文件在单独步骤中完成配置。
如果您与来自 自动部署工具
安装
该工具已打包,但该包在pypi上尚不可用。
pip install vault-cli
vault cli仅适用于python 3.6及更高版本。
用法
Usage: vault [OPTIONS] COMMAND [ARGS]...
Interact with a Vault. See subcommands for details.
All arguments can be passed by environment variables:
VAULT_CLI_UPPERCASE_NAME (including VAULT_CLI_PASSWORD and
VAULT_CLI_TOKEN).
Options:
-U, --url TEXT URL of the vault instance
--verify / --no-verify Verify HTTPS certificate
--ca-bundle PATH Location of the bundle containing the server
certificate to check against.
--login-cert PATH Path to a public client certificate to use
for connecting to vault.
--login-cert-key PATH Path to a private client certificate to use
for connecting to vault.
-T, --token-file PATH File which contains the token to connect to
Vault. Configuration file can also contain a
"token" key.
-u, --username TEXT Username used for userpass authentication
-w, --password-file PATH Can read from stdin if "-" is used as
parameter. Configuration file can also
contain a "password" key.
-b, --base-path TEXT Base path for requests
-s, --safe-write / --unsafe-write
When activated, you can't overwrite a secret
without passing "--force" (in commands
"set", "mv", etc)
--render / --no-render Render templated values
-v, --verbose Use multiple times to increase verbosity
--config-file PATH Config file to use. Use 'no' to disable
config file. Default value: first of
./vault.yml, ~/.vault.yml, /etc/vault.yml
-V, --version
-h, --help Show this message and exit.
Commands:
delete Delete a single secret.
delete-all Delete multiple secrets.
dump-config Display settings in the format of a config file.
env Launch a command, loading secrets in environment.
get Return a single secret value.
get-all Return multiple secrets.
list List all the secrets at the given path.
lookup-token Return information regarding the current token
mv Recursively move secrets from source to destination path.
set Set a single secret to the given value(s).
template Render the given template and insert secrets in it.
身份验证
有三种方法可以针对保险库进行身份验证:
- 用户名和密码文件:提供用户名和文件以读取
密码来自。stdin的文件可能是
-
。 - 客户端证书:提供证书文件的路径。
- 令牌:如果您已经有一个有效的令牌,请跳过身份验证步骤。
展示
连接到https://vault.mydomain:8200/project并列出秘密
$ vault --url=https://vault.mydomain:8200 --certificate=/etc/vault/certificate.key --base-path=project/ list ['my_secret']
在下面的例子中,我们将考虑我们有一个完整的配置文件。
以纯文本阅读机密(默认值)
$ vault get my_secret qwerty
阅读yaml格式的秘密
$ vault get --yaml my_secret --- qwerty...
写一个秘密
$ vault set my_other_secret supersecret Done
###在基本路径之外读/写密钥
$exportVAULT_CLI_BASE_PATH=myapp/ $ vault set /global_secret sharedsecret Done$ vault get /global_secret sharedsecret$ vault get global_secret Error: Secret not found$unset VAULT_CLI_BASE_PATH
通过stdin写一个秘密。
当密钥有多行或以“-”开头时,可以使用此选项
$ vault set third_secret --stdin ----BEGIN SECRET KEY----...<hit ctrl+d to end stdin>Donevault get third_secret----BEGIN SECRET KEY----...
同样,管道允许您将文件内容写入保险库:
$ cat my_certificate.key | vault set third_secret --stdin Done
使用不可见的输入提示编写机密
这将避免您的秘密在shell历史记录中以纯文本显示。
$ vault set mykey --prompt Please enter value for `mykey`:Done
以下任何“-”都不会被视为标志,即使它以“-”
开头$ vault set -- -secret-name -oh-so-secret Done$ vault get -- -secret-name -oh-so-secret
编写一个秘密的复杂对象
$ vault set --yaml blob_secret "{code: supercode}"Done
写一份秘密清单
$ vault set list_secret secret1 secret2 secret3 Done#(For complex types, yaml format is selected)$ vault get list_secret ---- secret1- secret2- secret3
保护自己不被错误地改写秘密
vault set a bDone$ vault --safe-write set a c Error: Secret already exists at a. Use -f to force overwriting.$ vault --safe-write set -f a c Done
(safe-write
可以在配置文件中设置,请参见下面的详细信息)
以单个命令(yaml格式)从保险库获取所有值
$ vault get-all ----secret-name: -oh-so-secretblob_secret: code: supercodelist_secret:- secret1- secret2- secret3my_other_secret: supersecretmy_secret: qwertythird_secret: '----BEGIN SECRET KEY---- ...'
基于路径获取嵌套秘密
$ vault set test/my_folder_secret yaysecret Done$ vault get-all test/my_folder_secret ---test: my_folder_secret: yaysecret
以单个命令(yaml格式)从多个文件夹递归获取所有值
$ vault get-all test my_secret ---my_secret: qwertytest: my_folder_secret: yaysecret
删除机密
$ vault delete my_other_secret Done
移动机密和文件夹
$ vault mv my_secret test/my_secret Move 'my_secret' to 'test/my_secret'$ vault mv blob_secret test/blob_secret Move 'blob_secret' to 'test/blob_secret'$ vault get-all ----secret-name: -oh-so-secretlist_secret:- secret1- secret2- secret3test: blob_secret: code: supercode my_folder_secret: yaysecret my_secret: qwertythird_secret: '----BEGIN SECRET KEY---- ...'
通过环境变量启动进程加载机密
$ vault env --path blob_secret -- env ...BLOB_SECRET={"code": "supercode"}...$ vault set foo/bar/service/instance/dsn value $ vault env --path blob_secret=blob --path foo/bar/service/instance=my -- env ...BLOB={"code": "supercode"}MY_DSN=value...
使用来自保险库的值呈现模板文件
$ vault template mytemplate.j2 > /etc/conf # mytemplate.j2: Hello={{ vault("my_secret") }}# /etc/conf: Hello=querty
(使用-
表示stdin,使用-o <file or ->
指定要写入的文件或stdout)
(重新)根据当前设置创建配置文件
$ vault --url https://something --token mytoken dump-config > .vault.yaml
删除blob secret下的所有内容
$ vault delete-all blob-secret
删除所有内容,无需确认
$ vault delete-all --force
创建模板值
$ vault set password foo $ vault set dsn '!template!proto://username:{{ vault("password") }}@host/'$ vault get dsn proto://username:foo@host/$ vault --no-render get --text dsn !template!proto://username:{{ vault("password") }}@host/
vault
函数不递归地呈现变量。
获取当前令牌的信息
$ vault lookup-token
在测试中使用测试客户端
$ pip install vault-cli[testing]
# conftest.py (for pytest)fromvault_cli.testingimportvault__all__=["vault"]
# test_something.pydeftest_bla(vault):vault.db={"a/b":"c"}assertvault.get_secret("a/b")=="c"
配置
在以下位置找到的第一个文件将被读取、分析和使用:
/etc/vault.yml
~/.vault.yml
./vault.yml
作为命令行标志传递的任何选项都将用于
文档中的选项(使用-
或_
)。
配置的预期格式是一个映射,其中包含选项名和 它们的对应值:
---username:my_usernamepassword-file:~/.vault-password# ortoken-file:~/.vault-tokenurl:https://vault.mydomain:8200verify:nobase-path:project/...
请确保相应地设置了机密文件的权限。
对于简单的情况,可以在 文件:
---username:my_usernamepassword:secret-password# ortoken:secret-tokenurl:https://vault.mydomain:8200verify:nobase-path:project/...
如果这样做,请确保配置文件本身的权限是 不太宽
只要注意--verify / --no-verify
标志变成verify: yes
或
verify: no
所有参数都可以从环境变量中定义:
$VAULT_CLI_URL=https://myvault.com vault list
名称始终是等效命令的大写下划线名称 行选项。令牌和密码也可以作为环境变量传递莱斯AS 保险库标志和保险库密码。
故障排除
SyntaxError: invalid syntax
您很可能正在使用Python3.5或更低版本(包括Python2)
状态
该工具当前处于测试模式。缺少文件和其他东西。 小心点。
贡献
我们欢迎任何帮助:)有关详细信息,请参见CONTRIBUTING.md。
许可证
版权所有2018-2019 PeopleDoc
根据apache许可证2.0版(以下简称“许可证”)授权; 除非符合许可证,否则您不能使用此文件。 您可以在
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。