社内システムのセキュリティとアクセス制御の常識企業システムの常識をJBossで身につける(9)(4/4 ページ)

» 2010年06月04日 00時00分 公開
[原田壮士, 多田丈晃, 上川伸彦株式会社ビーブレイクシステムズ]
前のページへ 1|2|3|4       

PicketLinkのXACMLコンポーネント

 PicketLinkのXACMLコンポーネントは、前述のOASISで規定されているXACMLのバージョン2を実装しています。今回は、XACMLのポリシーファイルの設定方法を説明します。なお、サンプルを用いたPicketLinkのXACMLコンポーネントの説明は省きます。

XACMLとは

 XACMLとは、インターネットを通じた情報アクセスに関する制御ポリシーを記述するための言語使用です。

 例として、図9のサンプルでXACMLについて簡単に説明します。図9は、「ログイン画面に対しては、JBossAdmin権限がないとアクセス(read、write)できない」というアクセスコントロールを表しています。そのため、Manager権限であるBさんは、ログイン画面を参照できません。このようなアクセスコントロールをXACMLでは、「Policy」として定義します。

図9  PicketLinkのXACMLコンポーネントでのポリシー設定例明示図 図9  PicketLinkのXACMLコンポーネントでのポリシー設定例明示図

 Policy内では、どのように設定すればいいのでしょうか。以下の図10では、Policyを設定する際に基本的に必要な、PolicyとRule、Target、Conditionの概要を示しています。

図10 ポリシーの設定イメージ 図10 ポリシーの設定イメージ

 以上が、XACMLについての概略です。より詳しくXACMLについて知りたい方は、OASISのページを参照してみてください。

XACMLのポリシーファイルの設定方法

 XACMLのポリシーファイルの書き方ついて、再度図9のサンプルを用いて説明します。上記の図9では、AさんにはJBossAdminの権限をBさんにはManagerの権限を事前に与える必要があります。

 XACMLのポリシーファイルでログイン画面に対して、以下の表の設定を行っていると考えてください。

<Target>対象 login.seam
<Rule>ルール read
write
<Condition>条件 JBossAdmin権限
表3 JBoss XACMLのPolicyの設定

 上記の表3は、Policyの設定としてログイン画面に対してreadやwriteを行うためには、JBossAdmin(JBossのデフォルト権限)の権限を持たなければならないということを意味しています。

 実際のXACMLのポリシーファイル内では、どのように設定できるのでしょうか。図9のアクセス制御の内容をXACMLとして設定した例が、コード6です。

<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os"
 RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides" Version="2.0" PolicyId="SamplePolicy">
<!-- ↑【1】RuleCombiningAlgIdで全体のルールのアルゴリズムとして、【2】以下で設定するルールのどれか1つでも当てはまればルールを許可するということを設定。【2】VersionとPolicyIdでバージョンとポリシーを識別するためのIDを設定 -->
 
  <Target>
    <Resources>
      <Resource>
        <ResourceMatch
          MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal"> 
          <AttributeValue
            DataType= "http://www.w3.org/2001/XMLSchema#anyURI">/login.seam</AttributeValue>
<!-- ↑【3】アクセスコントロールの対象画面を設定 -->
 
          <ResourceAttributeDesignator
            DataType= http://www.w3.org/2001/XMLSchema#anyURI 
            AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"/>
        </ResourceMatch>
      </Resource>
    </Resources>
  </Target>
  <Rule Effect="Permit" RuleId="SampleRule">
<!-- ↑【4】ルールを分岐するための設定と、1つのルールを識別するためのIDを設定(ここでは、Permit(許可)を設定している。このほかのルールの分岐設定に関しては【8】を参照) -->
 
    <Target>
      <Actions>
        <Action>
          <ActionMatch
            MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
            <AttributeValue
              DataType= "http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
<!-- ↑【5】アクセスコントロールで許可されるActionを設定(今回はreadを設定) -->
 
            <ActionAttributeDesignator
              DataType="http://www.w3.org/2001/XMLSchema#string"
              AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"/>
          </ActionMatch>
        </Action>
        <Action>
          <ActionMatch
            MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue
              DataType="http://www.w3.org/2001/XMLSchema#string">write</AttributeValue>
<!-- ↑【6】アクセスコントロールで許可されるActionを設定(今回はwriteを設定) -->
            <ActionAttributeDesignator
              DataType="http://www.w3.org/2001/XMLSchema#string"
              AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"/>
          </ActionMatch>
        </Action>
      </Actions>
    </Target>
    <Condition>
      <Apply  FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
        <AttributeValue
          DataType= "http://www.w3.org/2001/XMLSchema#string">JBossAdmin</AttributeValue>
<!-- ↑【7】上記で設定したルールを分岐するための条件を設定(今回は条件として、JBossAdmin権限を設定)
 
       <SubjectAttributeDesignator
          DataType="http://www.w3.org/2001/XMLSchema#string" 
          AttributeId="urn:oasis:names:tc:xacml:2.0:subject:role" /> 
      </Apply>
    </Condition>
  </Rule>
<!-- どのルールにも当てはまらなければ、Denyが適用される -->
  <Rule Effect="Deny" RuleId="DenyRule"/>
<!-- ↑【8】上記設定のアクセス許可ルールに当てはまらなかったときに実行される、ルールの分岐を設定(今回はルールとして、Deny(拒否)を設定) -->
</Policy>
コード6 sample-xacml-policy.xml

 このようにXACMLでは、細かいアクセスコントロールの設定を規定できます。「PicketLinkのXACMLコンポーネントは、その規定通りにアプリケーションを動作できる」というわけです。

 今回紹介した認証系のアクセスコントロール(JBossではPicketLinkのIDMコンポーネント)と、細かい制御設定を規定できるアクセスコントロール(JBossでは、PicketLinkのXACMLコンポーネント)を組み合わせることで、社内システムに必要なレベルのアクセスコントロールを実現可能です。

既存の資産を利用したシステムの開発も可能

 今回は「セキュリティとアクセス制御の常識」という題してJBossの持つセキュリティ機能について説明しました。セキュリティの重要な要素として「内部の脅威」があり、その対策として、JBossでもアクセスコントロールの仕組みを用意していることを理解できたかと思います。

 社内システムの中には、認証や権限の管理をアプリケーションの機能として自前で実装しているところもあるかと思います。JBossのセキュリティ機能のように、すでにある仕組みを利用することで内部的なセキュリティを強化できるとともに、工数も削減できます。

 今回は解説の対象にしませんでしたが、認証のためのユーザーやグループ、権限といった情報をLDAPやActiveDirectry、RDBから取得する手段も用意されていますので、既存の資産を利用したシステムの開発も可能です。

筆者紹介

2009年より、株式会社ビーブレイクシステムズに在籍

原田 壮士(はらだ そうし)

就職活動時にビーブレイクシステムズの説明会でJavaの世界に感銘を受け、入社を決意する。最近ようやく社会人としての生活にも慣れ、仕事面でもJavaやWebアプリケーションへの理解が深まってきた。

しばらくすると、次の新入社員が入ってくるため、先輩風を吹かせる練習中


筆者紹介

2008年より、株式会社ビーブレイクシステムズに在籍

多田 丈晃(ただ たけあき)

システム開発の様々な工程を経験し、果ては新人研修まで担当したが、さらなる高みを目指してJavaとOSSに強いビーブレイクシステムズの門をたたく。

同僚の知識量と能力の高さに驚きつつ、日々研鑽を続けている。


筆者紹介

株式会社ビーブレイクシステムズ技術担当取締役

上川 伸彦(かみかわ のぶひこ)

RDB製品の開発、各種業界団体におけるXML/EDI標準の策定やSOA基盤の設計などに従事。最近は、ITコンサル業よりも、業務システムの構築に携わることが多く、お客さまからの無理難題と向き合う日々を送っている。



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。