保护 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_key
和 secure.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 示例代码来生成这些字符串。