Sun Java System Access Manager 7.1 管理指南

第 5 章 管理策略

本章介绍 Sun Java™ System Access Manager 的“策略管理”功能。Access Manager 的“策略管理”功能使顶级管理员或顶级策略管理员能够查看、创建、删除和修改可在所有领域中使用的特定服务的策略。 它还为领域管理员、子领域管理员或策略管理员提供了一种在领域级别查看、创建、删除和修改策略的方法。

本章包括以下内容:

概述

策略定义了若干规则,这些规则将指定对某一组织受保护资源的访问权限。企业拥有各种需要进行保护、管理和监视的资源、应用程序和服务。“策略”通过定义用户对给定的资源进行操作的时间和方式,从而控制对这些资源的访问权限和使用方式。策略定义了特定主体的资源。


注 –

主体可以是个人、公司、角色或组等具有某种身份的任何对象。 有关详细信息,参见 Java™ 2 Platform Standard Edition Javadoc


单个策略能定义二元或非二元决策。二元决策为//允许/拒绝。非二元决策代表某个属性的值。例如,邮件服务可能包含一个 mailboxQuota 属性,其中为每个用户都设置了最大存储值。通常说来,配置策略可以定义某主体在什么条件下可以对什么资源执行什么操作。

策略管理功能

“策略管理”功能提供了用于创建和管理策略的策略服务。策略服务允许管理员定义、修改、授予、撤消和删除权限,以保护 Access Manager 部署内部的资源。通常,策略服务包括一个数据存储库、一个允许创建、管理和评估策略的界面库以及一个策略执行程序或策略代理。默认情况下,Access Manager 使用 Sun Java Enterprise System Directory Server 进行数据存储,并提供用于策略评估和策略服务自定义的 Java 和 C API(有关详细信息,参见《Sun Java System Access Manager 7.1 Developer’s Guide》)。它也允许管理员将 Access Manager 控制台用于策略管理。Access Manager 提供了一种启用策略的服务 -“URL 策略代理”服务,该服务使用可下载策略代理执行策略。

URL 策略代理服务

安装时,Access Manager 会提供“URL 策略代理”服务来定义策略以保护 HTTP URL。 该服务允许管理员通过策略强制程序或策略代理来创建和管理策略。

策略代理

“策略代理”是存储企业资源的服务器的“策略强制点”(PEP)。策略代理独立于 Access Manager 而被安装在一个 Web 服务器上,当用户向位于受保护 Web 服务器上的 Web 资源发出请求时,此代理将起到附加授权步骤的作用。此授权是对资源执行的任何用户授权请求的补充。该代理可保护 Web 服务器,而资源反过来又会受到授权插件的保护。

例如,受远程安装的 Access Manager 保护的人力资源 Web 服务器上可能会安装某一代理。此代理可防止无适当策略的人员查看保密的工资信息或其他敏感数据。策略由 Access Manager 管理员定义,存储在 Access Manager 部署中,并由策略代理使用,以允许或拒绝用户对远程 Web 服务器内容的访问权。

最新的“Access Manager 策略代理”可以从“Sun Microsystems 下载中心”下载。

有关安装和管理策略代理的详细信息,参见《Sun Java System Access Manager Policy Agent 2.2 User’s Guide》


注 –

策略评估不会按特定顺序进行,尽管在对其进行评估时,如果一个操作值评估结果为 deny,也不再对后续策略进行评估,除非在“策略配置”服务中启用“拒绝决策时继续评估”属性。


Access Manager 策略代理仅在 Web URL(http://...https//...)上执行决策。但是,可以使用 Java 和 C Policy Evaluation API 编写代理,以在其他资源上强制执行策略。

此外,还需要将“策略配置服务”中的“资源比较器”属性由其默认配置更改为:

serviceType=Name_of_LDAPService |class=com.sun.identity.policy.plugins.SuffixResourceName|wildcard=*

|delimiter=,|caseSensitive=false

或者,提供类似于 LDAPResourceName 的实现以实现 com.sun.identity.policy.interfaces.ResourceName 并相应地配置“资源比较器”也可达到目的。

策略代理过程

当 Web 浏览器向驻留于策略代理所保护的服务器中的 URL 发出请求后,即开始受保护 Web 资源的过程。服务器中已安装的策略代理会截取请求并检查现有的验证凭证(会话令牌)。

如果代理已截取请求并验证了现有的会话令牌,随后将发生以下过程。

  1. 如果会话令牌有效,则允许或拒绝用户的访问。如果会话令牌无效,则用户将被重定向到“验证服务”,如下列各步骤所述。

    假设代理截取了某一请求,而对于该请求不存在任何现有会话令牌,则代理将用户重定向到登录页面,即使资源受不同验证方法保护也是如此。

  2. 正确验证用户凭证后,代理会向定义用于连接到 Access Manager 内部服务的 URL 的“命名服务”发布请求。

  3. 如果资源与在代理处配置的非执行列表匹配,则允许访问。

  4. “命名服务”返回策略服务、会话服务和日志记录服务的定位器。

  5. 代理将请求发送到“策略服务”以获取适用于用户的策略决策。

  6. 是允许用户访问还是拒绝用户访问,需根据当前访问资源的策略决策而定。如果对策略决策的建议指示出不同的验证级别或验证机制,代理会将请求重定向到“验证服务”,直到所有条件都经过验证为止。

策略类型

有两种类型的策略可以使用 Access Manager 进行配置:

常规策略

在 Access Manager 中,用于定义访问权限的策略被称为标准策略。常规策略由规则主题条件响应提供者组成。

规则

一条规则包含一种服务类型、一项或多项操作以及一个值。规则用于定义策略。


注 –

可以不使用某些服务的资源来定义操作。


主题

主题定义了策略所影响的用户或用户集合(例如,组或具有特定角色的用户)。主题的常规规则是:只有当用户至少是策略中的其中一个主题的成员时,才能够应用策略。默认主题包括:

Access Manager 身份主题

此主题表明可以将在“领域主题”选项卡下创建和管理的身份作为主题的成员添加。

验证的用户

此主题类型表明任何具有有效 SSO 令牌的用户都是此主题的成员。

所有通过验证的用户都是该“主题”的成员,即使他们已在其他领域(而不是定义策略所在的组织)中进行了验证。如果资源拥有者要开放一些资源(为其他组织的用户所管理的资源)的访问权时,这将非常有用。如果您要限制某个特定组织的成员对受保护资源的访问权,请使用“组织”主题。

Web 服务客户机

此主题类型表明如果 SSO 令牌中包含的主体的 DN 与此主题的任意选定值匹配,则由该 SSO 令牌标识的 Web 服务客户机 (WSC) 是此主题的成员。有效值为本地 JKS 密钥库中的可信赖证书(对应于可信赖 WSC 证书)的 DN。 此主题取决于“Liberty Web 服务框架”,并且只能由“Liberty 服务提供者”用来对 WSC 进行授权。

请确保将此“主题”添加到策略之前,您已经创建了密钥库。 您可以从以下位置找到有关于设置密钥库的信息:

AccessManager-base /SUNWam/samples/saml/xmlsig/keytool.html

通过在领域的“策略配置服务”中选择以下附加主题,便可对其进行使用:

Access Manager 角色

此主题类型表明任何使用 Access Manager 角色的成员都是此主题的成员。Access Manager 角色是使用运行于传统模式的 Access Manager 以及基于 6.3 的控制台创建的。这些角色所具有的对象类由 Access Manager 进行授权。Access Manager 角色只能通过所属的“Access Manager 策略服务”进行访问。

LDAP 组

此主题类型表明 LDAP 组的任何成员都是此主题的成员。

LDAP 角色

此主题类型表明任何使用 LDAP 角色的成员都是此主题的成员。“LDAP 角色”是使用 Directory Server 角色功能的任意角色定义。这些角色具有通过角色定义授权的对象类。可以在“策略配置服务”中修改“LDAP 角色搜索”过滤器以缩小范围并提高性能。

LDAP 用户

此主题类型表明任何 LDAP 用户都是此主题的成员。

组织

此主题类型表明领域的所有成员均为该主题的成员

Access Manager 角色与 LDAP 角色

Access Manager 角色是由 Access Manager 创建的。这些角色所具有的对象类由 Access Manager 进行授权。LDAP 角色是使用 Directory Server 角色功能的任意角色定义。这些角色具有通过角色定义授权的对象类。所有 Access Manager 角色均可被用作 Directory Server 角色。但是,Directory Server 角色并不一定都是 Access Manager 角色。可通过配置策略配置服务从现有目录利用 LDAP 角色。 Access Manager 角色只能通过所属的“Access Manager 策略服务”进行访问。可以在“策略配置服务”中修改“LDAP 角色搜索”过滤器以缩小范围并提高性能。

嵌套角色

嵌套角色可作为策略定义主题中的“LDAP 角色”正确评估。

条件

条件允许您定义对策略的限制。例如,为某个薪金应用程序定义策略时,可以为该操作定义一个条件,限定只能在特定的时间内访问该应用程序。另外,您还可以定义另一种条件,限定只有当请求是来自指定的一组 IP 地址或公司内部网时才允许执行该操作。

此外,条件还可以用于配置同一个域的不同 URI 上的不同策略。例如,http://org.example.com/hr/*jsp 只能通过 org.example.net 在 9 a.m. 到 5 p.m. 之间进行访问。同时使用“IP 条件”和“时间条件”便可实现上述目的。将规则资源指定为 http://org.example.com/hr/*.jsp,策略将应用到 http://org.example.com/hr 下的所有 JSP 文件,包括子目录中的 JSP 文件。


注 –

引用、规则、资源、主题、条件、操作和值等术语分别对应于 policy.dtd 中的 ReferralRuleResourceNameSubjectConditionAttributeValue 等元素。


可以添加的默认条件是:

活动会话时间

根据用户会话数据设置条件。您可以修改的字段包括:

最长会话时间

指定从发起会话起,策略可应用的最长持续时间。

终止会话

如果选择该字段,当会话时间超过“最长会话时间”字段中定义的最长允许时间时,系统将终止该用户会话。

验证链

如果用户已在指定领域中向验证链成功验证,则应用该策略。如果未指定领域,则向任何领域中的验证链进行验证均满足条件。

验证级别(大于或等于)

如果用户的验证级别大于或等于条件中设置的验证级别,则应用该策略。 该属性表明指定领域内的验证信任级别。

验证级别(小于或等于)

如果用户的验证级别低于或等于在条件中设置的验证级别,则应用该策略。该属性表明指定领域内的验证信任级别。

验证模块实例

如果用户已在指定领域内向验证模块成功进行验证,则应用该策略。如果未指定领域,则向任何领域中的验证模块进行验证均满足条件。

当前会话属性

根据用户的 Access Manager 会话中设置的属性值来决定策略是否适用于相应的请求。策略评估期间,仅当用户会话的每个属性值均符合条件中的定义时,条件才会返回 "true"。对于在条件中定义了多个值的属性,令牌只要具有条件的属性中列出的一个值就足够了。

IP 地址/DNS 名称

根据 IP 地址的范围设置条件。您可以定义的字段包括:

起始/结束 IP 地址

指定 IP 地址的范围。

DNS 名称

指定 DNS 的名称。此字段可以是全限定主机名,也可以是采用以下格式之一的字符串:

domainname

*.domainname

LDAP 过滤条件

当已定义的 LDAP 过滤器在 LDAP 目录(在“策略配置”服务中指定)中查找用户条目时,应用该策略。该条件仅在定义该策略的领域内适用。

领域验证

如果用户已向指定领域进行验证,则应用此策略。

时间(天、日期、时间和时区)

根据时间限制设置条件。这些字段包括:

起始/结束日期

指定日期的范围。

时间

指定一天中的时间范围。

指定表示天数的范围。

时区

指定一个标准的或自定义的时区。自定义的时区只能是可由 Java 识别的时区 ID(例如,PST)。如果未指定值,默认值为 Access Manager JVM 中设置的时区。

响应提供者

响应提供者是提供基于策略的响应属性的插件。响应提供者属性与策略决策一起发送到 PEP。Access Manager 包括一个实现,IDResponseProvider。该版本的 Access Manager 不支持自定义的响应提供者。 代理和 PEP 通常会将这些响应属性作为标题传递给应用程序。 应用程序通常会使用这些属性来自定义应用程序页面(如门户页面)。

策略建议

如果根据条件判定策略不适用,该条件可能会产生建议消息,指明策略不适用于请求的原因。这些建议消息在策略决策内传播到“策略强制点”。“策略强制点”可以检索此建议并采取适当的行动,例如将用户重定向回验证机制以进行更高级别的验证。 如果策略适用,系统在针对建议采取适当的操作后可能会提示用户进行更高级别的验证,用户或许可以访问资源。

可从以下类中找到更多信息:

com.sun.identity.policy.ConditionDecision.getAdvices()

如果条件不满足,则只有 AuthLevelCondiitonAuthSchemeCondition 提供建议。

AuthLevelCondition 建议与下列关键字相关:

com.sun.identity.policy.plugin.AuthLevelCondition.AUTH_LEVEL_CONDITION_ADVICE

AuthSchemeCondition 建议与下列关键字相关:

com.sun.identity.policy.plugin.AuthLevelCondition.AUTH_SCHEME_CONDITION_ADVICE

自定义的条件也可以提供建议。但是,“Access Manager 策略代理”只对“验证级别建议”和“验证模式建议”做出响应。 可以编写自定义的代理来理解和响应更多建议,也可以扩展现有的 Access Manager 代理来理解和响应更多建议。有关详细信息,参见《Sun Java System Access Manager Policy Agent 2.2 User’s Guide》

引用策略

管理员可能需要将一个领域的策略定义和决策委托给另一个领域。 (另外,还可以将资源的策略决策授权给其他策略产品)。引用策略控制着策略创建和评估的策略委托。该策略由一个或多个规则以及一个或多个引用组成。

“策略配置”服务包含称作“组织别名引用”的全局属性, 该属性允许用户在子领域中创建策略,而不必在顶层或父领域创建引用策略。用户只能创建用于保护 HTTP 或 HTTPS 资源的策略,这些资源的全限定主机名应与领域的领域/DNS 别名相匹配。默认情况下,该属性设置为“否”。

规则

规则定义策略定义和评估相关的资源。

引用

引用定义策略评估引用的组织。默认情况下,有两种引用类型:对等领域和子领域。它们分别代表同级领域和子级领域。有关详细信息,参见为对等领域和子领域创建策略


注 –

相关领域只能为那些已相关的资源(或子资源)定义或评估策略 。但是,该限制并不适用于顶层领域。


策略定义类型文档

一旦创建并配置了策略,它就会以 XML 形式存储于 Directory Server 中。在 Directory Server 中,XML 编码的数据存储在一个位置。尽管策略是使用 amAdmin.dtd(或控制台)进行定义和配置,但它实际上是作为基于 policy.dtd 的 XML 存储在 Directory Server 中。policy.dtd 包含从 amAdmin.dtd(无策略创建标记)中提取的策略元素标记。因此,“策略服务”从 Directory Server 加载策略时,它将根据 policy.dtd 分析 XML。只有在使用命令行创建策略时,才使用 amAdmin.dtd。本节介绍 policy.dtd 的结构。policy.dtd 存在于下列位置:

AccessManager-base/SUNWam/dtd (Solairs)
AccessManager-base/identity/dtd (Linux)
AccessManager-base/identity/dtd (HP-UX)
AccessManager-base\identity\dtd (Windows)

注 –

在本章中的余下部分将只给出 Solaris 目录信息。请注意,Linux、HP-UX 和 Windows 的目录结构不同。


Policy 元素

Policy 是根元素,它定义策略的权限或规则以及规则适用的对象或主题。它还定义策略是否是引用 (指派)策略以及是否对该策略存在限制(或 条件)。它可能包含一个或多个下列子元素: RuleConditionsSubjectsReferralsresponse providers。所需 XML 属性是 name,它指定策略的名称。属性 referralPolicy 指明策略是否为引用策略;如果未定义,则它默认为常规策略。可选 XML 属性包括 namedescription


注 –

将策略标记为 referral 时,在策略评估期间将忽略主题和条件。相反,将策略标记为 normal 时,在策略评估期间将忽略所有“引用项”。


Rule 元素

Rule 元素定义策略的具体内容,可能包含三个子元素: ServiceNameResourceNameAttributeValuePair。它定义已经为其创建策略的服务或应用程序的类型以及资源名称和对其执行的操作。定义规则时可不带任何操作;例如,引用策略就不含任何操作。


注 –

已定义的策略也可以不包括定义的 ResourceName 元素。


ServiceName 元素

ServiceName 元素定义策略所适用的服务名称。此元素表示服务类型。它不包含任何其他元素。其值与在服务的 XML 文件(基于 sms.dtd)中定义的完全一致。ServiceName 元素的 XML 服务属性是服务(取字符串的值)的名称。

ResourceName 元素

ResourceName 元素定义将要对其执行操作的对象。策略已经过专门配置以便保护此对象。它不包含任何其他元素。ResourceName 元素的 XML 属性是对象的名称。ResourceName 的示例可能是 Web 服务器上的 http://www.sunone.com:8080/images 或目录服务器上的 ldap://sunone.com:389/dc=example,dc=com。更具体的资源可为 salary://uid=jsmith,ou=people,dc=example,dc=com ,正在其上操作的对象为 John Smith 的工资信息。

AttributeValuePair 元素

AttributeValuePair 元素定义操作及其值。它被用作 Subject 元素Referral 元素Condition 元素的子元素。它包含 AttributeValue 元素但没有 XML 服务属性。

Attribute 元素

Attribute 元素定义操作的名称。操作是针对资源所执行的操作或事件。POST 或 GET 是对 Web 服务器资源执行的操作,READ 或 SEARCH 是对目录服务器资源执行的操作。Attribute 元素必须与 Value 元素组对。Attribute 元素本身不包含其他元素。Attribute 元素的 XML 服务属性是操作的名称。

Value 元素

Value 元素定义操作值。 allow/deny 或 yes/no 是操作值的示例。其他操作值可以是布尔值、数字或字符串。该值在服务的 XML 文件(基于 sms.dtd)中定义。Value 不包含其他元素,也不包含 XML 服务属性。


注 –

拒绝规则始终优先于允许规则。例如,如果一个策略拒绝访问而另一个策略允许访问,则结果将为拒绝(假定两个策略的所有其他条件都满足)。建议谨慎使用拒绝策略,因为它们会导致潜在的冲突。如果采用显式拒绝规则,则通过不同主题(如角色和/或组成员资格)指定给某一用户的策略可能导致拒绝的访问。通常,策略定义过程应只使用允许规则。当未应用其他任何策略时,才可使用默认拒绝。


Subjects 元素

Subjects 子元素确定策略所适用的主体集合;根据组中的成员资格、角色所有权或个别用户选择该集合。它接受 Subject 子元素。可以定义的 XML 属性有:

name。它定义集合的名称。

description。它定义主题的说明。

includeType。当前未使用此项。

Subject 元素

Subject 子元素确定策略所适用的主体集合;该集合可从 Subject 元素所定义的集合中准确找出更具体的对象。 成员资格可基于角色、组成员资格或仅仅基于个别用户的列表。它包含子元素AttributeValuePair 元素。所需 XML 属性是 type,它确定一个通用的对象集合,具体定义的主题从该集合中提取。其他 XML 属性包括定义集合名称的 nameincludeType,后者规定集合是否如定义的那样,用于确定策略是否用于“不”属于该主题成员的用户。


注 –

定义了多个主题时,要使策略得以应用,至少要有一个主题应该应用于用户。将 includeType 设置为 false 来定义主题时,用户不应为应用策略的主题成员。


Referrals 元素

Referrals 子元素确定策略引用项的集合。它接受 Referral 子元素。定义该因素时可以使用的 XML 属性有定义集合名称的 name 和包含说明的 description

Referral 元素

Referral 子元素确定特定的策略引用项。它接受子元素AttributeValuePair 元素。它必需的 XML 属性是 type,该属性确定一个通用的任务集合,具体定义的引用项从该集合中提取。它还可以包含定义集合名称的 name 属性。

Conditions 元素

Conditions 子元素标识策略限制(时间范围、验证级别等)集合。 它必须包含一个或多个 Condition 子元素。定义该因素时可以使用的 XML 属性有定义集合名称的 name 和包含说明的 description


注 –

Condition 元素是策略中的可选元素。


Condition 元素

Condition 子元素标识特定策略限制(时间范围、验证级别等)。它接受子元素AttributeValuePair 元素。它必需的 XML 属性是 type,该属性确定一个通用的限制集合,具体定义的条件从该集合中提取。它还可以包含定义集合名称的 name 属性。

添加已启用策略服务

只有当服务模式的 <Policy> 元素配置为 sms.dtd 时才可定义给定服务的资源策略。

默认情况下,Access Manager 会提供“URL 策略代理”服务 (iPlanetAMWebAgentService)。 此服务在位于以下目录的 XML 文件中定义:

/etc/opt/SUNWam/config/xml/

但是,您可以向 Access Manager 添加附加的策略服务。一旦创建了策略服务,就可以通过 amadmin 命令行实用程序把它添加到 Access Manager。

Procedure添加新的已启用策略服务

  1. 在基于 sms.dtd 的 XML 文件里开发新的策略服务。Access Manager 提供两个策略服务 XML 文件,用户可能希望将其用作新策略服务文件的基础:

    amWebAgent.xml - 这是默认“URL 策略代理”服务的 XML 文件。它位于 /etc/opt/SUNWam/config/xml/。

    SampleWebService.xml - 这是位于 AccessManager-base/samples/policy 的范例策略服务文件。

  2. 将该 XML 文件保存到您将从中加载新策略服务的目录。例如:


    /config/xml/newPolicyService.xml
  3. amadmin 命令行实用程序加载新策略服务。例如:


    AccessManager-base/SUNWam/bin/amadmin
        --runasdn “uid=amAdmin,ou=People,default_org,
    root_suffix
        --password password
        --schema /config/xml/newPolicyService.xml
  4. 加载新策略服务后,可通过 Access Manager 控制台或使用 amadmin 加载新策略来制定策略定义的规则。

创建策略

您可以通过“策略 API”和 Access Manager 控制台创建、修改和删除策略,并通过 amadmin 命令行工具创建和删除策略。 您也可以使用 amadmin 实用程序获取和列出 XML 格式的策略。 本节重点介绍如何通过 amadmin 命令行实用程序和 Access Manager 控制台创建策略。有关“策略 API”的详细信息,参见《Sun Java System Access Manager 7.1 Developer’s Guide》

策略通常使用 XML 文件创建,再通过命令行实用程序 amadmin 添加到 Access Manager,然后使用 Access Manager 控制台进行管理(尽管策略可通过控制台创建)。 这是因为不能直接使用 amadmin 修改策略。要修改策略,必须先从 Access Manager 中删除该策略,然后使用 amadmin 添加已修改的策略。

通常情况下,策略是在领域(或子领域)级别创建以在整个领域树中使用的。

Procedure使用 amadmin 创建策略

  1. 创建基于 amadmin.dtd 的策略 XML 文件。该文件位于以下目录中:

    AccessManager-base /SUNWam/dtd

    以下是策略 XML 文件的一个示例。该示例包含所有的默认主题和条件值。有关这些值的定义,参见策略类型

    <Policy name="bigpolicy" referralPolicy="false" active="true" >
    <Rule name="rule1">
    <ServiceName name="iPlanetAMWebAgentService" />
    <ResourceName name="http://thehost.thedomain.com:80/*.html" />
    <AttributeValuePair>
    <Attribute name="POST" />
    <Value>allow</Value>
    </AttributeValuePair>
    <AttributeValuePair>
    <Attribute name="GET" />
    <Value>allow</Value>
    </AttributeValuePair>
    </Rule>
    <Subjects name="subjects" description="desccription">
    <Subject name="webservicescleint" type="WebServicesClients" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/><Value>CN=sun-unix, 
    OU=SUN Java System Access Manager, O=Sun, C=US</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="amrole" type="IdentityServerRoles" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/><Value>
    cn=organization admin role,o=realm1,dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="au" type="AuthenticatedUsers" includeType="inclusive">
    </Subject>
    <Subject name="ldaporganization" type="Organization" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/>
    <Value>dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="ldapuser" type="LDAPUsers" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/>
    <Value>uid=amAdmin,ou=People,dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="ldaprole" type="LDAPRoles" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/>
    <Value>cn=Organization Admin Role,o=realm1,dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="ldapgroup" type="LDAPGroups" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/>
    <Value>cn=g1,ou=Groups,dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    <Subject name="amidentitysubject" type="AMIdentitySubject" includeType="inclusive">
    <AttributeValuePair><Attribute name="Values"/>
    <Value>id=amAdmin,ou=user,dc=red,dc=iplanet,dc=com</Value>
    </AttributeValuePair>
    </Subject>
    </Subjects>
    <Conditions name="conditions" description="description">
    <Condition name="ldapfilter" type="LDAPFilterCondition">
    <AttributeValuePair><Attribute name="ldapFilter"/>
    <Value>dept=finance</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authlevelge-nonrealmqualified" type="AuthLevelCondition">
    <AttributeValuePair><Attribute name="AuthLevel"/>
    <Value>1</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authlevelle-realmqaulfied" type="LEAuthLevelCondition">
    <AttributeValuePair><Attribute name="AuthLevel"/>
    <Value>/:2</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="sessionproperties" type="SessionPropertyCondition">
    <AttributeValuePair><Attribute name="valueCaseInsensitive"/>
    <Value>true</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="a"/><Value>10</Value>
    <Value>20</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="b"/><Value>15</Value>
    <Value>25</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="activesessiontime" type="SessionCondition">
    <AttributeValuePair><Attribute name="TerminateSession"/>
    <Value>session_condition_false_value</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="MaxSessionTime"/>
    <Value>30</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authelevelle-nonrealmqualfied" 
               type="LEAuthLevelCondition">
    <AttributeValuePair><Attribute name="AuthLevel"/>
    <Value>2</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="ipcondition" type="IPCondition">
    <AttributeValuePair><Attribute name="DnsName"/>
    <Value>*.iplanet.com</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="EndIp"/>
    <Value>145.15.15.15</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="StartIp"/>
    <Value>120.10.10.10</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authchain-realmqualfied"
              type="AuthenticateToServiceCondition">
    <AttributeValuePair><Attribute name="AuthenticateToService"/>
    <Value>/:ldapService</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="auth to realm" 
          type="AuthenticateToRealmCondition">
    <AttributeValuePair><Attribute name="AuthenticateToRealm"/>
    <Value>/</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authlevelge-realmqualified"
          type="AuthLevelCondition">
    <AttributeValuePair><Attribute name="AuthLevel"/>
    <Value>/:2</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="authchain-nonrealmqualfied" 
         type="AuthenticateToServiceCondition">
    <AttributeValuePair><Attribute name="AuthenticateToService"/>
    <Value>ldapService</Value>
    </AttributeValuePair>
    </Condition>
    <Condition name="timecondition" type="SimpleTimeCondition">
    <AttributeValuePair><Attribute name="EndTime"/>
    <Value>17:00</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="StartTime"/>
    <Value>08:00</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="EndDate"/>
    <Value>2006:07:28</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="EnforcementTimeZone"/>
    <Value>America/Los_Angeles</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="StartDay"/>
    <Value>mon</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="StartDate"/>
    <Value>2006:01:02</Value>
    </AttributeValuePair>
    <AttributeValuePair><Attribute name="EndDay"/>
    <Value>fri</Value>
    </AttributeValuePair>
    </Condition>
    </Conditions>
    <ResponseProviders name="responseproviders"
           description="description">
    <ResponseProvider name="idresponseprovidere" 
         type="IDRepoResponseProvider">
    <AttributeValuePair>
    <Attribute name="DynamicAttribute"/>
    </AttributeValuePair>
    <AttributeValuePair>
    <Attribute name="StaticAttribute"/>
    <Value>m=10</Value>
    <Value>n=30</Value>
    </AttributeValuePair>
    </ResponseProvider>
    </ResponseProviders>
    </Policy>
  2. 策略 XML 文件生成之后,便可使用以下命令加载它:


    AccessManager-base/SUNWam/bin/amadmin
    --runasdn "uid=amAdmin,ou=People,default_org,
    root_suffix"
    --password password
    --data policy.xml
    

    要同时添加多个策略,请将这些策略放在一个 XML 文件中,而不是在每个 XML 文件中放一个策略。如果一连串使用多个 XML 文件装入策略,则可能会损坏内部策略索引,并且某些策略可能不会参与策略评估。

    通过 amadmin 创建策略时,确保在创建验证方案条件时验证模块已在领域中注册;创建领域、LDAP 组、LDAP 角色和 LDAP 用户主题时存在相应的 LDAP 对象领域、组、角色和用户;创建 IdentityServerRoles 主题时存在 Access Manager 角色;以及创建子领域或对等领域引用项时存在相关领域。

    请注意,SubrealmReferralPeerRealmReferralRealm 主题、IdentityServerRoles 主题、LDAPGroups 主题 LDAPRoles 主题和 LDAPUsers 主题中的值元素的文本中需要完整 DN。

Procedure使用 Access Manager 控制台创建常规策略

  1. 选择要为其创建策略的领域。

  2. 单击“策略”选项卡。

  3. 在“策略”列表中单击“新建策略”。

  4. 为策略添加名称和说明。

  5. 如果您希望激活此策略,请在“活动”属性里选中“是”。

  6. 此时,您不必为常规策略定义所有字段。您可以在创建策略之后再添加规则、主题、条件和响应提供者等内容。有关详细信息,参见管理策略

  7. 单击 “确定” 。

Procedure使用 Access Manager 控制台创建引用策略

  1. 选择要为其创建策略的领域。

  2. 在“策略”选项卡中单击“新建引用”。

  3. 为策略添加名称和说明。

  4. 如果您希望激活此策略,请在“活动”属性里选中“是”。

  5. 此时,不必为引用策略定义所有字段。您可以在创建策略之后再添加规则、引用等内容。有关详细信息,参见管理策略

  6. 单击 “确定” 。

为对等领域和子领域创建策略

要为对等领域或子领域创建策略,必须首先在父领域(或其他对等领域)中创建引用策略。 引用策略的规则定义中必须包含子领域所管理的资源前缀。 一旦在父领域(或其他对等领域)中创建了引用策略,便可在子领域(或对等领域)创建常规策略。

在本示例中,o=isp 是父领域,o=example.com 是管理 http://www.example.com 的资源和子资源的子领域。

Procedure为子领域创建策略

  1. o=isp 中创建引用策略。有关引用策略的信息,参见修改引用策略过程。

    引用策略必须将 http://www.example.com 定义为规则中的资源,并且必须包含一个以 example.com 作为引用中的值的 SubRealmReferral

  2. 找到子领域 example.com

  3. 既然资源是通过 isp 引用 example.com,就可以为资源 http://www.example.com,或任何以 http://www.example.com 开头的资源创建常规策略。

    要为 example.com 所管理的其他资源定义策略,必须在 o=isp 上创建其他引用策略。

将策略导出到其他 Access Manager 实例

Access Manager 允许使用 amadmin 命令行工具来导出策略。这在您希望将多个现有策略移动到另一个 Access Manager 实例或者您希望检查以批量模式对现有策略所做的更改时非常有用。要导出策略,使用 amadmin 命令行实用程序将指定策略导出到文件。语法为:

amamdin - u username —w password —ofilename output_file.xml —t policy_data_file.xml

可以在策略名称中使用通配符 (*) 来匹配任意字符串。

以下是 policy_data_file.xml 的一个示例:


<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
    Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved
    Use is subject to license terms.
-->

<!DOCTYPE Requests
    PUBLIC "-//iPlanet//Sun Java System Access Manager 6.2 Admin CLI DTD//EN"
    "/opt/SUNWam/dtd/amAdmin.dtd"
>>

<!--  CREATE REQUESTS -->

<!-- to export to file use option -ofilename fileName -->

<Requests>    

<RealmRequests >    
<RealmGetPolicies realm="/" >
<AttributeValuePair>
<Attribute name="policyName"/>
<Value>p*</Value>
</AttributeValuePair>
</RealmGetPolicies>
</RealmRequests>

<RealmRequests >    
<RealmGetPolicies realm="/" >
<AttributeValuePair>
<Attribute name="policyName"/>
<Value>g10</Value>
<Value>g11</Value>
</AttributeValuePair>
</RealmGetPolicies>

</RealmRequests>
<RealmRequests >    
<RealmGetPolicies realm="/realm1" >
<AttributeValuePair>
<Attribute name="policyName"/>
<Value>*</Value>
</AttributeValuePair>
</RealmGetPolicies>
</RealmRequests>

</Requests>

策略将导出到 Output_file.xml 文件。现在可以对包含在文件中的策略定义做出任何修改。在将策略导入到另一个 Access Manager 实例中之前,必须更改输出文件,使它与 amadmin 命令实用程序兼容。有关如何导入策略的说明,包括与 amadmin 兼容的策略数据文件的示例,参见使用 amadmin 创建策略

管理策略

一旦创建了标准或引用策略并将其添加到 Access Manager,您就可以使用 Access Manager 控制台通过修改规则、主题、条件和引用项来管理策略。

修改常规策略

通过“策略”选项卡,可以修改定义访问权限的常规策略。 您可以定义和配置多个规则、主题、条件和资源比较器。 本节列出并介绍相关操作步骤。

Procedure在常规策略中添加或修改规则

  1. 如果已创建了策略,请单击要为其添加规则的策略的名称。否则,参见使用 Access Manager 控制台创建常规策略

  2. 在“规则”菜单中单击“新建”。

  3. 请为规则选择以下任一默认服务类型。如果策略可用的服务较多时,您看到的列表可能会比较长:

    搜索服务

    为搜索服务查询定义授权操作,并通过指定资源的 Web 服务客户机修改调用的协议。

    Liberty 个人配置文件服务

    为 Liberty 个人配置文件服务查询定义授权操作,并通过指定资源的 Web 服务客户机修改调用的协议。

    URL 策略代理

    定义 URL 策略代理服务的授权操作。它用于定义保护 HTTP 和 HTTPS URL 的策略。这是 Access Manager 策略最常见的用途。

  4. 单击“下一步”。

  5. 请输入规则的名称及其资源名称。

    目前,Access Manager 策略代理只支持 http:// https:// 资源,而不支持使用 IP 地址代替主机名。

    协议、主机、端口和资源名称都支持通配符。例如:


    http*://*:*/*.html

    对于“URL 策略代理”服务,如果未输入端口号,则 http:// 的默认端口号是 80,https:// 的默认端口号是 443。

  6. 为规则选择操作。根据服务类型,可选择以下选项:

    • 查找(搜索服务)

    • 更新(搜索服务)

    • 修改(Liberty 个人配置文件服务)

    • 查询(Liberty 个人配置文件服务)

    • GET(URL 策略代理)

    • POST(URL 策略代理)

  7. 选择操作值。

    • 同意交互式操作 — 为了得到同意而对资源调用 Liberty 交互式操作协议。仅适用于 Liberty 个人配置文件服务类型。

    • 交互式操作值 — 为了获得某个值而对资源调用 Liberty 交互式操作协议。仅适用于 Liberty 个人配置文件服务类型。

    • 允许 — 允许您访问与规则中定义的资源相匹配的资源。

    • 拒绝 — 拒绝您访问与规则中定义的资源相匹配的资源。

      在策略中,拒绝规则始终比允许规则具有优先权。例如,如果某种给定的资源存在两个策略,一个拒绝访问而另一个允许访问,结果为拒绝访问(假定两个策略的条件都满足)。建议谨慎使用拒绝策略,因为它们会导致策略间的潜在冲突。通常来说,在定义策略的过程中,应只使用允许规则,在没有策略适用于实现拒绝条件时使用默认的拒绝规则。

      当采用了显示拒绝规则时,即使一个或多个策略允许访问,通过多个不同主题(如角色和/或组成员资格)指定给给定用户的策略可能仍然会导致拒绝访问资源。例如,如果应用于“员工”角色的资源的策略为拒绝策略,而应用于“经理”角色的同一资源的策略为允许策略,则被分配了“员工”和“经理”两个角色的用户的策略决策将为拒绝。

      解决此问题的一个方法是使用条件插件来设计策略。在上述情况下,将拒绝策略应用于通过“员工”角色验证的用户并将允许策略应用于通过“经理”角色验证的用户的“角色条件”可以帮助区分两种策略。 另一个方法是使用 authentication level 条件,其中“经理”角色在更高验证级别进行验证。

  8. 单击“完成”。

Procedure在常规策略中添加或修改主题

  1. 如果已创建了策略,请单击要为其添加主题的策略的名称。如果尚未创建策略,参见使用 Access Manager 控制台创建常规策略

  2. 在“主题”列表中单击“新建”。

  3. 选择以下任一默认主题类型。有关主题类型的说明,参见主题

  4. 单击“下一步”。

  5. 输入主题的名称。

  6. 选择或取消选择“排除”字段。

    如果未选择该字段(默认),策略将应用到属于该主题的成员的身份。如果选择该字段,策略将应用到属于该主题的成员的身份。

    如果该策略中存在多个主题,至少要有一个主题表明该策略适用于给定的身份,策略才能应用到该身份。

  7. 执行搜索以显示要添加到主题的身份。此步骤不适用于“验证的用户”主题或“Web 服务客户机”主题。

    默认 (*) 搜索模式将显示所有符合条件的条目。

  8. 选择要为主题添加的各个身份,或单击“全部添加”一次添加所有身份。单击“添加”将这些身份移至“选定”列表中。 此步骤不适用于“已验证用户”主题。

  9. 单击“完成”。

  10. 要从策略中删除主题,请选择相应主题并单击“删除”。您可以通过单击主题名称来编辑任何主题定义。

Procedure向常规策略添加条件

  1. 如果已创建了策略,请单击要为其添加条件的策略的名称。如果尚未创建策略,参见使用 Access Manager 控制台创建常规策略

  2. 在“条件”列表中单击“新建”。

  3. 选择条件类型,然后单击“下一步”。

  4. 定义条件类型字段。

  5. 单击“完成”。

Procedure向常规策略添加响应提供者

  1. 如果已创建了策略,请单击要为其添加响应提供者的策略的名称。如果尚未创建策略,参见使用 Access Manager 控制台创建常规策略

  2. 在“响应提供者”列表中单击“新建”。

  3. 请输入响应提供者的名称。

  4. 定义以下值:

    StaticAttribute

    这是属性值格式的静态属性,在存储于策略中的 IDResponseProvider 实例中进行定义。

    DynamicAttribute

    应首先在相应领域的“策略配置服务”中定义此处所选择的响应属性。所定义的属性名称应为已配置数据存储库 (IDRepository) 中现有属性名称的子集。有关如何定义属性的详细信息,参见“策略配置”属性定义。要选择特定属性或多个属性,请按住 "Ctrl" 键并单击鼠标左键。

  5. 单击“完成”。

  6. 要从策略中删除响应提供者,请选择相应主题,然后单击“删除”。您可以通过单击响应提供者名称来编辑任何响应提供者的定义。

修改引用策略

可将领域的策略定义和决策委托给使用引用策略的不同领域。 自定义引用项可用于从任意策略目标点获取策略决策。 一旦创建了引用策略,便可添加或修改相关的规则、引用项和资源提供者。

Procedure在引用策略中添加或修改规则

  1. 如果已创建了策略,请单击要为其添加规则的策略的名称。否则,参见使用 Access Manager 控制台创建引用策略

  2. 在“规则”菜单中单击“新建”。

  3. 请为规则选择以下任一默认服务类型。如果策略可用的服务较多时,您看到的列表可能会比较长:

    搜索服务

    为搜索服务查询定义授权操作,并通过指定资源的 Web 服务客户机修改调用的协议。

    Liberty 个人配置文件服务

    为 Liberty 个人配置文件服务查询定义授权操作,并通过指定资源的 Web 服务客户机修改调用的协议。

    URL 策略代理

    定义 URL 策略代理服务的授权操作。它用于定义保护 HTTP 和 HTTPS URL 的策略。这是 Access Manager 策略最常见的用途。

  4. 单击“下一步”。

  5. 请输入规则的名称及其资源名称。

    目前,Access Manager 策略代理只支持 http:// https:// 资源,而不支持使用 IP 地址代替主机名。

    协议、主机、端口和资源名称都支持通配符。例如:


    http*://*:*/*.html

    对于“URL 策略代理”服务,如果未输入端口号,则 http:// 的默认端口号是 80,https:// 的默认端口号是 443。


    注 –

    步骤 6 和 7 对引用策略不适用。


  6. 单击“完成”。

Procedure在策略中添加或修改引用项

  1. 如果已经创建了策略,请单击要为其添加响应提供者的策略的名称。如果尚未创建策略,参见使用 Access Manager 控制台创建引用策略

  2. 在“引用”列表中,单击“新建”。

  3. 在“规则”字段中定义资源。这些字段包括:

    引用— 显示当前引用类型。

    名称— 输入引用的名称。

    资源名称— 输入资源的名称。

    过滤器—为将在“值”字段中显示的领域名称指定过滤器。默认情况下,该字段将显示所有领域名称。

    —选择引用的领域名称。

  4. 单击“完成”。

    要从策略中移除引用,请选择该引用,然后单击“删除”。

    您可以通过单击引用名称旁边的“编辑”链接来编辑任何引用定义。

Procedure向引用策略添加响应提供者

  1. 如果已创建了策略,请单击要为其添加响应提供者的策略的名称。如果尚未创建策略,参见使用 Access Manager 控制台创建引用策略

  2. 在“响应提供者”列表中单击“新建”。

  3. 请输入响应提供者的名称。

  4. 定义以下值:

    StaticAttribute

    这是属性值格式的静态属性,在存储于策略中的 IDResponseProvider 实例中进行定义。

    DynamicAttribute

    应首先在相应领域的“策略配置服务”中定义此处所选择的响应属性。所定义的属性名称应为已配置数据存储库 (IDRepository) 中现有属性名称的子集。有关如何定义属性的详细信息,参见“策略配置”属性定义。要选择特定属性或多个属性,请按住 "Ctrl" 键并单击鼠标左键。

  5. 单击“完成”。

  6. 要从策略中删除响应提供者,请选择相应主题,然后单击“删除”。您可以通过单击响应提供者名称来编辑任何响应提供者的定义。

策略配置服务

“策略配置”服务用于通过 Access Manager 控制台为每个组织配置与策略相关的属性。 也可以定义资源名称实现和与 Access Manager 策略框架一同使用的 Directory Server 数据存储库。 在“策略配置服务”中指定的 Directory Server 用于 LDAP 用户、LDAP 组、LDAP 角色以及组织策略主题的成员资格评估。

主题结果的生存时间

为了提高策略评估的性能,成员资格评估将被缓存一段时间,具体时间长短如“策略配置”服务中的“主题结果的生存时间”属性定义。 在达到“主题结果的生存时间”属性中所定义的时间之前,将持续使用这些缓存的成员资格决策。在此之后的成员资格评估用于反映目录中用户的当前状态。

动态属性

这些是所允许的动态属性名称,它们显示在列表中,并且可通过选择它们来定义策略响应提供者的动态属性。所定义的名称需与数据系统信息库中定义的属性名称相同。

amldapuser 定义

amldapuser 是默认情况下安装“策略配置”服务中指定的 Directory Server 期间创建的用户。 如有必要,管理员或领域的策略管理员可以对其进行更改。

添加策略配置服务

创建领域时,将为领域自动设置“策略配置”服务属性。 但是,必要时也可修改属性。

基于资源的验证

某些组织需要高级验证方案,其中用户将根据他们尝试要访问的资源用特定模块进行验证。基于资源的验证是 Access Manager 的一项功能,该功能要求用户必须通过用于保护资源的特定验证模块而非默认验证模块进行验证。 此功能仅适用于首次用户验证。


注 –

该功能与会话升级中所描述的基于资源的验证不同。后者不具有任何限制。


限制

基于资源的验证包含以下限制:

Procedure配置基于资源的验证

一旦安装了 Access Manager 和策略代理,便可对基于资源的验证进行配置。 要执行此操作,需要将 Access Manager 指向网关 servlet。

  1. 打开 AMAgent.properties

    AMAgent.properties 可在 /etc/opt/SUNWam/agents/config/ 中找到(在 Solaris 环境中)。

  2. 注释掉以下行:

    #com.sun.am.policy.am.loginURL = http://Access Manager_server_host.domain_name:port/amserver/UI/Login

  3. 将以下行添加到 文件:

    com.sun.am.policy.am.loginURL = http://AccessManager_host.domain_name:port/amserver/gateway


    注 –

    网关 servlet 是使用“策略评估 API”开发的,可使用它来编写用于完成基于资源的验证的自定义机制。参见 Access Manager 开发者指南中《Sun Java System Access Manager 7.1 Developer’s Guide》一书中的《Sun Java System Access Manager 7.1 Developer’s Guide》中的第 3  章 “Using the Policy APIs”


  4. 重新启动代理。