跳转到主要内容

一个用于存储和安全的访问1Password保险库项目的自定义Django字段。

项目描述

django-opfield

PyPI PyPI - Python Version Django Version

一个自定义的Django字段,它通过集成1Password的op CLI,允许通过op://秘密引用URI安全地访问秘密。

需求

入门

  1. 从PyPI安装软件包

    python -m pip install django-opfield
    
  2. 安装1Password op CLI工具,确保它可以从您的应用程序运行的位置调用。

  3. 创建1Password服务账户并将服务账户的令牌提供给您的应用程序。

    选择一个选项

    • 设置OP_SERVICE_ACCOUNT_TOKEN环境变量

    • 在您的应用程序的settings.py中进行配置

      # settings.py
      DJANGO_OPFIELD = {
          # Explicitly set here only as an example
          # Use whatever configuration/environment library you prefer
          # (`python-dotenv`, `django-environs`, `environs`, etc.)
          "OP_SERVICE_ACCOUNT_TOKEN": "super-secret-token",
      }
      

用法

OPField允许Django模型安全地访问存储在1Password保险库中的秘密,从而在不直接在代码库中暴露敏感数据的情况下集成敏感数据。秘密使用op://URI方案存储,可以通过相应的模型属性动态检索,即<field_name>_secret

定义模型

首先,让我们定义一个包含 OPField 的模型。这个字段将存储 1Password 中密钥的引用,而不是密钥本身。

from django.db import models

from django_opfield.fields import OPField


class APIService(models.Model):
    name = models.CharField(max_length=255)
    api_key = OPField()

    def __str__(self):
        return self.name

访问密钥

假设您在名为 "my_vault" 的 1Password 保险库中的 "my_api" 项目下有一个名为 "api_key" 的字段中存储了一个密钥 API。以下是您如何在 Django 项目中存储和访问此密钥的方法

>>> from example.models import APIService
>>> my_api = APIService.objects.create(
...     name="My API", api_key="op://my_vault/my_api/api_key"
... )
>>> print(my_api)
<APIService: My API>
>>> print(my_api.name)
'My API'
>>> print(my_api.api_key)
'op://my_vault/my_api/api_key'
>>> # Retrieving the actual secret value is done using the automatically generated '_secret' attribute
>>> print(my_api.api_key_secret)
'your_super_secret_api_token_here'

存储引用,而不是密钥

仅在 Django 管理界面和数据库中存储和公开密钥的 URI 引用。实际的密钥本身从未存储,仅在访问时动态检索。这种方法使您能够在整个 Django 应用程序中安全地管理和访问密钥,从而保护免受与直接公开相关的潜在安全漏洞。

文档

有关更多信息,请参阅文档

许可证

django-opfield 使用 MIT 许可证。有关更多信息,请参阅LICENSE 文件。

项目详情


下载文件

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

源分布

django_opfield-0.1.1.tar.gz (17.1 kB 查看散列)

上传时间

构建分布

django_opfield-0.1.1-py3-none-any.whl (8.4 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面