内容提要
本文讨论了将Postgres扩展打包和分发为OCI镜像的理由,以及使用OCI镜像的优势和安全性增强。作者建议在容器中运行Postgres,并计划将他们的工作开源。
延伸解读
扩展与Postgres的编译环境一致性至关重要
文章强调,Postgres扩展必须与Postgres服务器在相同的操作系统、libc版本、甚至相同的编译器和编译器版本下构建。否则,libc或ICU版本不匹配可能导致静默的数据损坏。因此,打包和分发扩展本质上等同于创建包含扩展的Postgres发行版,两者必须紧密结合。
OCI镜像的分层特性优化扩展打包与分发
OCI镜像由分层blob组成,每层可独立复用和缓存。对于Postgres扩展,若新版本仅更新扩展本身而依赖库不变,则只需重建扩展层,依赖层可保持缓存,从而加速构建和分发。此外,OCI镜像支持多架构索引,便于同时提供AMD64和ARM64版本。
利用OCI生态增强扩展安全性
OCI生态系统提供了安全扫描工具(如Trivy、Clair、Falco)、数字签名和证明(attestations)机制,可生成SBOM和SLSA来源信息,帮助防御供应链攻击。这些工具和标准可直接用于Postgres扩展镜像,避免自行实现安全功能,从而专注于扩展的构建与打包。
OCI镜像不限于容器环境
尽管OCI镜像常被称为容器镜像,但其本质是元数据清单和tar层,可通过HTTP API分发。文章展示了一个shell脚本示例,说明如何在不使用容器的情况下拉取并解包OCI镜像。因此,Postgres扩展以OCI镜像分发也可用于非容器化环境,如直接解压到本地目录。
Q&A
为什么Postgres扩展应该打包为OCI镜像?
Postgres扩展打包为OCI镜像可以利用OCI生态系统的工具和基础设施,避免重复造轮子,同时增强安全性和分发效率。
OCI镜像的主要特点是什么?
OCI镜像是一个包含多个层和元数据的开放容器标准,支持高效的构建、分发和安全扫描。
使用OCI镜像有哪些安全优势?
OCI镜像支持安全扫描、数字签名和供应链攻击防护,增强了使用扩展时的安全性。
StackGres支持多少个Postgres扩展?
StackGres目前支持近200个Postgres扩展,并计划持续增加。
Postgres扩展的安全风险有哪些?
Postgres扩展可能来自不受信任的代码,存在崩溃、数据损坏或丢失的风险,因此需要进行安全评估。
如何在StackGres中动态加载Postgres扩展?
在StackGres中,可以通过YAML配置文件或Web控制台动态加载和卸载Postgres扩展。