主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

应用程序访问控制

MATLAB® Production Server™ 与 OAuth2 提供程序(例如 Azure® Active Directory (Azure AD) 和 PingFederate®)集成,并使用 JSON Web Tokens (JWT) 来限制用户对部署到服务器的应用程序或存档的访问。应用程序访问控制仅适用于使用 MATLAB Production Server 用于 MATLAB 函数执行的 RESTful API 与服务器通信的客户端。客户端向服务器发出请求时,必须在 HTTP 授权标头中发送访问令牌。此标头的格式为 Authorization:Bearer <access token>。要为本地服务器实例设置访问控制,必须定义访问控制配置文件和访问控制策略文件,并在 OAuth2 服务器配置文件中将 access-control-provider 属性设置为 main_config

访问控制配置文件

为了帮助验证向本地服务器实例发送请求的每个用户的身份,服务器管理员必须定义 JSON 格式的访问控制配置文件。服务器使用访问控制配置文件中的参数来验证客户端请求包含的 JWT。配置文件的默认路径和名称是 ./config/jwt_idp.json。您可以通过设置 access-control-config 属性来改变配置文件的路径和名称。如果更改配置文件的路径、名称或内容,则必须重新启动服务器才能使更改生效。

访问控制配置文件包含以下参数:

参数必需或可选描述
版本必需配置文件架构的版本号。版本号是一个 JSON 字符串,格式为 major#.minor#.patch#,其中每个数字都是一个非负整数。将 version 设置为 1.0.0
jwtIssuer必需身份提供方的 JWT 发行方元数据。将元数据指定为 JSON 字符串。元数据字符串必须与 JWT 中的 iss 声明匹配。例如对于 Azure AD,将 jwtIssuer 设置为 https://sts.windows.net/Azure AD tenant id/
appId必需JWT 的预期接收方。将收件人指定为 JSON 字符串。接收者协助验证 JWT 中的 aud 声明。例如,对于 Azure AD,appId 是已注册的 MATLAB Production Server 服务器应用的应用程序 ID。有关在 Azure 上注册应用程序的信息,请参阅 Quickstart:使用 Microsoft 标识平台注册一个应用程序。
jwksUri必需用于检索 JSON Web 密钥集 (JWKS) 的 URI。将 URI 指定为 JSON 字符串。JWKS 存储用于验证 JWT 的公钥。例如对于 Azure AD,将 jwksUri 设置为 https://login.microsoftonline.com/common/discovery/keys
jwksStrictSSL可选用于在与 JWKS 服务器进行 HTTPS 通信期间验证 jwksUri 指定的服务器的对等证书的标志。将选择指定为 JSON 布尔值。默认选择是 true。指定 true 验证对等证书。如果 JWKS 服务器使用自签名证书,则将此值设置为 false
jwksTimeOut可选请求检索 JWKS 所允许的最长时间。将时间指定为非负 JSON 整数。默认超时值为 120 秒。
userAttributeName可选唯一标识用户的 JWT 声明名称。将声明名称指定为 JSON 字符串。userAttributeName 的默认值是 sub
groupAttributeName可选列出用户所属组的 JWT 声明名称。将声明名称指定为 JSON 字符串。groupAttributeName 的默认值是 groups

您可以指定 userAttributeNamegroupAttributeName 或两者。如果要为特定用户配置访问控制,请指定 userAttributeName。如果要为用户组配置访问控制,请指定 groupAttributeName

以下是 Azure AD 作为身份提供方的配置文件示例。

{
  "version": "1.0.0",
  "jwtIssuer": "https://sts.windows.net/54ss4lk1-8428-7256-5fvh-d5785gfhkjh6/",
  "appId": "j21n12bg-3758-3r78-v25j-35yj4c47vhmt",
  "jwksUri": "https://login.microsoftonline.com/common/discovery/keys",
  "jwksStrictSSL": true,
  "jwksTimeOut": 120,
  "userAttributeName": "sub",
  "groupAttributeName": "groups" 
}

访问控制策略文件

要为 MATLAB Production Server 设置应用程序访问控制,服务器管理员必须定义 JSON 格式的访问控制策略文件。策略文件的默认路径和名称是 ./config/ac_policy.json。您可以通过设置 access-control-policy 属性来更改默认值。

当服务器启动时,它会尝试读取策略文件。如果该文件不存在或包含错误,则服务器不会启动,并将错误消息写入 log-root 属性指定的目录中的 main.log 文件中。

如果启用了应用程序访问控制,服务器启动后每五秒扫描一次策略文件。如果策略文件不存在或包含错误,服务器将继续运行,但会拒绝所有请求并将错误消息写入 main.log 文件。

该策略文件有一个单独的 JSON 对象,用于定义架构版本和策略模块。策略模块由一系列策略组成。每个策略都包含一个规则模块,用于定义策略的一组规则。规则模块由主题模块资源模块动作模块组成。

Outline of a policy file with a policy block, rule block, subject block, resource block, and action block.

架构版本是格式为 major#.minor#.patch# 的 JSON 字符串,其中每个数字都是非负整数。将架构版本设置为 1.0.0

策略模块

策略模块包含应用程序访问控制所需的策略列表。目前策略文件仅支持指定单个策略。

"policy" : [
   {
     "id": "policy_id",
     "description": "policy_description",
     <rule_block>
   }
]

每个策略都需要一个 id 值。policy_id 是一个 JSON 字符串,并且对于每个策略必须是唯一的。所有前导或尾随空格均会被删除。

对于策略来说,description 是可选的。

规则模块

规则模块包含规则对象的列表。

"rule":[
  {  
    "id": "rule_id",
    "description": "rule_description",
    <subject_block>,
    <resource_block>,
    <action_block>
  }
]    

规则模块支持多条规则,例如 "rule": [<rule>, <rule>, ...]

每个规则都需要一个 id 值。rule_id 是一个 JSON 字符串,并且对于每个规则必须是唯一的。所有前导或尾随空格均会被删除。

对于规则来说,description 是可选的。

主题模块

规则的主题模块定义了谁可以访问资源。您可以控制用户列表、用户组或两者的访问权限。

"subject" : {"groups": ["group_id", "group_id", ...],
             "users": ["user_id", "user_id", ...]}

使用 users 属性来指定由其唯一的 user_id 值标识的用户列表。使用 groups 属性来指定由其唯一的 group_id 值标识的用户组。您可以指定 users 属性、groups 属性或两者。

资源模块

规则的资源模块指定服务器请求想要访问的资源。目前,服务器请求可以访问的唯一资源是可部署存档(CTF 文件)。您可以指定多个可部署存档。

"resource" : {"ctf": ["archive_name", "archive_name", ...]}

您可以使用通配符 * 来指定多个存档。例如,如果要访问名称以 test 开头或结尾的所有存档,请分别将 archive_name 指定为 test**test。使用 * 作为 archive_name 来访问部署到服务器的所有存档。

动作模块

规则的动作模块描述了服务器请求想要对资源执行的操作。

"action" : ["execute", "modify"]

JSON 策略文件示例

以下示例定义了具有三条规则的访问控制策略。

  • 用户 aaa@xyz.combbb@xyz.com 可以执行可部署存档 magic

  • 所有属于 ID 为 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaabbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb 的组的用户以及用户 ccc@xyz.com 都可以执行可部署存档 monteCarlofastFourier

  • 属于质量工程组 cccccccc-cccc-cccc-cccc-cccccccccccc 的所有用户都可以执行所有名称以 test 开头的可部署存档。

服务器拒绝所有其他请求的访问。

{
  "version": "1.0.0",
  "policy" : [
    {
      "id": "policy1",
      "description": "Access Control policy for XYZ Corp.",
      "rule": [
        {
          "id": "rule1",
          "description": "Users aaa@xyz.com and bbb@xyz.com can execute deployable archive magic",
          "subject": { "users": ["aaa@xyz.com", "bbb@xyz.com"] },
          "resource": { "ctf": ["magic"] },
          "action": ["execute"]
        },
        {
          "id": "rule2",
          "description": "Group A and B and user ccc@xyz.com can execute deployable archives monteCarlo and fastFourier",
          "subject": { "groups": ["aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"],
                        "users": ["ccc@xyz.com"]  },
          "resource": { "ctf": ["monteCarlo", "fastFourier"] },
          "action": ["execute"]
        },
        {
          "id": "rule3",
          "description": "QE group C can execute any deployable archive whose name starts with test",
          "subject": { "groups": ["cccccccc-cccc-cccc-cccc-cccccccccccc"] },
          "resource": { "ctf": ["test*"] },
          "action": ["execute"] 
        }
      ]
    }
  ]
}

另请参阅

外部网站