Sun Java System Access Manager 7.1 管理指南

创建策略

您可以通过“策略 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 创建策略