Django项目中从Hashicorp保管库获取机密和凭据的帮助程序功能
django-vault-helpers的Python项目详细描述
这是一个助手库,目的是使从Django项目的Hasicorp库检索机密变得更容易。
安装
从pip安装django-vault-helpers。
$ pip install django-vault-helpers
将新软件包添加到已安装的应用程序中。
INSTALLED_APPS = [ ... 'vaulthelpers', ... ]
对保险库进行身份验证
使用环境变量配置连接设置以对保险库进行身份验证。
Environment Variable | Description |
---|---|
VAULT_URL | Required. The URL of the Vault API. For example, ^{tt2}$. |
VAULT_CACERT | Optional. File path to the Vault CA certificate. |
VAULT_SKIP_VERIFY | Optional. Set to disable validation of Vault’s SSL cert. |
VAULT_DEBUG | Optional. Enable Vault debug logging. |
除了上面的设置之外,还必须为下面的一种身份验证方法提供环境变量。
Environment Variable | Description |
---|---|
VAULT_TOKEN | Token for Vault Token authentication |
VAULT_APPID, VAULT_USERID | App-ID authentication |
VAULT_ROLEID, VAULT_SECRETID | App-Role authentication |
VAULT_SSLCERT, VAULT_SSLKEY | SSL Client Cert authentication |
数据库连接机密
要使用vault加载数据库连接配置和凭据,请按照Database secret backend documentation中的说明配置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"
接下来,通过以下环境变量添加设置。
Environment Variable | Description |
---|---|
VAULT_DATABASE_PATH | Vault path to read from when fetching database credentials. For example, ^{tt3}$. |
DATABASE_URL | Database connection string, sans the username and password. For example, ^{tt4}$. |
DATABASE_OWNERROLE | For PostgreSQL, the name of the role to assume after connecting using ^{tt5}$ |
最后,编辑项目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凭据,请按照AWS secret backend documentation中的说明配置vault aws secret backend。
$ 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
接下来,通过以下环境变量添加设置。
Environment Variable | Description |
---|---|
VAULT_AWS_PATH | Vault path to read from when fetching AWS credentials. For example, ^{tt8}$. |
最后,将django项目配置为使用vault加载aws凭据。为此,请编辑settings.py文件以包含以下行。
import vaulthelpers # Load AWS credentials from Vault vaulthelpers.aws.init_boto3_credentials()
这将重写boto3和botocore中的凭据解析代码,以便它从保险库中获取凭据,而不是通常的方法,如环境变量或ec2元数据服务。
直接进入暖通空调客户机
要直接访问身份验证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中的错误,该错误有时会在查找租约ttl时导致金库死机。
0.8.0
- 添加后台守护程序线程,尝试自动续订缓存的保管库令牌和数据库凭据租约的租约。
- 添加管理命令以撤消缓存的保管库令牌。
0.7.0
- 添加对aws iam和kubernetes auth方法的支持
- 向数据库模块添加更多详细日志记录以帮助调试连接失败
0.6.0
- 添加对django 2.1的支持
- 添加对Python3.7的支持
- 从Sentry的旧sdk(Raven)迁移到他们的新sdk(Sentry sdk)。
0.5.0
- 在文件系统上缓存数据库和aws凭据,以便多线程/多进程系统不需要为每个进程和线程提供单独的凭据。
- 通过将所有缓存文件(保管库令牌、AWS、数据库)的文件权限设置为仅所有者可读,提高安全性。
0.4.2
- 修复django 2.0不推荐警告。
0.4.1
- 修复使用postgis数据库包装器时设置角色的错误。
0.4.0
- 修复当租约看起来仍然有效但由于其父令牌被吊销而无效时数据库凭据获取代码的错误。
- 添加了数据库和aws组件的测试。
- 已删除对12factor-vault和django-postgresql-setrole的依赖项。升级到此版本时,建议卸载这些软件包。
0.3.3
- 修复在common.EnvironmentConfig 中将url参数传递给hvac客户端时出现的错误
- 改进测试。
- 支持Django 2.0
0.3.2
- 防止RE分叉进程后循环TCP连接。
0.3.1
- 通过在线程本地存储中缓存VaultAuthenticator实例,修复了TCP连接问题。
0.3.0
- 添加保管库令牌的文件系统缓存。
0.2.0
- 基于storages.backends.s3boto3.S3Boto3Storage添加s3存储后端。
0.1.0
- 初次发布。