SSL证书
如果您想将Metabase云或自托管实例连接到数据库,您可以使用带有证书的安全套接字层(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 版本的文档。