跳转到主要内容

一个用于存储和安全的访问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 文件。

由以下机构支持

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