Launchpad Entry: KeystoneSpec:s3token
Created: 2012-01-15
Contributor: Akira YOSHIYAMA
概要
Swift の S3 API で Keystone のユーザ認証・認可機能を提供する機能を追加します。 本機能は Nova の EC2 API 用 Keystone のユーザ認証・認可機能を S3 API 用に移植したものです。
依存性
なし。
構成
本機能は3つのパートから構成されています。
- Keystone に S3 API 用の認証 API(/s3tokens)を追加する Keystone 用パッチ
- 1. を Swift から使用する為のミドルウェア(keystone/keystone/middleware/s3_token.py)
- 2. で得られたエンドポイント情報等を Swift で使うための Swift 用パッチ
EC2 API 用コードと同様、1. と 2. は Keystone、3. は Swift のソースコードに適用されます。
設定
Swift の Proxy サーバ用設定(/etc/swift/proxy-server.conf)の pipeline 設定に以下の通り s3token を追加します。
[pipeline:main] pipeline = healthcheck cache s3token swift3 keystone proxy-server
また、同じ設定ファイル中に、以下の設定を追加します。
[filter:s3token] use = egg:keystone#s3token auth_protocol = http auth_host = 127.0.0.1 auth_port = 5000 admin_token = 999888777666
auth_protocol, auth_host, auth_port は keystone のパブリック URL のスキーマ、IP アドレス、ポート番号を設定します。 admin_token は keystone の設定に合わせます。
設定適用後、Swift の Proxy サーバを再起動し、設定を反映します。
シーケンス
本機能は Nova の EC2 API における認証と同様の流れで処理されます。
Swiftクライアント |
|
Swiftミドルウェア |
|
Keystone |
Swiftクライアント |
S3API要求→ |
s3token |
|
|
|
|
s3token |
→Keystone 認証要求 |
Keystone パブリックAPI |
|
|
s3token |
←認証トークン、エンドポイント |
Keystone パブリックAPI |
|
|
keystone |
認証トークン→ |
Keystone 管理API |
|
|
keystone |
←認可情報 |
Keystone 管理API |
Swiftクライアント |
←S3 API応答 |
swift3(S3API) |
|
|
Keystone の追加 API
リクエスト
- リクエストメソッド
- POST /v2.0/s3tokens
- リクエストヘッダ
- Content-Type: application/json
- リクエストボディ
- JSON形式で以下の項目を含む。
access
アクセスキー(アカウント名)
signature
シグネーチャ
verb
元リクエストのメソッド
path
元リクエストの URL パス
expire
元リクエストの Date ヘッダ
content_type
元リクエストの Content-Type ヘッダ
content_md5
元リクエストの Content-MD5 ヘッダ
xheaders
元リクエストの X-Amz-* ヘッダ群
- JSON形式で以下の項目を含む。
レスポンス
- 200 (OK)
- 400 (Bad Request)
- 401 (Unauthorized)
- 403 (User Disabled)