用于在Django项目中从Hashicorp Vault获取密钥和凭证的辅助功能
项目描述
这是一个辅助库,旨在简化从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()
这将覆盖 boto3 和 botocore 中的凭证解析代码,使其从 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-vault 和 django-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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7bfefcee92142a2f2becd7734be40847c253a30ec62238d73e56cdf1eb3b0b3a |
|
MD5 | 1be2a68be24bffdd6ab1b068af8f8e60 |
|
BLAKE2b-256 | 29e811664fac63393ef1fdd956aeb764946a350ad78c3a3fb26a07ea509af153 |
django_vault_helpers-0.8.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e6db217744c5c2ec615e3550333e6220d7adf420aa2c208d5330f18bd179fff2 |
|
MD5 | a859d16f335baa0e6093d757862a6ba6 |
|
BLAKE2b-256 | 5e721c59642de4f1c23d309662c1197062a1f466c685ff40dcb83b5c8be48821 |