社内システムのセキュリティとアクセス制御の常識:企業システムの常識をJBossで身につける(9)(4/4 ページ)
企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
PicketLinkのXACMLコンポーネント
PicketLinkのXACMLコンポーネントは、前述のOASISで規定されているXACMLのバージョン2を実装しています。今回は、XACMLのポリシーファイルの設定方法を説明します。なお、サンプルを用いたPicketLinkのXACMLコンポーネントの説明は省きます。
XACMLとは
XACMLとは、インターネットを通じた情報アクセスに関する制御ポリシーを記述するための言語使用です。
例として、図9のサンプルでXACMLについて簡単に説明します。図9は、「ログイン画面に対しては、JBossAdmin権限がないとアクセス(read、write)できない」というアクセスコントロールを表しています。そのため、Manager権限であるBさんは、ログイン画面を参照できません。このようなアクセスコントロールをXACMLでは、「Policy」として定義します。
Policy内では、どのように設定すればいいのでしょうか。以下の図10では、Policyを設定する際に基本的に必要な、PolicyとRule、Target、Conditionの概要を示しています。
以上が、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>
このように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コンサル業よりも、業務システムの構築に携わることが多く、お客さまからの無理難題と向き合う日々を送っている。
- 急速なビジネスの変化に対応できる「BRMS」の常識
- 「全体を見る」ためのビジネスプロセス・BPMの常識
- 内部統制に効く! ID管理・シングルサインオンの常識
- 社内システムのセキュリティとアクセス制御の常識
- 悲観もあれば楽観もある「トランザクション」の常識
- クラウドで再注目の「分散コンピューティング」の常識
- いまさら聞けない「Webサービス」の常識
- 非同期処理と疎結合ができる「メッセージング」の常識
- 企業でも情報整理で利用が進む「ポータル」の常識
- DI(依存性の注入)×AOP(アスペクト指向)の常識
- “全部入り”のEclipseで学ぶ統合開発環境の常識
- 企業向けアプリの常識を学び、JBossの環境構築
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Webアプリにおける11の脆弱性の常識と対策
- Tomcatはどこまで“安全”にできるのか?
- VMが脆弱性のあるバージョンかチェックするには?
- Tomcatでダイジェスト認証を使う
- Tomcatで独自のエラーページを使う
- ウェルカムページを設定する
- アクセス制限をweb.xmlの記述だけで実現する
- Javaでダイジェストを生成する
- TERASOLUNAのセキュリティ機能でWebアプリを強化
- 第1回 適切なエスケープ処理でXSSに備える
- 第2回 サーブレットコンテナが抱える問題を認識する
- 第3回 Validatorを利用した入力値チェックの注意点
- 最終回 安全なセッション管理を実現するために
- 狙われる甘〜いTomcat
- Webアプリケーションサーバのさまざまな脆弱点