控制 MATLAB Web App Server 中的机密访问
您可以将应用程序代码中的敏感信息(例如密码)存储为机密,从而避免泄露这些信息。机密可以是您想要以加密形式安全存储的任何敏感信息。每个机密由一个名称、一个值以及可选的元数据组成。使用 Web App 中的 getSecret
(MATLAB) 函数检索机密。有关在部署中使用机密的更多信息,请参阅处理已部署 App 中的敏感信息。
您可以将机密存储在 MATLAB® Web App Server™ 的安全保管库中。要在 MATLAB Web App Server 上添加和管理机密,请使用以下选项之一:
使用
webapps-secrets
在命令行管理机密。如果您使用的是 MATLAB Web App Server 的开发版本,请使用图形界面来管理机密。有关详细信息,请参阅在 MATLAB Compiler 中配置 MATLAB Web App Server 的开发版本 (MATLAB Compiler)。
在服务器上启用基于策略的机密访问,使您能够创建基于属性的规则,允许经过身份验证的主体访问存储在服务器保管库中的机密。确保只有服务器管理员拥有保管库的密钥并能访问保管库位置。
前提条件
MATLAB Web App Server 的一个实例。有关信息,请参阅设置 MATLAB Web App Server。
要通过用户身份验证控制对机密的访问,您必须在服务器上启用身份验证。有关详细信息,请参阅身份验证。
独立的 MATLAB Web App Server 产品支持身份验证,而 MATLAB Compiler™ 中包含的开发版本则不支持。有关详细信息,请参阅MATLAB Web App Server 差异。
控制机密访问
机密访问控制文件允许您指定哪些经过身份验证的用户或组可以访问存储在服务器上的机密。
如果启用了服务器身份验证,则默认启用机密访问控制,并且经过身份验证的用户将无法访问任何机密,除非策略指定。要在服务器上启用身份验证,请参阅 身份验证。
要启用访问控制,请创建一个名为 webapps_secrets_acc_ctl.json
的文件并将其放在 config
文件夹内的 webapps_private
文件夹中。
webapps_private
文件夹位于以下位置:
操作系统 | 文件夹位置 |
---|---|
Windows® |
|
Linux® |
|
macOS |
|
webapps_secrets_acc_ctl.json
必须使用以下 JSON 架构。
{
"version": <version_string>,
"policy": [
{
"id": <id_string>,
"description": <description_string>,
"rule": [
{
"id": <rule_id_string>,
"description": <rule_description_string>,
"subject": {
"uid": [<user_string>, <user_string>]
},
"resource": {
"secret": [<secret_key_string>, <secret_key_string>]
},
"action": <action_string>
}
]
}
]
}
version:指定 JSON 架构的版本。R2024b 的默认值为:
1.2.0
。id:为该策略指定策略 ID。策略 ID 必须是一组字母数字字符。任何前导或尾随空格均会被删除。例如:
"id" : "policy420"
description:指定策略的描述。例如:
"description" : "Company policy for accessing web app secrets."
id:为每个规则指定唯一的规则 ID。规则 ID 必须是一组字母数字字符。任何前导或尾随空格均会被删除。例如:
"id" : "rule1"
description:为每个规则指定一个描述。例如:
"description": "Only user id 'mluser' can access secret 'app1.*'"
subject:指定一个或多个属性名称 - 值对,以授予经过身份验证的主体访问指定机密。
例如:
"subject": { "memberOf": ["CN=Middle,OU=middle,ou=groups,DC=school,DC=com"] }
"subject": { "groups": ["Sales"] }
"subject": { "uid": ["fbueller", "cfrye"] }
如果您正在使用 Azure® 活动目录并且需要检索组 ID,请参阅 使用 Azure Active Directory。
secret:指定可由指定主题访问的一个或多个机密的名称。
例如:
机密名称末尾支持通配符 (*)。例如,"secret": ["mypassword"]
"myapp1.*"
。action:指定指定主体可以执行的操作类型。唯一支持的操作是
read
,它授予主体对机密的读取权限。有关详细信息,请参阅基于角色的访问。
webapps_secrets_acc_ctl.json
示例文件
{
"version": "1.0.0",
"policy": [
{
"id": "secretPolicyID01",
"description": "Secret Access Policy for user access",
"rule": [
{
"id": "rule101",
"description": "Only allow user 'mluser' to access secret 'app1.*' ",
"subject": { "uid": ["mluser"] },
"resource": {
"secret": ["app1.*"]
},
"action": ["read"]
},
{
"id": "rule102",
"description": "Only allow 'mluser' to access 'myusername' and 'password_for_all' ",
"subject": {"uid": ["mluser"]},
"resource": {
"secret": ["myusername","password_for_all"]
},
"action": ["read"]
},
{
"id": "rule103",
"description": "Allow admin group to access secrets 'username_for_admin','password_for_admin' ",
"subject": { "group": ["admin"] },
"resource": {
"secret":["username_for_admin","password_for_admin"]
},
"action": ["read"]
}
]
}
]
}
配置机密访问范围
机密配置文件可让您组织存储在服务器上的机密的层次结构。例如,您可以限制特定密钥名称的范围,以便对不同的用户或 Web App 使用具有不同机密值的相同机密名称。
要配置您的机密范围,请创建一个名为 webapps_secrets_config.json
的文件并将其放在 webapps_private
文件夹中。
webapps_secrets_config.json
必须使用以下 JSON 架构。
{
"version" : <version_string>
"description" : <policy_description_string>
“secretKeyMap” : [
{
"id" : <rule_id_string>,
"description" : <rule_description_string>,
"secretKey": [<secret_key_string>, <secret_key_string>, ...],
"scope" : <scope_string>
}
]
}
version:指定 JSON 架构的版本。R2024b 的默认值为:
1.2.0
。description:指定策略的描述。例如:
"description" : "Company policy for accessing web app secrets."
secretKeyMap:机密映射模块包含规则对象列表。一个模块中可以存在多条规则。规则按顺序应用,第一条规则具有最高优先级。每条规则都需要一个唯一的 ID。
id:为每个规则指定唯一的规则 ID。规则 ID 必须是一组字母数字字符。任何前导或尾随空格均会被删除。例如:
"id" : "rule101"
description:为每个规则指定一个描述。例如:
"description": "Only user id 'mluser' can access secrets 'app1.*'"
secretKey:指定可以访问的机密的名称。
例如:
机密名称末尾支持通配符 (*)。例如,"secretKey": ["mypassword"]
"myapp1.*"
。scope:指定用户、组或特定 Web App 以允许访问指定的机密。范围可以是任何静态字符串或带有宏的字符串。支持以下宏:
$UserID
- 登录会话用户 ID$AppName
- Web App 名称,包括 CTF 文件名和文件夹名称
注意
为了使用 $UserID
宏,您必须在 config/webapps_private
目录中包含 userinfo.json
。有关详细信息,请参阅根据用户自定义 Web App 行为。
webapps_secrets_config.json
示例文件
{
"version": "1.2.0",
"description": "Configure secret key mapping rules",
"secretKeyMap": [
{
"id" : "rule01",
"description" : "Limit db_password only to app testapp1",
"secretKey" : "db_password",
"scope" : "testapp1"
},
{
"id" : "rule02",
"description" : "Ensure unique password per user for app testapp1",
"secretKey" : "testapp1.password",
"scope" : "$UserID"
},
{
"id" : "rule03",
"description" : "Prevent secret name collision between multiple apps",
"secretKey" : "database_name",
"scope" : "$AppName"
}
]
}
另请参阅
webapps-secrets
| getSecret
(MATLAB)