TorchServe 令牌授权 API¶
TorchServe 现在默认强制执行令牌授权
TorchServe 默认强制执行令牌授权,这需要在调用 API 时提供正确的令牌。这是一项安全功能,旨在解决未经授权的 API 调用问题。这适用于未经授权的用户可能尝试访问正在运行的 TorchServe 实例的场景。默认行为是启用此功能,该功能会创建一个密钥文件,其中包含用于 API 调用的相应令牌。用户可以禁用此功能以防止 API 调用需要令牌授权(如何禁用),但是,用户需要注意,这将使 TorchServe 面临潜在的未经授权的 API 调用风险。
如何设置和禁用令牌授权¶
全局环境变量:使用
TS_DISABLE_TOKEN_AUTHORIZATION
并设置为true
以禁用,设置为false
以启用令牌授权。请注意,必须在 config.properties 中设置enable_envvars_config=true
才能使用全局环境变量命令行:命令行只能通过添加
--disable-token-auth
标志来禁用令牌授权。配置属性文件:使用
disable_token_authorization
并设置为true
以禁用,设置为false
以启用令牌授权。
环境变量、cmd 和配置文件之间的优先级遵循以下 TorchServer 标准
示例 1
配置文件:
disable_token_authorization=false
cmd 行:
torchserve --start --ncs --model-store model_store --disable-token-auth
结果:通过命令行禁用令牌授权,但通过配置文件启用令牌授权,最终令牌授权被禁用。命令行优先级更高
示例 2
配置文件:
disable_token_authorization=true
cmd 行:
torchserve --start --ncs --model-store model_store
结果:通过配置文件禁用令牌授权,但未通过命令行配置,最终令牌授权被禁用。
配置¶
Torchserve 默认启用令牌授权。预期的日志语句
main org.pytorch.serve.http.TokenAuthorizationHandler - 令牌 授权 已启用
在当前工作目录中,将生成一个文件
key_file.json
。密钥文件示例
{
"management": {
"key": "B-E5KSRM",
"expiration time": "2024-02-16T21:12:24.801167Z"
},
"inference": {
"key": "gNRuA7dS",
"expiration time": "2024-02-16T21:12:24.801148Z"
},
"API": {
"key": "yv9uQajP"
}
}
有 3 个密钥,每个密钥都有不同的用途。
管理密钥:用于管理 API。示例:
curl https://127.0.0.1:8081/models/densenet161 -H "Authorization: Bearer I_J_ItMb"
推理密钥:用于推理 API。示例:
curl http://127.0.0.1:8080/predictions/densenet161 -T examples/image_classifier/kitten.jpg -H "Authorization: Bearer FINhR1fj"
API 密钥:用于令牌授权 API。有关 API 用法,请查看第 4 节。
API 用于生成新密钥以替换管理密钥或推理密钥。
管理示例:
curl localhost:8081/token?type=management -H "Authorization: Bearer m4M-5IBY"
将替换 key_file 中的当前管理密钥,并更新到期时间。推理示例:
curl localhost:8081/token?type=inference -H "Authorization: Bearer m4M-5IBY"
用户将必须使用上述 API 之一。
当用户关闭服务器时,key_file 将被删除。
注释¶
请勿修改密钥文件。修改密钥文件可能会影响文件的读取和写入,从而阻止新密钥正确显示在文件中。
到期时间默认设置为 60 分钟,但可以通过在 config.properties 中添加
token_expiration_min
来更改。例如:token_expiration_min=30
三个令牌允许所有者在使用方面拥有最大的灵活性,并使他们能够根据自己的用途调整令牌。如果用户只能对已加载的模型运行推理,则服务器的所有者可以向用户提供推理令牌。如果所有者希望用户添加和删除模型,则所有者还可以向所有者提供管理密钥。