Ark SiteColumn &
    Report Arkアーキテクチャ
TOP 開発の現場から 第11回

このページでは、JustArkの様々な面に焦点を当てて、Ark開発スタッフ自らがメッセージを発信します。

第11回 WebDAV の概要 ACL 編 〜アクセス権を制御する〜

 ・はじめに  ・ACL とは  ・実践編  ・おわりに

はじめに

皆さんはじめまして。 新たに IDisk Tool for Java 担当となりました、今年度入社の M と申します。 「何だ、新人か」などと思わず、どうか最後までお付き合い下さい。

第10回・WebDAV の概要 でも紹介されていますが、 インターネットディスクサービスでは WebDAV プロトコルを利用しています。
WebDAV プロトコルは、HTTP プロトコルに分散環境での編集やバージョン管理の機 能を追加しようとするもので、現在ではそのうちの分散環境での編集機能が定義 されています。
現在では、WebDAV の機能を更に拡張するための仕様が以下の3つのサブプロジェ クトにより検討されています。
  • ACL … WebDAV サーバ上でのアクセスコントロール機能を規定する。
  • DASL … WebDAV サーバ上での検索機能を規定する。
  • DeltaV … WebDAV サーバ上でのバージョン管理機能を規定する。
今回は、このうちの ACL について紹介していきます。

(※ 現在のインターネットディスクでは ACL に関するサービスは公開されていません。)

ACL とは

ACL は、前述したとおり WebDAV サーバ上でのアクセスコントロールを規定するプ ロトコルです。
アクセスコントロールとは、コンテンツに対する自由なアクセス制御を行うこと で、簡単に言うとコンテンツに対して「誰」が「どんな」操作を行えるかを決定 することです。
つまり、ACL は WebDAV のプロトコルを用いて、サーバ上のコンテンツを見たり、あ るいは書き換えたりする権限を決定出来るようにしようと言うものです。

WebDAV ACL プロジェクトのサイト( http://www.webdav.org/acl/ )におけるドラフトでは、主に以下のようなことが定義されています。

◆用語
利用者 (principal)
ユーザ、クライアント、 サーバなどネットワークリソースに対してアクセスを行う 「もの / 人」 を表します。 サーバ側では、利用者は HTTP の URL で表現されます。 利用者は、グループ可することも可能です。
権限 (privilege)
あるリソース上で、あるメソッドを実行出来るかどうかを制限します。 ドラフトでは、 サーバが最低限実装すべき権限として以下の6つを規定しています。
  • DAV:read
  • DAV:write
  • DAV:read-acl
  • DAV:read-current-user-privilege-set
  • DAV:write-acl
  • DAV:all
アクセスコントロール要素 (ACE : access control element)
ある利用者に対して、権限の許可/不許可を設定する要素です。
アクセスコントロールリスト (ACL : access control list)
あるリソースに対するアクセス制限を定義するACEのリストです。

◆6つの基本権限
DAV:read
リソースの内容やプロパティを利用者が取得することが出来るかどうかを決定する権限です。 GET や PROPFIND メソッドなどがこの影響を受けます。
DAV:write
リソースの内容や(デッド)プロパティを変更出来るかどうかを決定します。 PUT や PROPPATCH メソッドがこの影響を受けます。
対象リソースがコレクション(ディレクトリ)だった場合は、 その中身(メンバ)の変更にも影響します。
DAV:read-acl
リソースに設定されている ACL を取得することが出来るかどうかを決定する権限です。 この権限が許可されていれば、PROPFIND メソッドを用いて DAV:acl プロパティを検索することで、 リソースの ACL を取得することが出来ます。
DAV:read-current-user-privilege-set
リソースに設定されている、 現在認証されているユーザに関する権限のリストを取得することが出来るかどうかを決定します。 このリストは、PROPFIND メソッドを用いて DAV:current-user-privilege-set を検索することで取得出来ます。
DAV:read-acl がリソースに設定されている全ての ACL を取得出来るのに対し、 こちらはより制限された利用環境を設定することが出来ます。
DAV:write-acl
リソースのACLに関するプロパティを修正出来るかどうかを決定します。 この権限があればリソースに 「誰」 が 「どんな」 操作を行えるかを自由に設定出来るので、 もっとも強力な権限であるといえます。 ACL に関するプロパティを修正するには ACL というメソッドを用います。
DAV:all
その名の通り、リソースに適用出来る全ての権限を示す権限です。 サーバ側で独自に設定された権限があれば、それも含まれます。

◆プロパティ

ACL では、WebDAV リソースに対して幾つか新しいプロパティを定義しています。 以下に主なものを紹介します。
DAV:owner
このプロパティは、利用者がそのリソースの所有者であることを示します。 所有者は、たいていリソースに対する特殊な権限を持ちます。
DAV:current-user-privilege-set
DAV:read-current-user-privilege-set によって取得されるプロパティです。
DAV:supported-privilege-set
リソースに設定される権限の組合せを示すプロパティです。 サーバが実装している権限を取得することが出来ます。
DAV:acl
リソースに設定された ACL を示します。
その他、ACL の制約を定義するプロパティなどが存在します。
これらのプロパティは、PROPPATCH や ACL メソッドで修正することが出来ません。 このようなプロパティを「保護されたプロパティ (protected property)」と呼び ます。
また、これらのプロパティの取得には高い処理コストがかかる為、PROPFINDメソッ ドの DAV:allprop プロパティの検索では取得されないことが推奨されています。

実践編

ここでは、実際に ACL が利用出来るサーバに対してどんなリクエストを送ったら どんなレスポンスが返ってくるかについて解説します。
第10回・WebDAV の概要では インターネットディスクと IDisk Tool for Java を用いて解説を行いましたが、 両者とも ACL についてはまだサポートされていませんので、 あくまで"例"としての解説になります。 なお、リクエストとレスポンスのやり取りの仕組みについては 第10回・WebDAV の概要をご覧下さい。

また、表示の都合等で、ヘッダーやボディ部などのデータの一部を編集/省略 させていただいている箇所がありますが、ご了承ください。

◆プロパティの取得

DAV:acl

まずは、PROPFIND メソッドで DAV:acl を検索してみます。 この操作では、対象リソースに設定されている全ての権限を取得することが出来 ます(もちろん、利用者に DAV:read-acl が許可されていなくてはなりませんが)。
  • REQUEST
    PROPFIND /hoge/test.txt HTTP/1.1
    Host: *****
    Content-Type: text/xml
    Content-Length: XXX
    Authorization: *****
    
    ボディ部

  • RESPONSE
    HTTP/1.1 207 Multi-Status
    Content-Length: XXX
    Content-Type: text/xml; charset=UTF-8
    
    ボディ部
レスポンスとして、PROPFIND が成功したことを示す "207:Multi-Status" が返ってき ています。
次のボディ部分では、XML 形式で「誰」が「どんな」権限を持つかが示されてい ます。 この XML 文書の構造ですが、途中にある D:acl で示されたタグに囲まれた 部分が ACL、つまり権限のリストになっています( "D:" は "DAV:" を示しています)。
この例では、D:acl が更に D:ace に囲まれた4つの部分に分けら れます。
D:ace は、共通して D:principal を含んでいます。 これは利用者を示しています。
また、与えられた権限を表すのには D:grantD:deny の2つを用 いることが出来ます。 前者は利用者に許可された権限を、後者は禁止された権限を表します。
最初の2つの D:ace では D:owner (リソースの所有者)に関する権 限を定めています。 1つ目の D:ace にある D:protected は、その中のプロパティが保 護されたプロパティであり、自由に修正することが出来ないことを示しています。 また、名前空間に "ns:" が示されている権限は、サーバ独自に定義された権限で す。
3つ目の D:ace では、 D:authenticated (認証された利用者)の権 限を定めています。こちらでは ns:control-aclD:write が禁 止されています。
4つ目では、D:all (それ以外の全ての利用者)に関する権限を定めており、 D:grant が空である(=メソッドが許可されていない)ことが示されていま す。

DAV:current-user-privilege-set, DAV:owner

次に、DAV:current-user-privilege-set と DAV:owner を検索してみます。 前者は設定された権限の中から利用者に関連付けられたものだけを取り出すプロ パティです。 後者はリソースの所有者を示します。
  • REQUEST
    PROPFIND /hoge/test.txt HTTP/1.1
    Host: *****
    Content-Type: text/xml
    Content-Length: XXX
    Authorization: *****
    
    ボディ部

  • RESPONSE
    HTTP/1.1 207 Multi-Status
    Content-Type: text/xml; charset=UTF-8
    Content-Length: XXX
    
    ボディ部
今度のレスポンスボディではリクエストしたユーザに関連付けられた権限が、 D:current-user-privilege-set に示されています。 この例では、D:readD:write 及び D:read-acl が許 可されています。
また、リソースの所有者を示すURLが D:ownerD:href 要素に 示されています。

DAV:supported-privilege-set

最後に DAV:supported-privilege-set を取得します。 このリクエストで、対象サーバでどんな権限が利用出来るかを知ることが出来ま す。これは、次の「プロパティの設定」で何を指定すればよいのかを知るのに有 効です。
  • REQUEST
    PROPFIND /hoge/test.txt HTTP/1.1
    Host: *****
    Content-Type: text/xml
    Content-Length: XXX
    Authorization: *****
    
    ボディ部

  • RESPONSE
    HTTP/1.1 207 Multi-Status
    Content-Type: text/xml; charset=UTF-8
    Content-Length: XXX
    
    ボディ部
権限のリストはレスポンスボディの D:supported-privilege-set 内に 示されています。 このリストは多少複雑な構成になっているので、上から順に見ていくことにしま す。
まず、初めの D:supported-privilege には全ての権限を表す D:all が定義されています。 D:description 要素は、権限を判り易く説明するものです。
また、この D:supported-privilege の閉じタグはリストの一番最後(下か ら7行目)になります。 これは、この D:all 権限が他の全ての権限を含んでいることを示してい ます(このような権限を「集合権限」と呼びます)。
同じように、 D:read 権限は D:read-current-user-privilege-set 権限を、 ns:control-acl 権限は D:read-aclD:write-acl の 両権限を含む集合権限になっています。

◆権限の設定


今度は、リソースに対して権限の設定を行います。 権限の設定は、新しく導入されたACLメソッドを用いて行います。
  • REQUEST
    ACL /hoge/test.txt HTTP/1.1
    Host: *****
    Depth: 0
    Content-Type: text/xml
    Content-Length: XXX
    Authorization: *****
    
    ボディ部

  • RESPONSE
    HTTP/1.1 200 OK
    Content-Length: 0
    
この例では、サーバ上のリソース /hoge/test.txt に対して、全てのユーザに読み 取り権を与え、リソースの所有者にはサーバ定義の権限 ns:write を与 えるようリクエストしています。

おわりに

今回は WebDAV のアクセスコントロール機能を規定する ACL について説明しました が、いかがだったでしょうか。 本稿でインターネットディスクや WebDAV について少しでも興味を持って頂けたら 幸いです。
ACL はまだドラフト作業中ですが、WebDAV は現在急速に広まっていますので、 RFC が出されてインターネット標準になる日もそう遠くはないことでしょう。 そのときには、IDisk Tool for Java もより進化した姿を皆さんにお披 露目できると思います。
残る2つのプロジェクト DASL と DeltaV についても近いうちに皆さんに紹介してい く予定ですので、是非ご期待下さい。


TOP 開発の現場から 第11回