12 个版本 (破坏性更新)

0.9.2 2023年6月15日
0.9.0 2022年1月15日
0.8.0 2020年11月7日
0.6.0 2020年4月4日
0.3.0 2019年12月29日

#189 in 身份验证

每月49次下载

MIT 许可证

99KB
2K SLoC

Rucredstash

Crates.io MIT licensed Rust

目录

介绍

Rucredstash 是 CredStash 的 Rust 版本

它结合使用 AWS 密钥管理服务 (KMS) 和 DynamoDB 来存储秘密。当您需要安全地存储和检索凭证(如数据库密码、API 密钥等)时,这是必需的。更详细的教程在这里。

此包通过 CLI 和库方式提供接口。CLI 被设计为原始 credstash 程序的替代品,因此它尝试具有与原始程序完全相同的接口。

使用方法

rucredstash 0.8.0
Sibi Prabakaran
A credential/secret storage system

USAGE:
    rucredstash [OPTIONS] [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -a, --arn <ARN>                  AWS IAM ARN for AssumeRole
    -m, --mfa_serial <MFA_SERIAL>    Optional MFA hardware device serial number or virtual device ARN
    -p, --profile <PROFILE>          Boto config profile to use when connecting to AWS
    -r, --region <REGION>            the AWS region in which to operate. If a region is not specified, credstash will
                                     use the value of the AWS_DEFAULT_REGION env variable, or if that is not set, the
                                     value in `~/.aws/config`. As a last resort, it will use us-east-1
    -t, --table <TABLE>              DynamoDB table to use for credential storage. If not specified, credstash will use
                                     the value of the CREDSTASH_DEFAULT_TABLE env variable, or if that is not set, the
                                     value `credential-store` will be used

SUBCOMMANDS:
    delete    Delete a credential from the store
    get       Get a credential from the store
    getall    Get all credentials from the store
    help      Prints this message or the help of the given subcommand(s)
    keys      List all keys in the store
    list      List credentials and their versions
    put       Put a credential into the store
    putall    Put credentials from json or file into the store
    setup     setup the credential store

安装

请参阅 Github 发布: https://github.com/psibi/rucredstash/releases

提供适用于三个主要平台的可执行文件:Linux、Windows 和 MacOS。

基础设施设置

要使 rucredstash 运作,您需要设置以下 AWS 基础设施

  • 创建客户管理的密钥 (CMK) 密钥
    • 服务 => KMS => 创建密钥 => 输入 "credstash" 作为密钥别名
  • 创建 DynamoDB 表
    • rucredstash 设置

使用示例

传递 AWS 凭据的不同方式

最简单的情况是导出适当的环境变量并使用它

$ export AWS_ACCESS_KEY_ID=xxxx
$ export AWS_SECRET_ACCESS_KEY=xxxx
$ rucredstash list
hello            -- version 0000000000000000001 --comment
hellehllobyegood -- version 0000000000000000001 --comment
hello1           -- version 0000000000000000001 --comment

请注意,默认情况下,rucredstash 使用 DefaultCredentialsProvider,因此您的凭据将基于此。但它甚至允许其他复杂的用例

$ export AWS_ACCESS_KEY_ID=xxxx
$ export AWS_SECRET_ACCESS_KEY=xxxx
$ rucredstash --arn arn:aws:iam::786946123934:role/admin --mfa_serial arn:aws:iam::786946123934:mfa/sibi --region us-west-2 list
Enter MFA Code: xxxxx
hello            -- version 0000000000000000001 --comment
hellehllobyegood -- version 0000000000000000001 --comment
hello1           -- version 0000000000000000001 --comment

请注意,MFA功能在原始credstash程序(Python程序)中不存在。您还可以使用aws-env等程序,并使用此工具。示例

$ aws-env rucredstash list
hello            -- version 0000000000000000001 --comment
hellehllobyegood -- version 0000000000000000001 --comment
hello1           -- version 0000000000000000001 --comment

其他使用示例

放置秘密值

$ rucredstash put hello world
hello has been stored

您还可以使用与凭证关联的加密上下文

$ rucredstash put nasdaq nifty500 market=world
nasdaq has been stored

甚至多个加密上下文

$ rucredstash put vanguard vanguardsecret market=world indexfunds=us
vanguard has been stored

获取秘密值

$ rucredstash get hello1
world1

现在让我们也尝试使用加密上下文进行检索

$ rucredstash get nasdaq market=world
nifty500

以及使用多个加密上下文

$ rucredstash get vanguard market=world indexfunds=us
vanguardsecret

获取所有秘密值

$ rucredstash getall
{
  "hellehllobyegood": "dam",
  "hello": "world",
  "hello1": "world1"
}

您也可以以其他格式获取它

$ rucredstash getall --format yaml
hello: world
hellehllobyegood: dam
hello1: world1

列出带有其他元数据的凭证

$ rucredstash list
hello            -- version 0000000000000000001 --comment
hellehllobyegood -- version 0000000000000000001 --comment
hello1           -- version 0000000000000000001 --comment

获取所有密钥

$ rucredstash keys
hello
hellehllobyegood
hello1

删除特定密钥

$ rucredstash delete hello
Deleting hello --version 0000000000000000001

放置多个秘密(putall 子命令)

您可以使用特殊符号@从文件传递输入,以表示数据是从文件中提供的

$ bat secrets.json
───────┬────────────────────────────────────────
       │ File: secrets.json
───────┼────────────────────────────────────────
   1   │ {
   2"hello": "world",
   3"hi": "bye"
   4   │ }
───────┴────────────────────────────────────────
$ rucredstash putall @secrets.json
hello has been stored
hi has been stored

您还可以使用特殊运算符-通过stdin传递数据

$ rucredstash putall -
{ "hello": "world" }
hello has been stored

请注意,传递的数据应为json格式。您按下Enter键以表示您已完成数据传递。

此外,您还可以直接传递数据给它

$ rucredstash putall '{"hello":"world","hi":"bye"}'
hello has been stored
hi has been stored

依赖项

~27–41MB
~722K SLoC