コンソールまたはAPIを使用して、他のユーザーにコンテナの読み取り/書き取りアクセス権限を付与できます。
コンソールではコンテナ作成ダイアログボックスまたはコンテナ管理ウィンドウのコンテナアクセスポリシー設定ダイアログボックスでコンテナアクセスポリシーを選択できます。選択できるポリシーはPRIVATE
とPUBLIC
の2つに制限されます。
PRIVATE
は、コンテナが属すプロジェクトのユーザーにのみアクセス権限を付与する基本アクセスポリシーです。コンソールを利用するか、認証トークンを発行してAPIでコンテナにアクセスできます。 APIセッションのコンテナが属すプロジェクトのユーザーにのみ読み取り/書き込み許可項目と同じポリシーです。
PUBLIC
は、誰でも読み取りとオブジェクトリスト照会を許可するポリシーです。コンテナをPUBLICに設定すると、コンソールでURLを取得できます。このURLを利用して誰でもコンテナにアクセスできます。 APIセッションのすべてのユーザーに読み取り許可項目と同じポリシーです。
APIを使用してコンテナのX-Container-Read
, X-Container-Write
プロパティにACLポリシー要素を入力すると、さまざまな状況に合わせてアクセスポリシーを設定できます。
設定することができるACLポリシー要素は次のとおりです。すべてのポリシー要素はカンマ(,)で区切って組み合わせることができます。
ポリシー要素 | 説明 |
---|---|
.r:* |
誰でも認証トークンなしでオブジェクトにアクセスできます。 |
.rlistings |
読み取り権限があるユーザーにコンテナ照会(GETまたはHEADリクエスト)を許可します。 このポリシー要素がなければオブジェクトリストを照会できません。 がポリシー要素は単独で設定できません。 |
.r:<referrer> |
リクエストヘッダを参照して設定されたHTTPリファラー(HTTP Referer)にアクセスを許可します。 認証トークンは必要ありません。 |
.r:-<referrer> |
リクエストヘッダを参照して設定されたHTTPリファラーのアクセスを制限します。 リファラーの前にハイフン(-)をつけて設定します。 |
<tenant-id>:<api-user-id>> |
特定プロジェクトに属す特定ユーザーに発行された認証トークンでオブジェクトにアクセスできます。 書き込み、読み取り権限を付与できます。 |
<tenant-id>:* |
特定プロジェクトに属すすべてのユーザーに発行された認証トークンでオブジェクトにアクセスできます。 書き込み、読み取り権限を全て付与できます。 |
*:<api-user-id> |
プロジェクトに関係なく、特定ユーザーに発行された認証トークンでオブジェクトにアクセスできます。 書き込み、読み取り権限を付与できます。 |
*:* |
プロジェクトに関係なく、認証トークンを発行できるユーザーなら誰でもオブジェクトにアクセスできます。 書き込み、読み取り権限を付与できます。 |
[参考]
<api-user-id>
は、コンソールのAPI Endpoint設定ダイアログボックスでAPIユーザーID項目を参照するか、認証トークン発行APIレスポンス本文のaccess.user.idフィールドで確認できます。 認証トークン発行APIを利用するには、APIガイドの認証トークン発行項目を参照してください。
ACLポリシー要素を設定しなかった時に使用される基本アクセスポリシーです。 APIを使用してコンテナにアクセスするには、必ず有効な認証トークンが必要です。
コンテナのX-Container-Read
、X-Container-Write
プロパティ値を全て削除すると、コンテナが属すプロジェクトのユーザーにのみアクセスを許可するPRIVATEコンテナになります。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read;' \
-H 'X-Container-Write;' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
有効な認証トークンなしでリクエストするとエラーメッセージを返します。[参考] curlを利用して値がないヘッダを送る時は、ヘッダ名にセミコロン(`;`)をつける必要があります。
$ curl -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
リクエストヘッダに有効な認証トークンがなければレスポンスを受け取れません。
$ curl -X GET \
-H 'X-Auth-Token: ${token-id}' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
[コンテナのオブジェクトリスト]
コンテナのX-Container-Read
プロパティを.r:*, .rlistings
に設定すると、すべてのユーザーにオブジェクトの読み取りとリスト照会を許可します。認証トークンは必要ありません。コンソールセッションのPUBLIC項目と同じポリシーです。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:*, .rlistings' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
[コンテナのオブジェクトリスト]
.r:*
だけ設定すると、コンテナのオブジェクトにはアクセスできますが、オブジェクトリストは照会できません。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:*' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
HTTPリファラー(HTTP Referer)は、ハイパーリンクを介してリクエストするWebページのアドレス情報です。リクエストヘッダに含まれています。
コンテナのX-Container-Read
プロパティに.r:<referrer>
または.r:-<referrer>
形式のACLポリシー要素を設定すると、特定リファラーのアクセスリクエストを許可またはブロックできます。 ACLポリシー要素でHTTPリファラーを設定する時は、プロトコルとサブパスを除くドメイン名を入力する必要があります。
[注意] HTTPリファラーはヘッダを編集してユーザーがいつでも変更できます。 HTTPリファラーを利用したアクセスポリシーはセキュリティに脆弱であるため推奨しません。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
APIリクエストヘッダに、許可されたHTTPリファラーアドレスを明示してリクエストすると、オブジェクトにアクセスできます。
$ curl -O -X GET \
-H 'Referer: https://bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -O -X GET \
-H 'Referer: https://bar.foo.com/some/path' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
APIリクエストヘッダに許可されたリファラーアドレスがないか、リファラーアドレスにプロトコルが含まれていない場合は、アクセスがブロックされます。
$ curl -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
$ curl -X GET \
-H 'Referer: https://example.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
$ curl -X GET \
-H 'Referer: bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
HTTPリファラー設定に、次のように.
で始まるドメイン名を入力すると、設定されたドメインのすべてのサブドメインアドレスを含むリファラーに読み取りを許可します。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
-H 'Referer: https://bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -O -X GET \
-H 'Referer: https://qux.baz.foo.com/some/path' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
サブドメインが含まれていないリクエストはブロックされます。
$ curl -X GET \
-H 'Referer: https://foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
特定ドメイン名を持つすべてのリファラーのアクセスリクエストを許可するには、次のようにカンマで区切ったリストを利用して設定します。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:foo.com, .r:.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
-H 'Referer: https://foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -O -X GET \
-H 'Referer: https://baz.foo.com/some/path' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:-bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
HTTPリファラードメイン名の前にハイフンをつけて設定すると、設定されたHTTPリファラーリクエストがブロックされます。
$ curl -X GET -H 'Referer: https://bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
HTTPリファラーのアクセス許可/ブロックポリシーは、入力した順序で適用されます。例えば、リファラーブロックポリシー要素の後ろに全てのアクセスを許可する.r:*
ポリシー要素を入力すると、リファラーブロックポリシーは無視されます。反対に、全てのアクセスを許可するポリシー要素を先に入力して特定リファラーブロックポリシー要素を後ろに入力すると、設定されたリファラーのアクセスリクエストを除くすべてのアクセスリクエストが許可されます。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:-bar.foo.com, .r:*' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -O -X GET -H 'Referer: https://bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: .r:*, .r:-bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
$ curl -O -X GET \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -X GET -H 'Referer: https://bar.foo.com' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>
コンテナのX-Container-Read
とX-Container-Write
プロパティに<tenant-id>:<api-user-id>
形式のACLポリシー要素を設定すると、特定プロジェクトまたは特定ユーザーに書き込み/読み取り権限をそれぞれ付与できます。テナントIDまたはAPIユーザーIDの代わりにワイルドカード文字*
を入力すると、すべてのプロジェクトまたはすべてのユーザーにアクセス権限を付与します。アクセスリクエストを行う時は必ず有効な認証トークンが必要です。
[参考] 認証トークンが必要なACLポリシーで付与された読み取り権限にはオブジェクトリスト照会権限が含まれています。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: {tenant-id}:{api-user-id}' \
-H 'X-Container-Write: {tenant-id}:{api-user-id}' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
オブジェクトにアクセスリクエストを行う時は、必ず許可されたテナントIDと、NHN CloudユーザーIDに発行された有効な認証トークンが必要です。
$ curl -X GET \
-H 'X-Auth-Token: ${token-id}' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
[コンテナのオブジェクトリスト]
$ curl -O -X GET \
-H 'X-Auth-Token: ${token-id}' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container/object
[オブジェクトのダウンロード]
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: {tenant-id}:*' \
-H 'X-Container-Write: {tenant-id}:*' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
オブジェクトにアクセスリクエストを行う時は、必ず許可されたテナントIDと、該当するプロジェクトに属すNHN CloudユーザーIDに発行された有効な認証トークンが必要です。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: *:{api-user-id}' \
-H 'X-Container-Write: *:{api-user-id}' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
オブジェクトにアクセスリクエストを行う時は、必ず許可されたNHN CloudユーザーIDに発行された有効な認証トークンが必要です。
$ curl -i -X POST \
-H 'X-Auth-Token: ${token-id}' \
-H 'X-Container-Read: *:*' \
-H 'X-Container-Write: *:*' \
https://api-storage.cloud.toast.com/v1/AUTH_*****/container
オブジェクトにアクセスリクエストを行う時は、必ず有効な認証トークンが必要です。
空のヘッダを入力すると、設定されたACLポリシー要素を全て削除できます。ACLポリシー要素がないコンテナは、許可されたユーザーのみアクセスできるPRIVATEコンテナになります。コンテナが属すプロジェクトのユーザーにのみ書き込み/読み取り許可項目を参照してください。
Swift Access Control Lists (ACLs) - https://docs.openstack.org/swift/latest/overview_acl.html