SSL 证书

如果您想将您的 Metabase Cloud 或自托管实例连接到数据库,您可以使用安全套接层 (SSL) 加密和证书来保护连接。

为什么要这样做

  • 您正在使用 Metabase Cloud,并希望确保您连接到的数据仓库的身份(例如,PostgreSQL、MySQL)。
  • 您正在自托管 Metabase,并希望确保由外部提供商托管的数据仓库的身份。您也可以使用此方法来确保在连接到应用程序数据库时使用最严格的连接参数。

如果您正在使用 Metabase Cloud,应用程序数据库由我们处理,因此您只需保护与您添加到 Metabase 的数据仓库的连接。

前提条件

允许 JDBC 连接的数据库,因为您需要使用连接字符串来指定您要使用的证书。

步骤 1:从您的提供商处下载根证书

如果您通过 Docker 容器运行 Metabase,您应该已经拥有 AWS 和 Azure 的证书。

您可以在 Metabase 的 Docker 镜像的 /app/certs/ 目录中找到证书

  • AWS RDS: /app/certs/rds-combined-ca-bundle.pem
  • Azure 证书: /app/certs/DigiCertGlobalRootG2.crt.pem

如果您需要其他证书,您可以构建自己的 Docker 镜像。访问您的外部提供商的数据库页面,找到下载用于连接到数据库的根证书的链接。

步骤 2:保存证书

自托管

将下载的证书保存在与 metabase.jar 文件相同的目录中。从技术上讲,您可以将证书存储在任何位置,但将其保存在与 metabase.jar 文件相同的目录中是最佳实践。您将在连接字符串中指定证书的路径。

Metabase 云

您需要先完成 步骤 3:添加您的数据库

完成后,您可以转到 管理 > 数据库 并选择您的数据库。找到名为 SSL 客户端证书 的部分,然后单击 选择文件 以上传您下载的证书。

步骤 3:添加您的数据库

例如,假设您想要保护与 PostgreSQL 数据库的连接。按照应用程序中的说明添加数据库。有关设置数据库连接的更多信息,请查看我们关于 添加数据库 的文档。

步骤 4:开启“使用安全连接 (SSL)”选项

如果您的数据库支持 JDBC 连接,Metabase 将为您提供一个字段,用于输入连接字符串的附加参数。Metabase 将使用连接字符串中的参数来建立安全连接。

步骤 5:添加其他连接字符串选项

您需要指定证书在运行 Metabase 的服务器上的位置。

例如,当连接到 PostgreSQL 数据库时,您需要添加两个参数

  • sslmode。您可以在 PostgreSQL 的文档中查看完整选项列表。我们建议您使用 verify-full;它是最安全的,并且开销最小。
  • sslrootcert。在这里,您将指定证书的文件路径。

您需要添加一个 & 符号 (&) 来分隔每个参数。例如,在 添加其他连接字符串选项 字段中,您需要添加类似以下内容的内容

sslmode=verify-full&sslrootcert=/path/to/certificate.pem

/path/to/certifcate.pem 替换为您从提供商处下载的证书的完整路径。

您可以了解有关 PostgreSQL 的 SSL 支持的更多信息。

使用环境变量保护与应用程序数据库的连接

如果您正在自托管 Metabase,您可以使用 环境变量 来保护与应用程序数据库的连接。

要使用的环境变量是 MB_DB_CONNECTION_URI

您需要在此处包含完整的连接字符串,包括数据库主机、端口、数据库名称和用户信息,以及包含证书的其他连接参数。例如,

jdbc:postgresql://db.example.com:port/mydb?user=dbuser&password=dbpassword&ssl=true&sslmode=verify-full&sslrootcert=/path/to/certificate.pem

两者都可以提供以支持相互身份验证方案。

信任存储和密钥存储

对于某些数据库,例如 PostgreSQL 和 Oracle,您可以使用信任存储和密钥存储来保护连接。

信任存储

如果提供了信任存储来验证凭据,则客户端(您的 Metabase)可以验证服务器(数据库)并确保其身份符合预期。

密钥存储

如果使用密钥存储来提供凭据,则服务器(数据库服务器)可以请求客户端(您的 Metabase)使用该密钥存储对其自身进行身份验证。密钥存储的使用频率较低,并且在某些情况下,无法使用密钥存储(例如,Amazon 的 RDS 禁止密钥存储)。但是,如果您在本地托管,您可能希望使用密钥存储。

阅读其他版本的 Metabase 的文档。