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/certificate.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 的文档。