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第三方库


热门话题
使用jaxb2annotateplugin和XJC工具的java自定义注释   java组织。xeustechnologies。jcl无法加载WstxInputFactory类   java JUnit在格式化字符串上比较失败   java Bukkit配置部分getKeys   如何关闭Java流?   java Struts2正则表达式配置   链式事务注释的java奇怪行为   java在两个JButton之间使用变量   java签署APK时内容会发生什么变化?   java LWJGL:Slick:3D世界中的绘图字体   如何分解Java数组?   在Java MySql中处理多个过滤器   java如何在Firebase数据库中跳过初始OnChildaded事件触发   java如何在PreviewView中使用CameraX?   在子类#中重写父类后访问父类原始方法的java已解决   java找不到类型的属性   游戏框架游戏!框架+Java