内容提要
Supabase Vault是一个Postgres扩展,用于在数据库中安全管理机密和加密。它基于pgsodium,提供现代化的加密功能,支持安全存储API密钥和访问令牌,自动管理根密钥,确保数据在磁盘和备份中加密。用户可以通过插入机密到vault.secrets表来使用Vault,并通过vault.decrypted_secrets视图查看解密后的数据。
延伸解读
Vault 与 pgcrypto 的关键差异
文章指出,pgcrypto 作为 PostgreSQL 的传统加密扩展,要求用户直接提供原始密钥,这容易在日志、客户端或备份中泄露。而 Vault 基于 pgsodium,通过内部管理的根密钥和密钥 ID 间接引用密钥,避免在 SQL 中暴露原始密钥。这种设计更适合安全优先的应用,尤其是需要自动密钥管理的场景。
根密钥的管理方式
Vault 的根密钥由 pgsodium 在 Postgres 服务器启动时通过 Server Key Management 管理,存储在 SQL 语言之外,仅由 libsodium 库内部访问。在 Supabase 平台上,根密钥由后端自动生成和保存,用户无需操心;自托管时,pgsodium 支持从 /dev/urandom 生成并保存到数据目录等多种来源。这确保了密钥不会出现在 SQL 查询或备份中。
认证加密与关联数据的作用
Vault 使用带关联数据的认证加密(AEAD)。插入机密时,associated 列的内容会与密文一起参与 libsodium 的认证签名。读取机密时,不仅能解密,还能验证关联数据的真实性。关联数据可以是账户 ID 或其他绑定信息,帮助确保机密未被篡改,并关联到特定上下文。
适用场景与更敏感数据的建议
Vault 适合存储 API 密钥、访问令牌、环境变量等合理数量的安全数据。但对于大量敏感信息,如个人身份信息(PII),文章建议使用 pgsodium 的透明列加密,将其拆分到侧表中。这表明 Vault 并非万能,需根据数据敏感度和规模选择合适方案。
Q&A
Supabase Vault是什么?
Supabase Vault是一个Postgres扩展,用于在数据库中安全管理机密和加密。
Supabase Vault如何存储机密?
用户可以通过插入机密到vault.secrets表来使用Vault。
Supabase Vault使用了什么加密技术?
Vault使用的加密类型为带有关联数据的认证加密,确保数据的真实性。
Supabase Vault适合存储哪些类型的数据?
Vault适合存储API密钥、访问令牌等安全数据。
如何查看Supabase Vault中解密后的数据?
用户可以通过vault.decrypted_secrets视图查看解密后的数据。
使用Supabase Vault时,如何管理根密钥?
Vault自动管理根密钥,确保其存储在Postgres服务器内部,用户无需担心。