第1章 Object Gateway Administration Application Programming Interface (API)
Ceph Object Gateway は、RESTful API の radosgw-admin
コマンドラインインターフェイスの機能も公開します。Red Hat は、Ceph Object Gateway の設定時にコマンドラインインターフェイスを使用することを推奨します。ユーザー、データ、クォータ、および使用状況を管理する際に、Ceph Object Gateway の管理 API は、他の管理プラットフォームと統合できる RESTful インターフェイスを提供します。管理 API は以下の機能を提供します。
- 認証要求
ユーザー/サブユーザーアカウントの管理
ユーザーのケーパビリティー管理
キー管理
バケット管理
オブジェクト管理
- 使用方法の取得
- 使用方法情報のトリミング
1.1. リクエストの認証 リンクのコピーリンクがクリップボードにコピーされました!
Amazon の S3 サービスは、アクセスキーと要求ヘッダーのハッシュと秘密鍵を使用して要求を認証します。この要求には、SSL オーバーヘッドなしで認証された要求(特に大きなアップロード)を提供する利点があります。
S3 API のほとんどのユースケースには、Java や Python Boto 用の Amazon SDK の AmazonS3Client
などのオープンソースの S3 クライアントを使用します。これらのライブラリーは、Ceph Object Gateway 管理 API をサポートしません。これらのライブラリーをサブクラス化および拡張して、Ceph Admin API をサポートすることができます。一意のゲートウェイクライアントを作成できます。
本セクションの CephAdminAPI のサンプルクラスでは、要求パラメーターの取得、リクエストの認証、Ceph 管理 API を呼び出してレスポンスを受け取ることができる execute()
メソッドの作成方法を説明します。CephAdminAPI
クラスの例は、商用としてはサポートされず、そのように意図されてもいません。これは説明のみを目的としています。クライアントコード には、CRUD 操作を示すために Ceph Object Gateway への 5 つの呼び出しが含まれます。
- ユーザーの作成
- ユーザーの取得
- ユーザーの変更
- サブユーザーの作成
- ユーザーを削除します。
この例を使用するには、httpcomponents-client-4.5.3
Apache HTTP コンポーネントを取得します。http://www.eu.apache.org/dist/httpcomponents/httpclient/binary/ などをダウンロードできます。その後、tar ファイルを展開して lib
ディレクトリーに移動し、JAVA_HOME
ディレクトリーの /jre/lib/ext
ディレクトリーまたはカスタムクラスパスにコピーします。
CephAdminAPI クラスの例を検査する際に、execute()
メソッドは HTTP メソッド、リクエストパス、オプションのサブリソース、未指定の場合は null
、およびパラメーターのマップを取得することに注意してください。サブリソース (例: subuser
、key
など) で実行するには、サブリソースを execute()
メソッドの引数として指定する必要があります。
方法の例を以下に示します。
- URI をビルドします。
- HTTP ヘッダー文字列をビルドします。
-
HTTP リクエストをインスタンス化します (例:
PUT
、POST
、GET
、DELETE
)。 -
Date
ヘッダーを HTTP ヘッダー文字列および要求ヘッダーに追加します。 -
Authorization
ヘッダーを HTTP リクエストヘッダーに追加します。 - HTTP クライアントをインスタンス化し、インスタンス化された HTTP リクエストを渡します。
- 要求を行います。
- レスポンスを返します。
ヘッダー文字列のビルドは、Amazon の S3 認証手順を伴うプロセスの一部です。特に、サンプルメソッドは以下を行います。
-
PUT
、POST
、GET
、DELETE
などのリスエストタイプを追加します。 - 日付を追加します。
- requestPath を追加します。
リクエストタイプは、先頭または最後の空白のない大文字である必要があります。空白を削除しないと、認証は失敗します。日付は GMT で表現される必要があります。さもないと、認証に失敗します。
例示的な方法には、他のヘッダーはありません。Amazon S3 認証手順は、x-amz
ヘッダーの辞書式に並べ替えられます。したがって、x-amz
ヘッダーを追加する場合は、必ず辞書式で追加する必要があります。詳細は、本ガイドの S3 認証 を参照してください。Amazon S3 認証手順の詳細は、Amazon Simple Storage Service ドキュメントの Signing and Authenticating REST Requests セクションを参照してください。
ヘッダー文字列をビルドしたら、次の手順は HTTP リクエストをインスタンス化し、URI を渡すことです。典型的なメソッドは、PUT
を使用してユーザーおよびサブユーザーを作成し、GET
を使用してユーザーを取得し、POST
を使用してユーザーを変更し、DELETE
を使用してユーザーを削除します。
リクエストをインスタンス化したら、Date
ヘッダーに続けて Authorization
ヘッダーを追加します。Amazon の S3 認証は標準の Authorization
ヘッダーを使用し、以下の構造を持ちます。
Authorization: AWS <access_key>:<hash_of_header_and_secret>
Authorization: AWS <access_key>:<hash_of_header_and_secret>
CephAdminAPI のサンプルクラスには base64Sha1Hmac()
メソッドがあります。これはヘッダー文字列と admin ユーザーの秘密鍵を取得し、SHA1 HMAC を base-64 でエンコードされた文字列として返します。それぞれの execute()
呼び出しは、同じコード行を呼び出して Authorization
ヘッダーをビルドします。
httpRequest.addHeader("Authorization", "AWS " + this.getAccessKey() + ":" + base64Sha1Hmac(headerString.toString(), this.getSecretKey()));
httpRequest.addHeader("Authorization", "AWS " + this.getAccessKey() + ":" + base64Sha1Hmac(headerString.toString(), this.getSecretKey()));
以下の CephAdminAPI
のサンプルクラスでは、アクセスキー、シークレットキー、およびエンドポイントをコンストラクターに渡す必要があります。クラスは実行時に変更するためのアクセスメソッドを提供します。
後続の CephAdminAPIClient
の例は、CephAdminAPI
クラスをインスタンス化する方法、リクエストパラメーターのマップをビルドし、execute()
メソッドを使用してユーザーを作成、取得、更新、および削除する方法を示しています。