通过 API 管理访问策略

访问策略是一组用于评估后确定访问决策的规则和条件。 您可以创建定制访问策略。 所有定制访问策略在应用程序配置中显示为选项。

关于此任务

提供了一些缺省访问策略可供立即使用,但无法修改。 租户可以根据自己的需求添加定制访问策略。

  • 规则以第一匹配为基础进行评估。 当规则中的所有条件的匹配求值为 true 时,将返回规则的结果作为评估决策。 未完成进一步处理。
  • 可选参数 alwaysRun: true 可以添加到单个规则中。 除了最优匹配的规则集以外,此参数导致此规则也将被评估。 最优匹配结果和 alwaysRun 参数组合在一起,限制最多的操作将作为策略结果进行应用。 多个 alwaysRun 规则可以添加到一个策略中。
  • 如果策略需要条件的特定预订(例如设备管理),并且租户当前无权使用该预订,那么跳过该策略。 返回多因子认证 (MFA) 决策。
  • 如果规则需要 MFA 的特定预订,并且租户当前无权使用该预订,那么评估的 MFA 决策更改为拒绝。 此更改保护应用程序,而不是允许无条件访问。

策略编辑器可用于创建和修改策略。 请参阅 “管理访问策略”

无法使用策略编辑器添加某些条件。 在这些情况下,API 可用于修改现有策略或使用这些条件创建新的访问策略。

创建或更新访问策略时,将执行语法验证。

访问策略采用以下 JSON 格式:
注意:FedRAMP 不支持自适应访问。 因此, FedRAMP 用户无法使用任何 Trusteer 功能。
{
    "name": "policy_name",
    "description": "Description of the policy",
    "schemaVersion": "urn:access:policy:4.0:schema",
    "rules": [
        {
            "name": "allow_with_conditions",
            "id": "1",
            "conditions": {
                "contextAttributes": {
                    "attributes": [
                        {
                            "name": "attrName",
                            "values": [
                                "value1",
                                "value2"
                            ],
                            "opCode": "EQ"
                        }
                    ]
                },
                "subjectAttributes": {
                    "attributes": [
                        {
                            "name": "realmName",
                            "values": [
                                "cloudIdentityRealm",
                                "www.ibm.com"
                            ],
                            "opCode": "IN"
                        },
                        {
                            "name": "customAttr1",
                            "values": [
                                "val1"
                            ],
                            "opCode": "NEQ"
                        }
                    ]
                },
                "timeAttributes": {
                    "attributes": [
                        {
                            "name": "timezone",
                            "opCode": "EQ",
                            "values": [
                                "UTC Offset or GMT Offset"
                            ]
                        },
                        {
                            "name": "startDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "endDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "Monday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        },
                        {
                            "name": "Tuesday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        }
                    ]
                },
                "ipAddress": {
                    "opCode": "MATCH",
                    "values": [
                        "<ip_address>",
                        "<ip_address_range_start> - <ip_address_range_end>",
                        "<ip_address/subnet>"
                    ]
                },   
                "location": {
                    "attributes": [
                        {
                            "values": [
                                "3-Letter-ISO"
                            ],
                            "name": "country",
                            "opCode": "IN"
                        }
                    ]
                }
                  "location": {
                      "attributes": [
                          {
                              "values": [
                                  "<city>"
                              ],
                              "name": "city",
                              "opCode": "IN"
                        }
                    ]
                }
                "geoLocation": {
                    "enabled": "true"
                },
                "trusteer": {
                    "enabled": "true"
                }
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_ALLOW"
                },
                "authnMethods": []
            }
        },
        {
            "name": "Authentication factor validity",
            "id": "2",
            “alwaysRun”: true,
            "conditions": {
            "factorLifetimeAttributes": {
                "attributes": [
                {
                    "name": "anyFactor",
                    "opCode": "EQ",
                    "values": [
                       "120"
                     ]
                }, 
                {
                      "name": "reauthPerDevice",
                      "opCode": "EQ",
                      "values": [
                         "enabled"
                       ]
                  }

               ]
            }
       },
       "result": {
        "extendedAction": {
          "action": "ACTION_MFA_OVERRIDE"
        }
       }
        },
        {
            "name": "mfa_once_per_session_device_conditions",
            "id": "3",
            "contextAttributes": {
                "attributes": [
                    {
                        "name": "devicePlatform",
                        "values": [
                            "IOS",
                            "ANDROID",
                            "OTHER_MOBILE",
                            "MACOS",
                            "WINDOWS",
                            "OTHER_DESKTOP"
                        ],
                        "opCode": "IN"
                    },
                    {
                        "name": "deviceCompliance",
                        "values": [
                            "COMPLIANT",
                            "NONCOMPLIANT",
                            "UNKNOWN"
                        ],
                        "opCode": "IN"
                    }
                ]
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_MFA_PER_SESSION"
                },
                "authnMethods": [
                    "urn:ibm:security:authentication:asf:macotp"
                ]
            }
        },
        {
            "name": "deny_otherwise",
            "id": "100",
            "conditions": {},
            "result": {
                "extendedAction": {
                    "action": "ACTION_DENY"
                },
                "authnMethods": []
            }
        }
    ]
}
注: API 的绝大部分内容已在 Swagger 文档中进行了说明。 您可以通过管理员控制台的“设置 ”> “API 访问 ” > “API 文档 ”访问 Swagger 文档。 有关 Swagger API 的更多信息,请参阅 《验证应用程序编程接口 (API)》
以下信息适用于 API 规则。
  • 每个规则包含以下特性:
    name
    规则的名称。
    id
    事件数据和报告中使用的规则的唯一标识。
    conditions
    每个规则可以存在多个条件。 规则中的所有条件必须求值为 true 以匹配规则并应用结果。 缺省规则包含空条件。
  • 条件包含以下特性:
    contextAttributes
    与运行访问策略的流上下文相关的属性。 这些属性包括设备管理属性、OpenID Connect 属性和 HTTP 请求属性。
    subjectAttributes
    与已认证用户主题相关联的登录会话属性。
    factorLifetimeAttributes
    使有效性与特定认证因子或方法关联。
    timeAttributes
    启用基于时间的访问控制的时间属性。
    ipAddress
    启用个人、范围或基于子网的允许或阻止列表的 IP 地址条件。
    location
    从用户的 IP 地址解析的国家或地区或者城市。 根据以下 ISO 标准,国家或地区必须包含国家或地区名称或者三字母国家或地区代码的逗号分隔列表。 单个国家或地区或者三字母国家或地区代码是允许的。

    城市必须包含城市名称的逗号分隔列表。 单个城市是允许的。

    geoLocation
    验证访问决策的位置。 缺省设置适用于前 5 个已验证的位置。 condition 属性取值为 (true) 或 disabledenabled (false)。
    trusteer
    IBM Security Trusteer 检测到用户首次访问新设备。
  • 这些属性包含以下特性:
    name
    属性的名称。
    values
    属性的值。
    opCode
    运算符。
  • 用于评估属性值的运算符:
    EQ
    所有值都存在。
    NEQ
    所有值都不存在。
    IN
    一个或多个值存在。
    MATCH
    用于匹配 IP 地址、范围或子网的 ipAddress 条件 opCode
    NOMATCH
    用于不匹配 IP 地址、范围或子网的 ipAddress 条件 opCode
  • 结果包含以下特性:
    Action
    指定满足条件时要触发的操作。 有效值为:
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - MFA 在访问策略评估期间规则每次都匹配。
    • ACTION_MFA_PER_SESSION - MFA 每个已认证会话执行一次并在已完成时允许。
    • ACTION_DENY。
    authnMethods
    当执行多因素认证 (MFA) 操作时,请指定允许的认证机制。urn:ibm:security:authentication:asf:macotp - 允许用户选择可以完成的任何机制,或以下一个或多个因素:
    • emailotp - 电子邮件一次性密码
    • smsotp - SMS 一次性密码
    • totp - 基于时间的一次性密码(认证器应用程序)
    • signatures - IBM® Verify 应用推送通知
    • passkey - 密钥验证器
    • voiceotp - 发送到用户的注册电话号码的口头一次性密码。
    • anyFactor – 是 urn:ibm:security:authentication:asf:macotp 的别名。 此机制常用于 factorLifetime 条件,表示由用户完成的任何有效认证机制。
因子生命周期

此条件使有效性与特定认证因子或方法关联。 有效性可以与用户概要文件关联,或与用户设备关联。

此功能可用于实现业务逻辑,例如:
  • 对于希望每个日历天对用户仅执行一次 MFA 的组织,您可以配置 18 小时周期的重新认证。
  • 对于希望每个业务周对用户执行一次 MFA 的组织,您可以每 6 天配置一次策略。
    注意: 当此 reauthPerDevice 选项启用时,系统会提示用户对“未知”设备进行多因素身份验证。 例如,用户从其他浏览器(是 Chrome,而不是 Edge),或者从其他物理设备进行认证。

    使用专用浏览方式后,在每个新会话中为第一次访问生成 MFA 质询。

注意: 包含此条件的规则必须是 “alwaysRun” 规则,且该规则中不得定义其他条件。
factorLifeTimeAttributes 包含以下必需属性:
name
有效的 authnMethodsanyFactor 属性的列表。
values
authnMethod 的有效性时间间隔(以秒计)。
opCode
EQ。
如果值为“已启用”,以下属性使 MFA 有效性与用户设备关联,如果值为“已禁用”,则与用户概要文件关联。
name
reauthPerDevice.
values
已启用或已禁用。
opCode
EQ。
上下文属性

上下文属性可以包括设备管理属性、OpenID Connect 属性和 HTTP 请求属性。

设备管理上下文属性
设备管理属性 devicePlatform 和 deviceplince 是在 contextAttributes 条件下定义的。
devicePlatform
操作系统和设备平台,例如 iOS, Android、 Mac OS X。允许的值包括 IOSANDROIDOTHER_MOBILEMACOSWINDOWSOTHER_DESKTOP。此条件需要订阅“设备管理”服务,请参阅“配置条件访问 ”。
deviceCompliance
设备的兼容级别。 NONCOMPLIANT允许的值为 COMPLIANT、 和 UNKNOWN。 此条件需要订阅“设备管理”服务,请参阅 《配置条件访问》
OpenID Connect 上下文属性
以下可用于 OpenID Connect 应用程序的大多数上下文属性为 OIDC 请求参数。 对于那些与请求参数名称不是一对一匹配的属性,提供了解释。 如需了解更多信息,请访问 https://openid.net/specs/openid-connect-core-1_0.html#AuthRequesthttps://tools.ietf.org/html/rfc7636#section-4.3
scope
此令牌接收的作用域的任意空格分隔的列表。 众所周知的作用域的示例为 emailaddressprofileopenid
response_type
以下一个或多个:codetokenid_token。 有关支持的值,请参阅 https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet
acr_values
将特定 ARC 连接到特征认证。
method
urn:ibm:security:policy:id:<policy-id>一个字符串列表,其中包含已执行的策略,格式为.
claims
复杂 JSON。
response_mode
字符串,query fragment form_post 之一。
response_method
指定从请求返回到 URI 的方法。
code_challenge_exist
PKCE 流中的布尔值选项,其指定是否在请求中设置 code_challenge
redirect_uri_scheme
重定向 URI 的方案组件,用于检测非浏览器用户代理程序和响应。
client_type
指定客户机是 public 还是 confidential 客户机。 机密客户机具有客户机密钥。
request_type
client_registrationrevokeuser_infointrospectaccess_tokenauthorizationuser_authorizedevice_authorize标识请求来源的端点,包括、、、、、、、、、或。
HTTP 请求上下文属性
可以在访问策略中评估 HTTP 请求头。 使用 HTTP 请求头名称作为 contextAttributes 中属性的名称,以及与入站头的值相对应的值。 当前不支持转换值,并且只能使用上下文属性的标准 opCodes。 例如,
"conditions": {
  "contextAttributes": {
    "attributes": [{
        "name": "referer",
        "values": [
          "https://<isv_tenant>/usc/",
          "https://<some_other_known_referrer>"
        ],
        "opCode": "IN"
      },
      {
        "name": "user-agent",
        "values": [
          "<specific_user_agent>"
        ],
        "opCode": "EQ"
      },
      {
        "name": "x-forwarded-for",
        "values": [
          "<x_forwarded_for_ip_address>"
        ],
        "opCode": "EQ"
      }
    ]
  }
 }
Cloud Directory 主题属性
以下主题属性可用于来自 Cloud Directory 身份源的用户。
displayName
所显示的用户的名字。
name
名字后跟姓氏。
family_name
用户的姓氏。
given_name
用户的名字。
email
用户的电子邮件。
emailAddress
用户的电子邮件。
groupIds
组标识。
preferred_username
可更改的用户名。
uuid
用户的唯一标识。
uniqueSecurityName
用户的唯一标识。
realmName
对于非联合 Cloud Directory 用户,此值始终为 cloudIdentityRealm
userType
对于非联合 Cloud Directory 用户,此值始终为 regular
timeAttributes

时间属性。

  • 这些属性包含以下特性:
    name
    属性的名称。 name 是一周的某一天,也可以选择 timeZonestartDateendDate。 它可以具有以下值:
    • 周一
    • 周二
    • 周三
    • 周四
    • 星期五
    • 星期六
    • 周日

    星期几时间范围由其 { ... "values": [ "hh:mm-hh:mm" ]} 中的范围启用,(可选)可以使用 startDateendDate 登台。

    timeZone
    与区域相关联的时区。 缺省值为全球标准时间 (UTC)。 值可以是以下任何格式。
    • UTC<+/-><offset> - 例如, UTC+10
    • GMT<+/-><offset> - 例如, GMT-5
    • 时区数据库名称 - 例如,Australia/Brisbane
    startDate
    条件处于活动状态时的开始日期和时间。 可以单独使用它来创建使用星期几属性登台的块时间匹配。 startDate 优先于星期几。 YYYY-MM-DD HH:mm:ss数值采用. 格式。 对于一周中的某些天,值的格式为 hh:mm-hh:mm
    endDate
    条件不再活动时的可选结束日期和时间。 可以单独使用它来创建与 startDate 匹配的块时间,或使用星期几属性登台。 在没有 endDate 的情况下,如果存在 startDate 或星期几,那么条件将无限匹配。 值的格式为 YYYY-MM-DD HH:mm:ss
ipAddress

支持 IPv4 和 IPv6 的基于 IP 地址的条件。

  • 条件包含以下特性:
    values
    条件的值。 有效值为 IP 地址范围,以逗号分隔的 IP 地址列表或 CIDR IP 地址。
    opCode
    运算符。 ipAddress 条件需要特定的 opCodes
    可用的运算符:
    MATCH
    所有值都存在。
    NOMATCH
    所有值都不存在。
location

从用户的 IP 地址解析的国家或地区或者城市。 根据以下 ISO 标准,国家或地区必须包含国家或地区名称或者三字母国家或地区代码的逗号分隔列表。 参见 ISO 3166-1 alpha-3。 单个国家或地区或者三字母国家或地区代码是允许的。 城市必须包含城市名称的逗号分隔列表。 单个城市是允许的。

  • 条件包含以下特性:
    已启用
    条件是启用 (true) 还是禁用 (false)。
    opCode
    运算符。 location 条件需要特定的 opCodes
    可用的运算符:
    IN
    一个或多个值存在。
    NOT IN
    所有值都不存在。
geoLocation

验证访问决策的位置。 缺省设置适用于前 5 个已验证的位置。

  • 条件包含以下特性:
    已启用
    条件是启用 (true) 还是禁用 (false)。
trusteer

IBM Security Trusteer 检测到用户首次访问新设备。

  • 条件包含以下特性:
    已启用
    条件是启用 (true) 还是禁用 (false)。

过程

  1. 获取访问令牌。
    使用具有 (管理访问策略) 权限的 manageAccessPolicies API 客户端来生成访问令牌。
    Request:
    
    curl https://<tenant-hostname>/oidc/endpoint/default/token 
    -d 'grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>'
    
    Response:
    
    {
      "access_token": <access_token>,
      "token_type": "Bearer",
      "expires_in": 7199
    }

    保存访问令牌以用于后续请求。

  2. 将访问策略作为请求主体的一部分发送。
    
    Request:
    
    curl -X POST \
      https://<tenant-hostname>/v5.0/policyvault/accesspolicy \
      -H 'Authorization: Bearer <access_token>' \
      -H 'Content-Type: application/json' \
      -d 
    '{
        "schemaVersion": "urn:access:policy:4.0:schema",
        "name": "policy_name",
        "description": "Description of the policy",
        "rules": [
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_ALLOW"
                    },
                    "authnMethods": []
                },
                "name": "allow_with_conditions",
                "id": "1",
                "alwaysRun": false,
                "conditions": {
                    "subjectAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "cloudIdentityRealm",
                                    "www.ibm.com"
                                ],
                                "name": "realmName",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "val1"
                                ],
                                "name": "customAttr1",
                                "opCode": "NEQ"
                            }
                        ]
                    },
                    "contextAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "COMPLIANT",
                                    "NONCOMPLIANT",
                                    "UNKNOWN"
                                ],
                                "name": "deviceCompliance",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "IOS",
                                    "ANDROID",
                                    "OTHER_MOBILE",
                                    "MACOS",
                                    "WINDOWS",
                                    "OTHER_DESKTOP"
                                ],
                                "name": "devicePlatform",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "value1",
                                    "value2"
                                ],
                                "name": "attrName",
                                "opCode": "EQ"
                            }
                        ]
                    }
                }
            },
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_MFA_PER_SESSION"
                    },
                    "authnMethods": [
                        "urn:ibm:security:authentication:asf:macotp"
                    ]
                },
                "name": "mfa_once_per_session",
                "id": "2",
                "alwaysRun": false,
                "conditions": {}
            },
         {	           
             "name": "Authentication factor validity",
             "id": "3",
             "conditions": {
             "factorLifetimeAttributes": {
                 "attributes": [
                 {
                     "name": "smsotp",
                     "opCode": "EQ",
                     "values": [
                        "120"
                      ]
                   }
                  ]
                }
           },
           "result": {
            "extendedAction": {
                "action": "ACTION_MFA_OVERRIDE"
             }
           }
             },
    
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_DENY"
                    },
                    "authnMethods": []
                },
                "name": "deny_otherwise",
                "id": "100",
                "alwaysRun": false,
                "conditions": {}
            }
        ]
    }'