保护ClearML服务器
本文档页面适用于部署您自己的开源ClearML服务器。它不适用于ClearML托管服务用户。
为确保部署的安全性,请遵循以下最佳实践。
网络安全
如果部署在允许公共访问的开放网络中,仅允许访问ClearML Server使用的特定端口(参见ClearML Server配置)。
如果为实例配置了HTTPS访问,请允许访问端口443
。
为了提高安全性,ClearML Server的Elasticsearch、MongoDB和Redis服务器的端口默认不暴露;它们仅在docker网络内部开放。
用户访问安全
配置ClearML服务器以使用Web登录认证,这需要用户名和密码进行用户访问 (参见Web登录认证)。
文件服务器安全
从v1.16.0开始,ClearML文件服务器使用令牌认证。要禁用此功能,请在fileserver.conf
中将auth.enabled
设置为false
,或者设置CLEARML__fileserver__auth__enabled=false
。
对于早于v1.16.0版本的ClearML服务器,即使Web登录认证已配置,文件服务器也不安全。建议使用具有内置安全性的对象存储解决方案。
服务器凭据和密钥
默认情况下,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登录认证,服务器会自动撤销)secure.credentials.webserver.user_secret
(如果使用Web登录认证,服务器会自动撤销)secure.credentials.tests.user_key
secure.credentials.tests.user_secret
保护ClearML服务器还意味着使用Web登录认证,
因为默认的“自由访问”登录本质上是不安全的(并且一旦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示例代码。