模型访问控制
2.9 版本引入
您可以将安全插件与 ML Commons 结合使用,以管理非管理员用户对特定模型的访问。例如,组织中的一个部门可能希望限制其他部门的用户访问他们的模型。
为了实现这一目标,用户会被分配一个或多个后端角色。与在用户配置期间为单个用户分配单个角色不同,后端角色通过在用户登录时为其分配后端角色,提供了一种将一组用户映射到角色的方式。例如,用户可以被分配一个包含ml_full_access
角色的IT
后端角色,并拥有对所有 ML Commons 功能的完全访问权限。或者,其他用户可以被分配一个包含ml_readonly_access
角色的HR
后端角色,并被限制为对机器学习 (ML) 功能的只读访问。鉴于这种灵活性,后端角色可以提供对模型的更精细的访问,并使为多个用户分配角色变得更容易,而无需单独映射用户和角色。
ML Commons 角色
ML Commons 插件有两个保留角色
ml_full_access
:授予对所有 ML 功能的完全访问权限,包括启动新的 ML 任务以及读取或删除模型。ml_readonly_access
:授予对 ML 任务、训练模型以及与模型集群相关的统计信息的只读访问权限。不授予启动或删除 ML 任务或模型的权限。
模型组
为了进行访问控制,模型被组织成模型组——特定模型的版本集合。与用户一样,模型组可以被分配一个或多个后端角色。同一模型的所有版本共享相同的模型名称,并具有相同的后端角色。
当您创建新的模型组时,您被视为模型所有者。即使其他用户将模型注册到此模型组,您仍然是模型及其所有版本的拥有者。当模型所有者创建模型组时,所有者可以为此模型组指定以下访问模式之一
public
:所有有权访问集群的用户都可以访问此模型组。private
:只有模型所有者或管理员用户才能访问此模型组。restricted
:所有者、管理员用户或任何共享模型组后端角色的用户都可以访问此模型组中的任何模型。创建restricted
模型组时,所有者必须将其一个或多个后端角色附加到模型。
管理员可以访问集群中的所有模型组,无论其访问模式如何。
模型访问控制先决条件
在使用模型访问控制之前,您必须满足以下先决条件
- 在您的集群上启用安全插件。有关更多信息,请参阅OpenSearch 中的安全性。
- 对于
restricted
模型组,请确保管理员已向用户分配后端角色。 - 在您的集群上启用模型访问控制。
如果未满足任何先决条件,集群中的所有模型都将是public
,并且任何有权访问集群的用户都可以访问。
向用户分配后端角色
创建适当的后端角色并将这些角色分配给用户。后端角色通常来自 LDAP 服务器或 SAML 提供商,但如果您使用内部用户数据库,则可以使用 REST API 手动添加它们。
只有管理员用户才能向用户分配后端角色。
在分配后端角色时,考虑以下两个用户示例:alice
和bob
。
以下请求将用户alice
分配给analyst
后端角色
PUT _plugins/_security/api/internalusers/alice
{
"password": "alice",
"backend_roles": [
"analyst"
],
"attributes": {}
}
下一个请求将用户bob
分配给human-resources
后端角色
PUT _plugins/_security/api/internalusers/bob
{
"password": "bob",
"backend_roles": [
"human-resources"
],
"attributes": {}
}
最后,最后一个请求将alice
和bob
都分配给允许他们完全访问 ML Commons 的角色
PUT _plugins/_security/api/rolesmapping/ml_full_access
{
"backend_roles": [],
"hosts": [],
"users": [
"alice",
"bob"
]
}
如果alice
创建了一个模型组并将其分配了analyst
后端角色,则bob
将无法访问此模型。
启用模型访问控制
您可以按如下方式动态启用模型访问控制
PUT _cluster/settings
{
"transient": {
"plugins.ml_commons.model_access_control_enabled": "true"
}
}
模型访问控制 API
模型访问控制通过模型组 API 实现。这些 API 包括注册、搜索、更新和删除模型组操作。
有关模型访问控制相关 API 的信息,请参阅模型组 API。
隐藏模型
2.12 版本引入
为了向最终用户(包括集群管理员)隐藏模型详细信息,您可以注册一个隐藏模型。如果模型是隐藏的,非超级管理员用户无权调用任何模型 API,除了针对该模型的预测 API。
只有超级管理员用户可以注册隐藏模型。隐藏模型可以是 OpenSearch 提供的预训练模型、您自己的自定义模型或外部托管模型。要注册隐藏模型,您首先需要使用管理员证书进行身份验证
curl -k --cert ./kirk.pem --key ./kirk-key.pem -XGET 'https://:9200/.opendistro_security/_search'
所有由超级管理员用户创建的模型都会自动注册为隐藏模型。要注册隐藏模型,请向_register
端点发送请求
curl -k --cert ./kirk.pem --key ./kirk-key.pem -X POST 'https://:9200/_plugins/_ml/models/_register' -H 'Content-Type: application/json' -d '
{
"name": "OPENSEARCH_ASSISTANT_MODEL",
"function_name": "remote",
"description": "OpenSearch Assistant Model",
"connector": {
"name": "Bedrock Claude Connector",
"description": "The connector to Bedrock Claude",
"version": 1,
"protocol": "aws_sigv4",
"parameters": {
"region": "us-east-1",
"service_name": "bedrock"
},
"credential": {
"access_key": "<YOUR_ACCESS_KEY>",
"secret_key": "<YOUR_SECRET_KEY>",
"session_token": "<YOUR_SESSION_TOKEN>"
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"url": "https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke",
"request_body": "{\"prompt\":\"\\n\\nHuman: ${parameters.inputs}\\n\\nAssistant:\",\"max_tokens_to_sample\":300,\"temperature\":0.5,\"top_k\":250,\"top_p\":1,\"stop_sequences\":[\"\\\\n\\\\nHuman:\"]}"
}
]
}
}'
隐藏模型注册后,只有超级管理员才能对模型执行操作,包括部署、卸载、删除和获取 API 操作。例如,要部署隐藏模型,请发送以下请求。在此请求中,q7wLt4sBaDRBsUkl9BJV
是模型 ID
curl -k --cert ./kirk.pem --key ./kirk-key.pem -X POST 'https://:9200/_plugins/_ml/models/q7wLt4sBaDRBsUkl9BJV/_deploy'
隐藏模型的model_id
是模型name
。隐藏模型包含一个设置为true
的is_hidden
参数。您不能更改隐藏模型的is_hidden
参数。
管理员用户可以通过更新模型的后端角色来更改对模型的访问权限。