ACL の変更の例

デフォルトで読み取り権限を持たないサブジェクトが Bucket 内の KiiObject を読み取るには、ACL エントリーに「Bucket 内の KiiObject を検索(QUERY_OBJECTS_IN_BUCKET)」アクションを指定するだけでは不十分であることに注意する必要があります。

特定の Bucket 内のすべての KiiObject を読み取り可能にするには、「Bucket 内の KiiObject を読み取り(READ_OBJECTS_IN_BUCKET)」アクションを利用します。Bucket の ACL にこのアクションを指定した ACL エントリーを追加すると、その Bucket 配下の KiiObject に対する読み取り権限がサブジェクトに付与されます。

以下に、READ_OBJECTS_IN_BUCKET アクションを設定しない場合と READ_OBJECTS_IN_BUCKET アクションを設定する場合のそれぞれの動作例を挙げます。ここでは、阿田さんのユーザースコープの Bucket を井田さんと共有するケースを想定します。

READ_OBJECTS_IN_BUCKET アクションを設定しない場合の動作

検索条件に合致しても検索権限だけでは KiiObject の内容を読み取れないため、スコープオーナー以外のサブジェクトが自身で作成していない KiiObject を検索して取得することはできません。

  1. 阿田さんが自分だけにアクセス権があるユーザースコープの Bucket に KiiObject を作成します。

  2. 阿田さんが井田さんと情報を共有するために、Bucket の ACL に「Bucket 内に KiiObject を追加(CREATE_OBJECTS_IN_BUCKET)」アクションと「Bucket 内の KiiObject を検索(QUERY_OBJECTS_IN_BUCKET)」アクションを追加して、井田さんが KiiObject の作成と検索を実行できるようにします。

    しかし、井田さんは自分で作成していない KiiObject を読み取れません。井田さんが「この Bucket 内の KiiObject」という条件で検索しても阿田さんが作成した KiiObject を読み取れないため、検索結果は 0 件となります。

  3. 井田さんが阿田さんのユーザースコープの Bucket に KiiObject を作成します。

    阿田さんはスコープオーナーであるため、全件を検索できます。

    井田さんは 2 件目の作成者であるため、2 件目だけを検索できます。

  4. 阿田さんが自身のユーザースコープの Bucket に KiiObject を作成します。

    阿田さんはスコープオーナーであるため、全件を検索できます。

    井田さんは 2 件目の作成者であるため、2 件目だけを検索できます。

上記の例に示すように、スコープオーナー以外のサブジェクトに Bucket レベルで KiiObject の作成および検索の権限を与えても、Bucket 内の KiiObject に対する読み取り権限は付与されません。共有対象の KiiObject が頻繁に作成または破棄されるようなケースでは ACL も頻繁に変更する必要があるため、上記の例のような方法でのデータ共有は現実的ではありません。下記の READ_OBJECTS_IN_BUCKET アクションの設定またはグループ機能の利用を検討してください。グループを使った例は、グループを使った設計のヒント を参照してください。

READ_OBJECTS_IN_BUCKET アクションを設定する場合の動作

Bucket 内の KiiObject 読み取りアクションを許可されているサブジェクトは、Bucket 内のすべての KiiObject を無条件で読み取ることができます。

先ほどの阿田さんと井田さんの例を使って、この権限を与えられたサブジェクトがデータを操作する際の動作を説明します。

  1. 阿田さんが自分だけにアクセス権があるユーザースコープの Bucket に KiiObject を作成します。

  2. 阿田さんが井田さんと情報を共有するために、Bucket の ACL に「Bucket 内に KiiObject を追加(CREATE_OBJECTS_IN_BUCKET)」アクションと「Bucket 内の KiiObject を検索(QUERY_OBJECTS_IN_BUCKET)」アクションを追加して、井田さんが KiiObject の作成と検索を実行できるようにします。

    さらに、井田さんが Bucket 内の KiiObject の読み取りも実行できるように、「Bucket 内の KiiObject を読み取り(READ_OBJECTS_IN_BUCKET)」アクションを Bucket の ACL に追加します。

    井田さんは阿田さんが作成する KiiObject 対して直接の読み取り権限は持っていません。しかし Bucket 内のすべての KiiObject を読み取る権限を持っているため、「この Bucket 内の KiiObject」という条件で検索して阿田さんが作成した KiiObject を読み取ることができます(検索結果は 1 件となります)。

  3. 井田さんが阿田さんのユーザースコープの Bucket に KiiObject を作成します。

    阿田さんはスコープオーナーであるため、全件を検索できます。

    井田さんは Bucket 内の KiiObject 読み取り権限を与えられたため、全件を検索できます。

  4. 阿田さんが自身のユーザースコープの Bucket に KiiObject を作成します。

    阿田さんはスコープオーナーであるため、全件を検索できます。

    井田さんは Bucket 内の KiiObject 読み取り権限を与えられたため、全件を検索できます。

このように、読み取りのみのデータ共有は、サブジェクトに Bucket 内の KiiObject の読み取り権限を与えることにより容易に実現できます。

書き込みも許可するデータ共有(阿田さんが作成した KiiObject を井田さんが更新することを認めるケース)はこの方法では対応できません。代わりにグループ機能の利用を検討してください。グループを使った例は、グループを使った設計のヒント を参照してください。