20130606 alfresco study16audit

  • 559 views
Uploaded on

第16回Alfresco勉強会の発表資料です。 …

第16回Alfresco勉強会の発表資料です。
Alfrescoの監査証跡機能について説明しています。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
559
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. とたに2013©Alfresco勉強会AlfrescoのAuditing2013年6月6日
  • 2. 2013.06.06 2013©Auditing2Audit, 監査証跡, アクセスログ機能...●言い方は違うがだいたい同じことと思えばよいです。●記録対象として指定されたユーザの操作をログとして記録する機能今日のゴール●AlfrescoのAudit機能の仕組みを理解する●Audit定義ファイルを書けるようになるAlfresco version●Alfresco Community Edition 4.2c
  • 3. 2013.06.06 2013©いきなりですが3アクセスログはファイルに出力されません!●Alfrescoリポジトリ内に保管●REST APIを用いて取得取得結果のログの例$curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/AuditExampleLogin1"{"count":2,"entries":[{"id":2,"application":"AuditExampleLogin1","user":"admin","time":"2013-06-04T13:33:36.492+09:00","values":null},{"id":4,"application":"AuditExampleLogin1","user":"admin","time":"2013-06-04T13:58:28.705+09:00","values":null}]}
  • 4. 2013.06.06 2013©アクセスログの仕組み4ユーザ操作とは●ユーザがリポジトリに対して行える操作は多様●Webに加えてCIFSやFTPなどさまざまなインタフェースを経由して操作を行える●Alfrescoはサービス(=API)のレイヤで監査証跡のためのユーザ操作を識別CIFSShareAlfrescoリポジトリサービスレイヤ
  • 5. 2013.06.06 2013©アクセスログの仕組み5アクセスログ記録可能なメソッドの例public interface NodeService{...@Auditable(parameters = {"parentRef", "assocTypeQName", "assocQName","nodeTypeQName"})public ChildAssociationRef createNode(NodeRef parentRef,QName assocTypeQName,QName assocQName,QName nodeTypeQName)throws InvalidNodeRefException, InvalidTypeException;...@Auditable(parameters = {"nodeRef"})public Set<QName> getAspects(NodeRef nodeRef) throws InvalidNodeRefException;...@Auditable(parameters = {"nodeRef"})public void deleteNode(NodeRef nodeRef) throws InvalidNodeRefException;●各種Serviceクラスのインタフェースファイルにannotationとして記述されている
  • 6. 2013.06.06 2013©Audit設定ファイル6<?xml version=1.0 encoding=UTF-8?><Auditxmlns="http://www.alfresco.org/repo/audit/model/3.2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.alfresco.org/repo/audit/model/3.2 alfresco-audit-3.2.xsd"><DataExtractors><DataExtractor name="simpleValue" registeredName="auditModel.extractor.simpleValue"/></DataExtractors><DataGenerators><DataGenerator name="personFullName" registeredName="auditModel.generator.personFullName"/></DataGenerators><PathMappings><PathMap source="/alfresco-api/post/AuthenticationService/authenticate" target="/auditexamplelogin1/login"/><PathMap source="/alfresco-api/post/AuthenticationService/authenticate/no-error" target="/auditexamplelogin2/login"/></PathMappings><Application name="AuditExampleLogin1" key="auditexamplelogin1"><AuditPath key="login"><AuditPath key="no-error"><RecordValue key="user" dataExtractor="simpleValue" dataSource="/auditexamplelogin1/login/args/userName"/></AuditPath><AuditPath key="error"><RecordValue key="user" dataExtractor="simpleValue" dataSource="/auditexamplelogin1/login/args/userName"/></AuditPath></AuditPath></Application><Application name="AuditExampleLogin2" key="auditexamplelogin2"><AuditPath key="login"><GenerateValue key="user" dataGenerator="personFullName"/></AuditPath></Application></Audit>設定ファイルの例
  • 7. 2013.06.06 2013©Audit設定ファイル7<DataExtractors><DataExtractor name="simpleValue" registeredName="auditModel.extractor.simpleValue"/></DataExtractors>DataExtractor●入力データもとに何らかのデータを出力する、データ加工コンポーネント書式定義済DataExtractorの一覧see: alfresco/WEB-INF/classes/alfresco/audit-services-context.xmlregisteredName 機能auditModel.extractor.simpleValue 入力データをそのまま出力auditModel.extractor.nullValue nullを出力auditModel.extractor.nodeName ノードの名前(cm:name)を出力auditModel.extractor.nodeType ノードのタイプを出力
  • 8. 2013.06.06 2013©Audit設定ファイル8<DataGenerators><DataGenerator name="personFullName" registeredName="auditModel.generator.personFullName"/></DataGenerators>DataGenerator●データを生成し出力するコンポーネント書式定義済DataExtractorの一覧see: alfresco/WEB-INF/classes/alfresco/audit-services-context.xmlregisteredName 機能auditModel.generator.time 現在日時のDateオブジェクトを出力auditModel.generator.user ユーザIDを出力auditModel.generator.personFullName ユーザのフルネームを出力
  • 9. 2013.06.06 2013©Audit設定ファイル9<PathMappings><PathMap source="/alfresco-api/post/AuthenticationService/authenticate"target="/auditexamplelogin1/login"/><PathMap source="/alfresco-api/post/AuthenticationService/authenticate/no-error" target="/auditexamplelogin2/login"/></PathMappings>PathMapping●記録対象アクションをアクセスログにマッピング書式sourceに何を書けばいいか/<アプリケーション名>/<パス>●アクセスログのdebug logを有効にして実際に操作を行ってみるとパスが分かる→ 後でデモ
  • 10. 2013.06.06 2013©Audit設定ファイル10<Application name="AuditExampleLogin1" key="auditexamplelogin1"><AuditPath key="login"><AuditPath key="no-error"><RecordValue key="user" dataExtractor="simpleValue" dataSource="/auditexamplelogin1/login/args/userName"/></AuditPath><AuditPath key="error"><RecordValue key="user" dataExtractor="simpleValue" dataSource="/auditexamplelogin1/login/args/userName"/></AuditPath></AuditPath></Application><Application name="AuditExampleLogin2" key="auditexamplelogin2"><AuditPath key="login"><GenerateValue key="user" dataGenerator="personFullName"/></AuditPath></Application>Application●アクセスログの集計単位書式●key = マッピングされたパスの要素
  • 11. 2013.06.06 2013©Audit設定ファイル11Applicationパスの考え方/alfresco-api/pre/NodeService/createNode/args/parentRef/alfresco-api/pre/NodeService/createNode/myapp/createNodePathMapping/myapp/createNode/args/parentRefアクセスログのイベント上記をApplicationで捕捉するためには末端までパスを記述する必要がある。Application key=”myapp”AuthPath key=”createNode”AuthPath key=”args”AuthPath key=”parentRef”
  • 12. 2013.06.06 2013©Audit設定ファイル12削除ノードを記録するログ<?xml version=1.0 encoding=UTF-8?><Auditxmlns="http://www.alfresco.org/repo/audit/model/3.2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.alfresco.org/repo/audit/model/3.2 alfresco-audit-3.2.xsd"><DataExtractors><DataExtractor name="simpleValue" registeredName="auditModel.extractor.simpleValue"/></DataExtractors><DataGenerators><DataGenerator name="personFullName" registeredName="auditModel.generator.personFullName"/></DataGenerators><PathMappings><PathMap source="/alfresco-api/post/NodeService/deleteNode/no-error" target="/deletedcontent/deleteNode" /></PathMappings><Application name="DeletedContent" key="deletedcontent"><AuditPath key="deleteNode"> <RecordValue key="node" dataExtractor="simpleValue" dataSource="/deletedcontent/deleteNode/args/nodeRef" /> <GenerateValue key="user" dataGenerator="personFullName" /></AuditPath></Application></Audit>
  • 13. 2013.06.06 2013©ログの検索13クエリパラメータ●クエリのパラメータ$curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/AuditExampleLogin1?verbose=true"$curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/AuditExampleLogin1?verbose=true&value=admin"$curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/AuditExampleLogin1?verbose=true&value=admin&limit=8&toId=9"
  • 14. 2013.06.06 2013©Audit設定ファイル作成のTips14Audit Pathの参照方法log4j.logger.org.alfresco.repo.audit.AuditComponentImpl=DEBUGlog4j.logger.org.alfresco.repo.audit.inbound=DEBUG●/alfresco/extension/*-log4j.propertiesに以下を設定しておくことで、アクセスログの対象となる操作ログが出力される
  • 15. 2013.06.06 2013©簡易アクセスログ15alfresco-access●APIよりも少し抽象的なレイヤでのアクセスログを出力基本設定●alfresco-global.propertiesに以下を設定audit.alfresco-access.enabled=trueAuditFilter●アクセスログに出力する項目を正規表現で指定● でrejectaudit.filter.alfresco-access.transaction.user=~System;.*audit.filter.alfresco-access.transaction.type=cm:folder;cm:contentaudit.filter.alfresco-access.transaction.path=/app:company_home/.*
  • 16. 2013.06.06 2013©アクセスログのメンテナンス16ログの削除$curl -u admin:admin -X POST "http://localhost:8080/alfresco/service/api/audit/clear/AuditExampleLogin1?fromTime=1370326764"●fromTime, toTimeをUnix Timeで指定
  • 17. 2013.06.06 2013©まとめ17Alfresco Auditingの特徴●基本的にAPIのレイヤでアクセスを識別して記録する●メリット: 特定のI/Fを除外することなく横断的に記録できる●デメリット: APIよりも上位の操作(ダウンロードなど)を記録しようとした場合に、APIレベルで見ると取得したい操作以外も合わせて記録されてしまう現実的な対応方法●ブラウザからのダウンロードなど特定のI/Fに依存したアクセスログを取りたい場合には、別途マーカ用サービスを作っておき、ダウンロード処理に組込むなど、要件によってはカスタマイズも含めて実現方法を検討する。