PicketLinkのXACMLコンポーネントは、前述のOASISで規定されているXACMLのバージョン2を実装しています。今回は、XACMLのポリシーファイルの設定方法を説明します。なお、サンプルを用いたPicketLinkのXACMLコンポーネントの説明は省きます。
XACMLとは、インターネットを通じた情報アクセスに関する制御ポリシーを記述するための言語使用です。
例として、図9のサンプルでXACMLについて簡単に説明します。図9は、「ログイン画面に対しては、JBossAdmin権限がないとアクセス(read、write)できない」というアクセスコントロールを表しています。そのため、Manager権限であるBさんは、ログイン画面を参照できません。このようなアクセスコントロールをXACMLでは、「Policy」として定義します。
Policy内では、どのように設定すればいいのでしょうか。以下の図10では、Policyを設定する際に基本的に必要な、PolicyとRule、Target、Conditionの概要を示しています。
以上が、XACMLについての概略です。より詳しくXACMLについて知りたい方は、OASISのページを参照してみてください。
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>
このように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コンサル業よりも、業務システムの構築に携わることが多く、お客さまからの無理難題と向き合う日々を送っている。
Copyright © ITmedia, Inc. All Rights Reserved.