跳转到主要内容

用于在Django项目中从Hashicorp Vault获取密钥和凭证的辅助功能

项目描述

build license kit format

这是一个辅助库,旨在简化从Django项目中检索Hasicorp Vault密钥的过程。

安装

使用pip安装django-vault-helpers

$ pip install django-vault-helpers

将新包添加到您的已安装应用中。

INSTALLED_APPS = [
    ...
    'vaulthelpers',
    ...
]

认证到Vault

使用环境变量配置连接设置以认证到Vault。

环境变量

描述

VAULT_URL

必需。Vault API的URL。例如,https://vault:8200/

VAULT_CACERT

可选。Vault CA证书的文件路径。

VAULT_SKIP_VERIFY

可选。设置为禁用Vault SSL证书的验证。

VAULT_DEBUG

可选。启用Vault调试日志。

除了上述设置外,您必须提供以下认证方法之一的环境变量。

环境变量

描述

VAULT_TOKEN

用于Vault Token认证的令牌

VAULT_APPID, VAULT_USERID

App-ID认证

VAULT_ROLEID, VAULT_SECRETID

App-Role认证

VAULT_SSLCERT, VAULT_SSLKEY

SSL客户端证书认证

数据库连接密钥

要使用 Vault 加载数据库连接配置和凭证,请按照以下说明配置 Vault 数据库秘密后端:数据库秘密后端文档。例如:

$ vault mount database
Successfully mounted 'database' at 'database'!
$ CONNECTION_NAME='myapplication'
$ CONNECTION_URL='postgresql://vaultuser:FOO@mydb:5432/myapplication'
$ PARENT_ROLE_NAME='myapplication'
$ vault write "database/config/$CONNECTION_NAME" \
        plugin_name="postgresql-database-plugin" \
        allowed_roles="$CONNECTION_NAME" \
        connection_url="$CONNECTION_URL"
$ vault write "database/roles/$CONNECTION_NAME" \
        db_name="$CONNECTION_NAME" \
        creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN ENCRYPTED PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' IN ROLE \"${PARENT_ROLE_NAME}\" INHERIT NOCREATEROLE NOCREATEDB NOSUPERUSER NOREPLICATION;" \
        default_ttl="1h" \
        max_ttl="24h"

接下来,通过以下环境变量添加设置。

环境变量

描述

VAULT_DATABASE_PATH

Vault 路径,用于获取数据库凭证。例如,database/creds/myapplication

DATABASE_URL

数据库连接字符串(不包含用户名和密码)。例如,postgres://mydb:5432/myapplication

DATABASE_OWNERROLE

对于 PostgreSQL,使用 SET ROLE 连接后假设的角色名称。

最后,编辑项目的 settings.py 文件,使用 Vault 加载数据库配置。

import vaulthelpers

# Load database credentials from Vault
DATABASES = {
    'default': vaulthelpers.database.get_config(),
}

要向数据库配置添加更多密钥,请在 get_config 调用中传递一个字典。例如:

import vaulthelpers

# Load database credentials from Vault
DATABASES = {
    'default': vaulthelpers.database.get_config({
        'ATOMIC_REQUESTS': True,
        'CONN_MAX_AGE': 3600,
    }),
}

AWS 凭证

要使用 Vault 加载 AWS 的 IAM 或 STS 凭证,请按照以下说明配置 Vault AWS 秘密后端:AWS 秘密后端文档

$ vault mount aws
Successfully mounted 'aws' at 'aws'!
$ vault write aws/config/root \
        access_key=AKIAJWVN5Z4FOFT7NLNA \
        secret_key=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 \
        region=us-east-1
$ vault write aws/roles/myapplication \
        arn=arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/MyApplicationRoleName

接下来,通过以下环境变量添加设置。

环境变量

描述

VAULT_AWS_PATH

Vault 路径,用于获取 AWS 凭证。例如,aws/sts/myapplication

最后,配置 Django 项目以使用 Vault 加载 AWS 凭证。为此,编辑 settings.py 文件,包含以下行。

import vaulthelpers

# Load AWS credentials from Vault
vaulthelpers.aws.init_boto3_credentials()

这将覆盖 boto3botocore 中的凭证解析代码,使其从 Vault 而不是常规方式(如环境变量或 EC2 元数据服务)获取凭证。

直接 HVAC 客户端访问

要直接访问认证 hvac 客户端连接器,请从 vaulthelpers.common 模块中获取。

import vaulthelpers

vault_auth = vaulthelpers.common.get_vault_auth()
verify = vaulthelpers.common.VAULT_CACERT or vaulthelpers.common.VAULT_SSL_VERIFY
vcl = vault_auth.authenticated_client(vaulthelpers.common.VAULT_URL, verify=verify)
result = vcl.read('secret/data/apps/myaplication')
print(result)

变更日志

0.8.1

  • 修复了 DatabaseCredentialProvider.fetch_lease_ttl 中的错误,该错误有时会导致 Vault 在查找租约 TTL 时崩溃。

0.8.0

  • 添加了后台守护线程,尝试自动续租缓存的 Vault 令牌和 DB 凭证租约。

  • 添加了撤销缓存的 Vault 令牌的管理命令。

0.7.0

  • 添加了对 AWS IAM 和 Kubernetes 认证方法的支持。

  • 向数据库模块添加了更多详细的日志记录,以帮助调试连接失败。

0.6.0

  • 添加了对 Django 2.1 的支持。

  • 添加了对 Python 3.7 的支持。

  • 从 Sentry 的旧 SDK(raven)迁移到新的 SDK(sentry-sdk)。

0.5.0

  • 在文件系统中缓存数据库和 AWS 凭证,这样多线程/多进程系统不需要为每个进程和线程单独的凭证。

  • 通过将所有缓存文件(vault 令牌、AWS、数据库)的文件权限设置为仅由所有者可读来提高安全性。

0.4.2

  • 修复了 Django 2.0 弃用警告。

0.4.1

  • 修复了使用 PostGIS 数据库包装器时 SET ROLE 的错误。

0.4.0

  • 修复了由于父令牌被撤销而看似有效但实际上无效的租约导致的数据库凭证获取代码中的错误。

  • 添加了对数据库和 AWS 组件的测试。

  • 删除了对 12factor-vaultdjango-postgresql-setrole 的依赖。当升级到这个版本时,建议卸载这些包。

0.3.3

  • 修复了在 common.EnvironmentConfig 中向 HVAC 客户端传递 url 参数的错误。

  • 改进了测试。

  • 支持 Django 2.0。

0.3.2

  • 防止在进程分叉后回收 TCP 连接。

0.3.1

  • 通过在线程本地存储中缓存 VaultAuthenticator 实例来解决 TCP 连接问题。

0.3.0

  • 添加了 Vault 令牌的文件系统缓存。

0.2.0

  • 添加了基于 storages.backends.s3boto3.S3Boto3Storage 的 S3 存储后端。

0.1.0

  • 首次发布。

项目详情


下载文件

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

源代码分布

django-vault-helpers-0.8.1.tar.gz (17.9 kB 查看哈希值)

上传时间 源代码

构建分布

django_vault_helpers-0.8.1-py3-none-any.whl (23.9 kB 查看哈希值)

上传时间 Python 3

由以下支持