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:添加您的数据库。
完成之后,您可以转到 Admin > Databases 并选择您的数据库。找到名为 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 的文档。