2.3. 認証およびアクセス制御リスト
Ceph Object Gateway への要求は、認証または認証解除のいずれかになります。Ceph Object Gateway は、認証されていないリクエストが匿名ユーザーによって送信されることを前提としています。Ceph Object Gateway は、固定 ACL をサポートしています。
2.3.1. 認証
ほとんどのユースケースでは、クライアントは Java 用の Amazon SDK の AmazonS3Client
などの既存のオープンソースライブラリーを使用し、Python Boto ではアクセスキーとシークレットキーを渡すだけで、ライブラリーは要求ヘッダーと認証署名をビルドします。ただし、リクエストを作成して署名することもできます。
リクエストの認証には、Ceph Object Gateway サーバーに送信される前に、アクセスキーとベース 64 でエンコードされた Hash-based Message Authentication Code (HMAC)をリクエストに含める必要があります。Ceph Object Gateway は S3 互換の認証を使用します。
例
HTTP/1.1 PUT /buckets/bucket/object.mpeg Host: cname.domain.com Date: Mon, 2 Jan 2012 00:01:01 +0000 Content-Encoding: mpeg Content-Length: 9999999 Authorization: AWS <access_key>:<hash_of_header_and_secret>
前述の例では、< access_key> を
アクセスキー ID の値に置き換え、その後にコロン()を追加 します
。< ;hash_of_header_and_secret
> を、正規化されたヘッダー文字列のハッシュおよびアクセスキー ID に対応するシークレットに置き換えます。
ヘッダー文字列およびシークレットのハッシュを生成するには、以下を行う必要があります。
- ヘッダー文字列の値を取得します。
- 要求ヘッダー文字列を正規形式に正規化します。
- SHA-1 ハッシュアルゴリズムを使用して HMAC を生成します。
-
hmac
の結果を base-64 としてエンコードします。
ヘッダーを正規の形式に正規化するには、以下を行います。
-
すべての
content-
ヘッダーを取得します。 -
content-type
およびcontent-md5
以外のcontent-
ヘッダーをすべて削除します。 -
content-
ヘッダー名が小文字であることを確認します。 -
content-
ヘッダーの辞書式で並べ替えます。 -
Date
ヘッダー AND があることを確認します。指定した日付が、オフセットではなく GMT を使用していることを確認してください。 -
x-amz-
で始まるヘッダーをすべて取得します。 -
x-amz-
ヘッダーがすべて小文字であることを確認します。 -
x-amz-
ヘッダーの辞書式で並べ替えます。 - 同じフィールド名の複数のインスタンスを単一のフィールドに組み合わせ、フィールド値をコンマで区切ります。
- ヘッダー値の空白文字および改行文字を、単一スペースに置き換えます。
- コロンの前後に空白を削除します。
- 各ヘッダーの後に新しい行を追加します。
- ヘッダーを要求ヘッダーにマージします。
< hash_of_header_and_secret
> を base-64 でエンコードされた HMAC 文字列に置き換えます。
詳細は、Amazon Simple Storage Service ドキュメントの Signing and Authenticating REST Requests セクションを参照してください。