Skip to main content

AWS 和 GCP 的密钥管理器

项目描述

PyPI 版本 fury.io PyPI 版本

谨慎地

AWS 和 GCP 的密钥管理器

$ discreetly set acme/github/api-token my-secret-api-key
$ discreetly get acme/github/api-token
my-secret-api-key
$ discreetly --profile prod list acme/
['acme/prod/postgres/passwd', 'acme/prod/github/api-token']

应用程序通常需要访问机密信息,例如数据库密码或 API 密钥。管理这些秘密的一个非常糟糕的方法是将它们烘焙到您的代码中,然后将它们检查到源代码控制中。将秘密存储在环境变量中会更好一些。如果您的应用程序在 AWS 或 GCP 上运行,这两个平台都提供了用于更好地管理机密的工具。

discreetly为跨 AWS 和 GCP 管理机密提供一致的 API。它鼓励您对秘密和加密密钥进行分区,以便您的 Web 应用程序只能访问其运行所需的秘密,而不是例如访问基础设施管理工具所需的基础设施秘密。

安装

discreetly不会为您设置任何基础设施。您至少需要拥有 i) 可用于通过 AWS 和/或 Google 进行身份验证的凭证,ii) 使用 KMS 加密和解密机密的权限,以及 iii) 读取/写入底层存储的权限。

要安装discreetly支持 AWS 和 GCP 的 cli:

$ pip install discreetly[cli]

要用作库,请安装discreetly指定您需要支持的后端,例如:

$ pip install discreetly[aws,gcp]

配置

discreetly可以使用 JSON 文件进行配置,例如:

{
  "acme": {
    "type": "aws"
  },
  "default": {
    "type": "gcp",
    "datastore_project": "acme-corp",
    "keyid": "projects/acme-corp-kms/locations/global/keyRings/discreetly/cryptoKeys/default"
  }
}

在上面的示例中,配置包含两个配置文件,“acme”和“default”。配置文件必须指定type“aws”或“gcp”。

因为配置文件可以指定 a keyid,所以您不仅可以为不同的云提供商命名配置文件,还可以为不同的 KMS 密钥命名配置文件,例如一个用于开发,另一个用于生产。

discreetly将在环境变量提供的位置搜索配置文件DISCREETLY_CONFIG_FILE,回退到discreetly.json当前目录中命名的文件。

常见问题 (FAQ)

  1. credstash/Chamber/Vault/等呢?

    discreetly实际上是受到 credstash 的启发。但是,credstash 仅支持 AWS,并且早于 Parameter Store。也就是说,有些用例可能首选 DynamoDB 后端(例如,大于 4096 个字符的参数)。

    Chamber 是绝佳的选择,尤其是在 Go 环境中或仅需要 AWS 支持的情况下。

    如果您有资源支持 Vault,它就很棒。

故障排除

大多数问题与您的云提供商的身份验证或权限有关。

使用discreetlycli,您还可以通过设置LOGLEVEL环境变量来更改日志记录级别,例如

$ LOGLEVEL=DEBUG discreetly get my/super/secret

AWS

如果您安装了 AWS CLI,请确认您可以使用它来访问 Parameter Store,例如:

$ aws ssm get-parameter /path/to/parameter --with-decryption

如果可行,那么问题很可能就在于此discreetly,您应该考虑打开一个问题。

但是,如果这不起作用,则可能是配置或身份验证问题。在引擎盖下,discreetly使用 Boto 3,因此请查阅他们关于设置身份验证凭据的文档。

GCP

不幸的是,gcloud不支持大部分 Datastore API,因此在本地环境中对任何问题进行健全性测试有点困难。

确认您已按照手动获取和提供服务帐户凭据中的步骤进行操作,尤其是:

  1. 创建服务帐号
  2. 在本地保存服务帐号的 JSON 文件
  3. 在环境变量中设置 JSON 文件的路径,GOOGLE_APPLICATION_CREDENTIALS

图书馆使用

$ pip install discreetly[aws,gcp]
import discreetly

cfg = {
    "default": {
        "type": "gcp",
        "datastore_project": "acme-corp",
        "keyid": "projects/acme-corp-kms/locations/global/keyRings/discreetly/cryptoKeys/default"
    },
    "acme-aws": {
        "type": "aws",
        "keyid: "alias/discreetly_key",
    }
}

d = discreetly.Session.create(cfg) # uses the 'default' profile
d.set('my-service/my-key', 'my_value')
d.get('my-service/my_key')

acme = discreetly.session.create(config=cfg, profile='acme-aws') # uses the 'acme-aws' profile
acme.set('acme/dev/postgres/password', 'open-sesame')
acme.get('acme/dev/postgres/password')

acme.set('acme/prod/postgres/password', 'super-secret', keyid='alias/prod_key')
acme.get('acme/prod/postgres/password') # no need to specify the keyid for get

发展

discreetly用 Python 编写,支持 Python 2.7 和 3.6+

克隆 repo 后,运行pip install -r requirements.txt安装所需的开发依赖项(例如 pytest、flake8 等)

您可以 runpytest在本地运行单元测试,也tox可以在 Python 2.7 和 3.x 下运行所有​​测试。

注意从版本0.2.0开始,discreetly只支持 Python 3.6+

发布

  • CHANGELOG.md在新的发布分支中查看和更新

    • 以下将显示自最后一个以“v”开头的标签以来的提交:

      $ git log $(git describe --tags --match "v*" --abbrev=0)..HEAD`
      
    • 替换[Unreleased]为新的semver和发布日期,例如[0.1.2] - 2019-12-13

    • [Unreleased]在刚刚创建的新版本之上添加一个新的占位符

  • 创建一个新的 PR

    • 下面列出了自最后一个标签以来的所有提交,这对于包含在 PR 描述中可能很有用:

      git log --pretty=format:"* %h %s" $(git describe --tags --abbrev=0 @^)..@

  • 一旦 PR 合并到 master 并通过所有状态检查,创建并推送一个新的签名、注释标签,例如:

    $ LAST_VERSION=$(git describe --tags --match "v*" --abbrev=0)
    $ VERSION=v0.1.1
    $ awk "/^## \[${VERSION}/{flag=1;}/## \[${LAST_VERSION}/{flag=0} flag" CHANGELOG.md | git tag -s -a ${VERSION} --cleanup=whitespace -F -
    $ git push --follow-tags
    

    上面的awk命令获取 CHANGELOG 的内容,$VERSION以作为带注释的 git 标签的消息。它对 CHANGELOG 格式的假设相当脆弱。所以你可能只运行 awk 命令:

    awk "/^## \[${VERSION}/{flag=1;}/## \[${LAST_VERSION}/{flag=0} flag" CHANGELOG.md

    作为创建和推送标签之前的健全性检查。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

discreetly-0.2.0.tar.gz (32.6 kB 查看哈希

已上传 source

内置分布

discreetly-0.2.0-py2.py3-none-any.whl (19.9 kB 查看哈希

已上传 py2 py3