第 1 章 Swift の概要

Swift は、任意のデータをオブジェクト (object) という形式で格納する機能を提供します。利用者は、ReST インターフェイスを通して Swift システムに要求を送り、オブジェクトのアップロードやダウンロードを行います。

アカウントとユーザ

Swift の利用にあたっては、アカウント (account) とユーザ (user) の 両方を登録する必要があります。
Swift は、アカウント毎に独立したストレージ領域を用意します。それぞれのストレージ領域には、ユニークな名前 (ストレージURLと呼ぶ) が割り当てられ、以後ストレージアクセス時の識別子として利用されます。

ストレージ領域へのアクセスには、ユーザ登録が必要となります。
それぞれのアカウントは、その中に複数のユーザを持つことができ、また、ユーザには admin 権限を与えることも可能です。admin 権限を与えられたユーザは、そのアカウントのストレージ領域内でコンテナ (container) の作成などの特権的な操作を行うことができます。

ある部門で、Swift アカウントを 1 つ用意し、その部門内のメンバをそれぞれ Swift のユーザとして登録するなどの使い方が考えられます。
ユーザの名前空間はアカウント毎に管理されており、下図の「swift 論理構造」におけるアカウント orion のユーザ joe と、アカウント pleiades のユーザ joe は、別のユーザとして扱われます。

コンテナとオブジェクト

各アカウントのストレージ領域に、複数のコンテナ (container) を持つことができます。
コンテナはオブジェクトの入れ物であり、UNIX のディレクトリや Windows のフォルダに相当しますが、ディレクトリやフォルダと異なり、コンテナの中にコンテナを置くことはできません。
コンテナの名前空間はアカウント毎に管理されており、「図: swift 論理構造」のように、アカウント orion とアカウント pleiades それぞれの下に、同じ名前のコンテナ foo を作ることができます。

データを格納するオブジェクト (object) は、いずれかのコンテナの配下に置きます。
利用者は、”ストレージURL/コンテナ名/オブジェクト名”という URL でアクセス対象となるオブジェクトを一意に指定することができます。この URL に GET リクエストを送ると、目的のオブジェクトをダウンロードすることができます。また、PUT リクエストを利用すれば、オブジェクトをアップロードすることも可能です。

ユーザが属するアカウント以外のアカウントが管理しているストレージ領域にあるオブジェクトにアクセスすることもできます。
その場合は、該当するストレージ領域に割り当てられたストレージ URL を利用してアクセスします。
オブジェクトは UNIX や Windows のファイルに相当しますが、さらにメタデータを持たせることができます。例えば、画像データに、撮影者・撮影場所・天候の情報をメタデータとして持たせ、それらを一つのオブジェクトとして Swift に保管するなどの使い方ができるでしょう。

アクセス制御

admin 権限を持つユーザは、そのユーザが属するアカウントの配下のコンテナの作成・削除・設定変更を実行できます。
アクセス権 (ACL) の設定も、admin 権限を持つユーザのみが行えます。ACL の設定はコンテナ単位であり、この ACL にユーザを登録することにより、登録されたユーザはそのコンテナ配下のオブジェクトにアクセスすることが許されます。

一般ユーザ (admin 権限を持たないユーザ) は、ACL 設定により許可された場合に限り、オブジェクトのアップロードとダウンロードが許されます。
コンテナの ACL が未設定の場合、一般ユーザはそのコンテナ配下のオブジェクトにはアクセスできません。また、ACL でアクセスが許可されている場合であっても、一般ユーザは、コンテナの生成・削除・設定変更を行うことはできません。

admin 権限を持つユーザも、別アカウントのストレージ領域にアクセスする時は、一般ユーザとして ACL によるアクセス制御に従います。
また、アクセス制御に、HTTP の referer を用いることもできます。referer を ACL に設定することにより、特定のサイトからのアクセスを許可することができます。
詳細は、次回以降の「アクセスコントロール設定方法」で解説します。

特権ユーザ

前述の「アカウントとユーザ」で解説した通り、それぞれのアカウント内に特権 (admin 権限) を持つユーザを置くことができます。
admin 権限を持つユーザは、そのアカウント内では ACL 設定の状態に関わらず、全てのコンテナやオブジェクトに対する操作を行うことができます。

Swift では、これとは別にサービス提供者用の特権 (reseller権限) を持つユーザを置くことができ、この権限を与えられたユーザは、全てのアカウントに対して admin 権限を持っているように振る舞うことができます。この権限は、Swift のシステム管理者以外に与えてはなりません。

第 2 章 本解説を読む前に

制限

クライアントは ReST インターフェイスを通して、Swift オブジェクトストレージにアクセスします。このとき、クライアントが送出する HTTP リクエストには、いくつかの制限があります。

コンテナ名、オブジェクト名の文字コードは UTF-8 であり、URL エンコードされた後の長さに対して最大長の制限が掛かります。

前提

本解説を読むにあたって、前提とする決まりごとがいくつかありますので以下に記載します。

 

  • <ACCOUNT-ID>
    本ドキュメントの説明において、”/v1/<ACCOUNT-ID>”という表記が出てきますが、これは、ユーザ認証時に得られたストレージ URL のうちホスト内のパスのみを抜き出したものを表しています。”<ACCOUNT-ID>”は、アカウント登録時に指定したアカウント名とは異なるので注意が必要です。
    ストレージ URL が「https://objstore.example.jp/v1/AUTH_orion-cabinet」であった場合、”/v1/<ACCOUNT-ID>”は”/v1/AUTH_orion-cabinet”を表します。
  • <CONTAINER>、<OBJECT>
    “<CONTAINER>”および”<OBJECT>”は、それぞれコンテナ名、オブジェクト名を表しています。利用者がコンテナやオブジェクトに付けた名前そのものになります。
  • X-Auth-Token 拡張ヘッダ
    “X-Auth-Token” 拡張ヘッダについての記述は省略していますが、HTTP リクエスト時には、この拡張ヘッダに認証時に得られたトークンを必ず設定してください。
  • HTTP 標準ヘッダ
    HTTP 標準ヘッダについての記述は省略しています。HTTP/1.1 のプロトコル仕様の情報は別途入手してください。
  • 指定必須なヘッダとパラメータ
    各種 HTTP リクエストの説明の表において、「指定必須」と明記していない限り、それらのヘッダやパラメータはオプショナルとなります。それらヘッダやオプションの指定がなくとも、Swift は動作します。