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"

配置

在以下位置找到的第一个文件将被读取、分析和使用:

  1. /etc/vault.yml
  2. ~/.vault.yml
  3. ./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: yesverify: 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

除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。

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

推荐PyPI第三方库


热门话题
如何加载。java文件到编译器?   java写入文件和I/O   java日历返回错误的当前日期安卓   if语句if变量等于1(java)   java很难让Joda有时间使用我的bukkit插件   json如何创建基于java的应用程序,该应用程序将从网站获取输入   java如何在多页中打印大型JPanel   java my spinner在添加从firebase数据库中选择的多个值时被覆盖   java用Play框架覆盖HTTP方法   试图获取所有用户时,java错误请求400。Dto和表格   java支持bean加载图像后javascript自动调用JS函数   java在MTOM的@StreamingAttachment(Metro)中,Parsely的意思是什么   具有可抢占线程队列的多线程java执行器   Java Opencv connectedComponentsWithStats   java如何向数组中添加2D数组的数目   eclipse为什么我的Java Zork克隆不能正确循环?   java在哪里放置定制的第二个web。xml   java如何更改最近应用列表中显示的快照?   java Browser#getText()返回空字符串