跳到主要内容

保护 ClearML Server

重要

此文档页面适用于部署您自己的开源 ClearML Server。不适用于 ClearML Hosted Service 用户。

为确保部署安全,请遵循以下最佳实践。

网络安全

如果部署在允许公共访问的开放网络中,则只允许访问 ClearML Server 使用的特定端口(参见ClearML Server 配置)。

如果为实例配置了 HTTPS 访问,则允许访问端口 443

为了提高安全性,ClearML Server 的 Elasticsearch、MongoDB 和 Redis 服务器的端口默认不暴露;它们仅在 docker 网络内部开放。

用户访问安全

配置 ClearML Server 使用 Web Login 身份验证,这需要用户名和密码才能进行用户访问(参见Web Login 身份验证)。

文件服务器安全

从 v1.16.0 开始,ClearML 文件服务器使用令牌身份验证。要禁用,请在 fileserver.conf 中将 auth.enabled 设置为 false 或设置环境变量 CLEARML__fileserver__auth__enabled=false

对于早于 v1.16.0 的 ClearML Server 版本,即使配置了Web Login 身份验证,文件服务器也不安全。建议使用具有内置安全功能的对象存储解决方案

服务器凭据和密钥

默认情况下,ClearML Server 带有默认值,旨在让您快速设置并开始使用 ClearML SDK。

然而,这也意味着服务器必须得到保护,方法是阻止任何外部访问,或者更改默认值,使服务器的凭据不被公开知晓。

ClearML Server 的默认密钥可以在这里找到,并且可以使用 secure.conf 配置文件或环境变量进行更改(参见ClearML Server 功能配置)。

具体来说,相关的设置是

  • secure.http.session_secret.apiserver
  • secure.auth.token_secret
  • secure.credentials.apiserver.user_key
  • secure.credentials.apiserver.user_secret
  • secure.credentials.fileserver.user_key
  • secure.credentials.fileserver.user_secret
  • secure.credentials.webserver.user_key(如果使用Web Login 身份验证,服务器会自动撤销)
  • secure.credentials.webserver.user_secret(如果使用Web Login 身份验证,服务器会自动撤销)
  • secure.credentials.tests.user_key
  • secure.credentials.tests.user_secret
注意

保护 ClearML Server 也意味着使用Web Login 身份验证,因为默认的“自由访问”登录本质上不安全(并且一旦 secure.credentials.webserver.user_keysecure.credentials.webserver.user_secret 的值被更改,它将无法工作)

示例:使用环境变量

要为这些设置配置新值,请使用以下环境变量

  • CLEARML__SECURE__HTTP__SESSION_SECRET__APISERVER="new-secret-string"
  • CLEARML__SECURE__AUTH__TOKEN_SECRET="new-secret-string"
  • CLEARML__SECURE__CREDENTIALS__APISERVER__USER_KEY="new-key-string"
  • CLEARML__SECURE__CREDENTIALS__APISERVER__USER_SECRET="new-secret-string"
  • CLEARML__SECURE__CREDENTIALS__FILESERVER__USER_KEY="new-key-string"
  • CLEARML__SECURE__CREDENTIALS__FILESERVER__USER_SECRET="new-secret-string"
  • CLEARML__SECURE__CREDENTIALS__WEBSERVER__USER_KEY="new-key-string"
  • CLEARML__SECURE__CREDENTIALS__WEBSERVER__USER_SECRET="new-secret-string"
  • CLEARML__SECURE__CREDENTIALS__TESTS__USER_KEY="new-key-string"
  • CLEARML__SECURE__CREDENTIALS__TESTS__USER_SECRET="new-secret-string"

示例:使用 Docker Compose

如果在 docker-compose.yml 中使用,这些变量应在 apiserver 服务的 environment 部分中按如下方式指定

version: "3.6"
services:
apiserver:
...
environment:
...
CLEARML__SECURE__HTTP__SESSION_SECRET__APISERVER: "new-secret-string"
CLEARML__SECURE__AUTH__TOKEN_SECRET: "new-secret-string"
CLEARML__SECURE__CREDENTIALS__APISERVER__USER_KEY: "new-key-string"
CLEARML__SECURE__CREDENTIALS__APISERVER__USER_SECRET: "new-secret-string"
CLEARML__SECURE__CREDENTIALS__WEBSERVER__USER_KEY: "new-key-string"
CLEARML__SECURE__CREDENTIALS__WEBSERVER__USER_SECRET: "new-secret-string"
CLEARML__SECURE__CREDENTIALS__TESTS__USER_KEY: "new-key-string"
CLEARML__SECURE__CREDENTIALS__TESTS__USER_SECRET: "new-secret-string"
...
重要

在生成新的用户密钥和密钥时,请确保使用足够长的字符串(密钥使用 30 个字符,密钥使用 50-60 个字符)。请参阅此处的 Python 示例代码来生成这些字符串。