管理用于其他Datasette插件的API密钥等机密信息
项目描述
datasette-secrets
管理用于其他Datasette插件的API密钥等机密信息
此插件需要Datasette 1.0 alpha版本。
Datasette插件有时需要访问机密,例如用于与Datasette外部托管工具集成的API密钥 - 如地理编码器或托管AI语言模型。
此插件提供配置这些机密的方法
- 可以使用环境变量(如
DATASETTE_SECRETS_OPENAI_API_KEY
)配置机密 - 机密可以存储在SQLite数据库表的加密形式中,管理员用户可以通过Datasette网络界面更新这些加密的密钥
安装
在Datasette相同环境中安装此插件。
datasette install datasette-secrets
配置
首先,您需要为该插件生成一个加密密钥。运行此命令
datasette secrets generate-encryption-key
请将此密钥保存在安全的地方。它将用于加密和解密此插件存储的机密 - 如果丢失,您将无法恢复您的机密。
使用这两个插件设置配置插件
plugins:
datasette-secrets:
encryption_key:
$env: DATASETTE_SECRETS_ENCRYPTION_KEY
database: name_of_database
encryption_key
设置应设置为之前生成的加密密钥。如果您愿意,可以将其存储在环境变量中。
database
是应存储加密密钥的数据库名称。省略此设置以使用内部数据库。
使用内部数据库
虽然存储在datasette_secrets
表中的机密是加密的,但我们仍然建议将其从视图中隐藏。
一种方法是将其保留在Datasette的内部数据库中,该数据库对所有用户都不可见,即使是登录用户。
默认情况下,内部数据库是一个内存数据库,在Datasette重新启动时重置。这不适合持久性机密存储!
相反,您应该将Datasette切换到使用磁盘内数据库。您可以通过使用--internal
选项启动Datasette来实现这一点。
datasette data.db --internal internal.db
您的机密信息将存储在该数据库文件中的datasette_secrets
表中。
权限
只有具有manage-secrets
权限的用户才能通过Datasette Web界面管理机密。
您可以通过在datasette.yml
文件中包含以下内容来将该权限授予root
用户(或您选择的用户)
permissions:
manage-secrets:
id: root
然后以这种方式启动Datasette(使用--root
获取以root用户身份登录的URL)
datasette data.db --internal internal.db -c datasette.yml --root
或者,使用-s
选项设置该设置而不创建配置文件
datasette data.db --internal internal.db \
-s permissions.manage-secrets.id root \
--root
用法
具有manage-secrets
权限的用户将在Datasette导航菜单中看到一个新链接“管理机密”。该界面也可以通过/-/secrets
访问。
显示机密列表的页面将显示最后更新每个机密的用户。这将使用actors_from_ids()机制,如果可用,则显示actor的username
,否则显示name
,否则显示id
。
对于插件作者
如果想要实现机密,插件可以依赖于此插件。
在pyproject.toml
中的dependencies
列表中添加datasette-secrets
。
然后使用register_secrets()
插件钩子声明您需要的任何机密的名称和描述
from datasette import hookimpl
from datasette_secrets import Secret
@hookimpl
def register_secrets():
return [
Secret(
name="OPENAI_API_KEY",
description="An OpenAI API key"
),
]
您还可以提供可选的obtain_url
和obtain_label
字段,以链接到用户可以获取API密钥的页面
@hookimpl
def register_secrets():
return [
Secret(
name="OPENAI_API_KEY",
obtain_url="https://platform.openai.com/api-keys",
obtain_label="Get an OpenAI API key"
),
]
钩子可以接受可选的datasette
参数。它可以返回一个列表或一个返回列表的async def
函数。
列表应包含Secret()
实例,每个实例都有一个名称和一个可选的描述。描述可以包含HTML。
要获取机密的当前值,请使用await get_secret()
方法
from datasette_secrets import get_secret
# Third argument is the actor_id, optional
secret = await get_secret(datasette, "OPENAI_API_KEY", "root")
如果Datasette管理员设置了DATASETTE_SECRETS_OPENAI_API_KEY
环境变量,则将返回该变量。
否则,数据库表中的加密值将被解密并返回,或者如果没有配置机密,则返回None
。
每次访问机密时,都会更新last_used_at
列。将last_used_by
列设置为传递给get_secret()
的actor ID,如果没有传递actor ID,则设置为null
。
开发
要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境
cd datasette-secrets
python3 -m venv venv
source venv/bin/activate
现在安装依赖项和测试依赖项
pip install -e '.[test]'
要运行测试
pytest
项目详细信息
下载文件
下载适合您平台的自定义文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
datasette_secrets-0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5727ecb4be6e385ad44ba7c1b30f80e8fc3036fbcc184518c6b3e0a830c53b91 |
|
MD5 | 63a169f5a46366d3e7550589d9094f67 |
|
BLAKE2b-256 | f3c78b9b3fbe357d103f98d575721694331604ec81fa8deaa506d310e76cadcd |
datasette_secrets-0.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a5e21d4e4d550ebc668b3e795ffc57b99ecbd6f852fe55a0b44f17a4d6a49455 |
|
MD5 | c6bf40f54e3be98e77c8f09806f5d2a1 |
|
BLAKE2b-256 | a4022b6bbbbd670362422823a2b76c078a6d2d6994de991b798dbed0c59be779 |