Django项目中从Hashicorp保管库获取机密和凭据的帮助程序功能

django-vault-helpers的Python项目详细描述


buildlicensekitformat

这是一个助手库,目的是使从Django项目的Hasicorp库检索机密变得更容易。

安装

从pip安装django-vault-helpers

$ pip install django-vault-helpers

将新软件包添加到已安装的应用程序中。

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

对保险库进行身份验证

使用环境变量配置连接设置以对保险库进行身份验证。

Environment VariableDescription
VAULT_URLRequired. The URL of the Vault API. For example, ^{tt2}$.
VAULT_CACERTOptional. File path to the Vault CA certificate.
VAULT_SKIP_VERIFYOptional. Set to disable validation of Vault’s SSL cert.
VAULT_DEBUGOptional. Enable Vault debug logging.

除了上面的设置之外,还必须为下面的一种身份验证方法提供环境变量。

Environment VariableDescription
VAULT_TOKENToken for Vault Token authentication
VAULT_APPID, VAULT_USERIDApp-ID authentication
VAULT_ROLEID, VAULT_SECRETIDApp-Role authentication
VAULT_SSLCERT, VAULT_SSLKEYSSL 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 VariableDescription
VAULT_DATABASE_PATHVault path to read from when fetching database credentials. For example, ^{tt3}$.
DATABASE_URLDatabase connection string, sans the username and password. For example, ^{tt4}$.
DATABASE_OWNERROLEFor 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 VariableDescription
VAULT_AWS_PATHVault 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()

这将重写boto3botocore中的凭据解析代码,以便它从保险库中获取凭据,而不是通常的方法,如环境变量或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-vaultdjango-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

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java依赖组织。缺少json:json:jar   从命令行Linux vs Windows调用Java   java“(BluetoothManager)”周围的这对括号是做什么的?   java在Spring中使用哪种传播?   java如何检查一个数字是否以任何顺序包含自身?   java如何在yotaphone上锁定背面屏幕?   无作用域bean的JavaCDI注入   angularjs我希望构建实时数据,将客户端传递到服务器,而不使用JAVA中的WebSocket   不显示对象的java动态JPanel   java在Flex中动态更改列系列显示名称   java Arduino未正确发送整数   测试服务器中的java Apache CXF客户端错误,需要服务器名称指示(SNI)   在GUI中按下按钮的java显示字符串方法   java如何在JSON反序列化期间将引用转换为实例   java类型安全:未选中的从对象强制转换   pac4j(多个提供商)的java SSO身份验证令牌吊销问题   java使用sbt文件指定主类的路径并包含库   运行应用程序时发生java UnsatifiedPendencyException异常