開発者ガイド

Red Hat Ceph Storage 5

Red Hat Ceph Storage の各種アプリケーションプログラミングインターフェイスの使用

Red Hat Ceph Storage Documentation Team

概要

本ガイドでは、AMD64 および Intel 64 のアーキテクチャーで実行している Red Hat Ceph Storage のさまざまなアプリケーションプログラミングインターフェイスを使用する方法を説明します。
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 Ceph RESTful API

ストレージ管理者は、Ceph RESTful API または単に Red Hat Ceph Storage Dashboard が提供する Ceph API を使用して、Red Hat Ceph Storage クラスターと対話することができます。Ceph Monitors および OSD に関する情報と、それぞれの設定オプションを表示できます。Ceph プールを作成または編集することもできます。

Ceph API は次の標準を使用します。

  • HTTP 1.1
  • JSON
  • MIME および HTTP コンテンツ Negotiation
  • JWT

これらの標準は OpenAPI 3.0 に準拠しており、API 構文、セマンティクス、コンテンツエンコーディング、バージョン管理、認証、および承認を規制しています。

1.1. 前提条件

  • 正常かつ実行中の Red Hat Ceph Storage クラスター
  • Ceph Manager を実行するノードへのアクセス。

1.2. Ceph API のバージョン

Ceph RESTful API の主な目的は、安定したインターフェイスを提供することです。安定したインターフェイスを実現するには、Ceph API は以下の原則で構築されます。

  • 暗黙的なデフォルトを回避するために、すべてのエンドポイントに対する明示的なデフォルトバージョン。
  • 粒度の細かい変更をエンドポイントごとに制御します。

    • 特定のエンドポイントからの予想されるバージョンは HTTP ヘッダーに記載されます。

      構文

      Accept: application/vnd.ceph.api.vMAJOR.MINOR+json

      Accept: application/vnd.ceph.api.v1.0+json

      現在の Ceph API サーバーがその特定のバージョンを対処できない場合は、415 - Unsupported Media Type の応答が返されます。

  • セマンティックバージョニングの使用。

    • 主な変更点は後方互換性がありません。変更すると、リクエストに無関係な変更や、特定のエンドポイントの応答形式に変更が加えられる可能性があります。
    • マイナーな変更は、後方互換性および転送の後方的です。変更は、特定のエンドポイントの要求形式または応答形式への追加変更で設定されます。

1.3. Ceph API の認証および認可

Ceph RESTful API へのアクセスは、2 つのチェックポイントを通過します。まず、有効なユーザーと既存ユーザーの代理で要求が行われていることを認証します。2 つ目は、認証前のユーザーの作成者は、ターゲットのエンドユーザーでの作成、読み取り、更新、削除などの特定のアクションを実行できます。

ユーザーが Ceph API の使用を開始する前に、有効な JSON Web Token (JWT) が必要です。/api/auth エンドポイントでは、このトークンを取得できます。

[root@mon ~]# curl -X POST "https://example.com:8443/api/auth" \
  -H  "Accept: application/vnd.ceph.api.v1.0+json" \
  -H  "Content-Type: application/json" \
  -d '{"username": "user1", "password": "password1"}'

このトークンは、Authorization HTTP ヘッダー内に配置して、すべての API 要求と共に使用する必要があります。

構文

curl -H "Authorization: Bearer TOKEN" ...

関連情報

1.4. Ceph API モジュールの有効化と保護

Red Hat Ceph Storage Dashboard モジュールは、SSL セキュアな接続で、ストレージクラスターに RESTful API アクセスを提供します。

重要

SSL を無効にすると、ユーザー名およびパスワードが暗号化されずに Red Hat Ceph ストレージダッシュボードに送信されます。

前提条件

  • Ceph Monitor ノードへの root レベルのアクセス。
  • 少なくとも 1 つの ceph-mgr デーモンがアクティブであることを確認します。
  • ファイアウォールを使用する場合は、SSL の場合は TCP ポート 8443、SSL なしの TCP ポート 8080 が、アクティブな ceph-mgr デーモンのあるノードでオープンになっていることを確認してください。

手順

  1. Cephadm シェルにログインします。

    root@host01 ~]# cephadm shell

  2. RESTful プラグインを有効にします。

    [ceph: root@host01 /]# ceph mgr module enable dashboard
  3. SSL 証明書を設定します。

    1. 組織の認証局 (CA) が証明書を提供する場合は、証明書ファイルを使用して設定されます。

      構文

      ceph dashboard set-ssl-certificate HOST_NAME -i CERT_FILE
      ceph dashboard set-ssl-certificate-key HOST_NAME -i KEY_FILE

      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate -i dashboard.crt
      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate-key -i dashboard.key

      一意のノードベースの証明書を設定する場合は、HOST_NAME をコマンドに追加します。

      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate host01 -i dashboard.crt
      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate-key host01 -i dashboard.key

    2. または、自己署名証明書を生成することもできます。ただし、自己署名証明書を使用しても、HTTPS プロトコルのセキュリティー上の利点を十分に享受することはできません。

      [ceph: root@host01 /]# ceph dashboard create-self-signed-cert
      警告

      自己署名証明書についてエラーを表示する最新の Web ブラウザーのほとんどは、安全な接続を確立する前に確認する必要があります。

  4. ユーザーを作成し、パスワードを設定し、ロールを設定します。

    構文

    echo -n "PASSWORD" > PATH_TO_FILE/PASSWORD_FILE
    ceph dashboard ac-user-create USER_NAME -i PASSWORD_FILE ROLE

    [ceph: root@host01 /]# echo -n "p@ssw0rd" > /root/dash-password.txt
    [ceph: root@host01 /]# ceph dashboard ac-user-create user1 -i /root/dash-password.txt administrator

    この例では、administrator ロールを持つ user1 という名前のユーザーを作成します。

  5. RESTful プラグインの Web ページに接続します。Web ブラウザーを開き、以下の URL を入力します。

    構文

    https://HOST_NAME:8443

    https://host01:8443

    自己署名証明書を使用した場合は、セキュリティー例外を確認します。

関連情報

1.5. 質問および回答

1.5.1. 情報の取得

このセクションでは、Ceph API を使用して、ストレージクラスター、Ceph モニター、OSD、プール、およびホストに関する情報を表示する方法について説明します。

1.5.1.1. すべてのクラスター設定オプションを表示する方法

本セクションでは、RESTful プラグインを使用してクラスター設定オプションおよびその値を表示する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:CEPH_MANAGER_PORT/api/cluster_conf'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • CEPH_MANAGER_PORT は、TCP ポート番号に置き換えます。デフォルトの TCP ポート番号は 8443 です。

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/cluster_conf

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

関連情報

1.5.1.2. 特定のクラスター設定オプションを表示する方法

本セクションでは、特定のクラスターオプションとその値を表示する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • ARGUMENT は、表示する設定オプションに置き換えます。

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • ARGUMENT は、表示する設定オプションに置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • ARGUMENT は、表示する設定オプションに置き換えます。

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

関連情報

1.5.1.3. OSD のすべての設定オプションを表示する方法

本セクションでは、OSD のすべての設定オプションおよびその値を表示する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/flags', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/flags', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/osd/flags

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

関連情報

1.5.1.4. CRUSH ルールの表示方法

このセクションでは、CRUSH ルールを表示する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/crush_rule'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/crush_rule'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/crush_rule', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/crush_rule', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/crush_rule

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

関連情報
  • Red Hat Ceph Storage 5 の 管理ガイドCRUSH ルール セクション

1.5.1.5. Monitor に関する情報を表示する方法

本セクションでは、以下のような特定の Monitor に関する情報を表示する方法を説明します。

  • IP アドレス
  • 名前
  • クォーラムのステータス
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/monitor'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/monitor'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/monitor

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.6. 特定のモニターに関する情報を表示する方法

本セクションでは、以下のような特定の Monitor に関する情報を表示する方法を説明します。

  • IP アドレス
  • 名前
  • クォーラムのステータス
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/monitor/NAME'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • NAME は、Monitor の短縮ホスト名に置き換えます。

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/monitor/NAME'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor/NAME', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • NAME は、Monitor の短縮ホスト名に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor/NAME', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/monitor/NAME

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • NAME は、Monitor の短縮ホスト名に置き換えます。

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.7. OSD に関する情報を表示する方法

本セクションでは、以下のような OSD に関する情報を表示する方法を説明します。

  • IP アドレス
  • そのプール
  • アフィニティー
  • 重み
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/osd

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.8. 特定の OSD に関する情報を表示する方法

本セクションでは、以下のような特定の OSD に関する情報を表示する方法を説明します。

  • IP アドレス
  • そのプール
  • アフィニティー
  • 重み
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/osd/ID

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.9. OSD でどのプロセスがスケジュールされるのかを指定する方法

本セクションでは、RESTful プラグインを使用して、スクラビングやディープスクラビングなどのプロセスを OSD にスケジュールする方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID/command', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID/command', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/osd/ID/command

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.10. プールに関する情報の表示方法

本セクションでは、以下のようなプールの情報を表示する方法を説明します。

  • フラグ
  • サイズ
  • 配置グループの数
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/pool'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/pool

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.11. 特定のプールに関する情報を表示する方法

本セクションでは、以下のような特定のプールに関する情報を表示する方法を説明します。

  • フラグ
  • サイズ
  • 配置グループの数
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/pool/ID

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.12. ホストに関する情報を表示する方法

本セクションでは、以下のようなホストに関する情報を表示する方法を説明します。

  • ホスト名
  • Ceph デーモンとその ID
  • Ceph バージョン
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/host'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/host'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/host

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.1.13. 特定のホストに関する情報を表示する方法

本セクションでは、以下のような特定のホストに関する情報を表示する方法を説明します。

  • ホスト名
  • Ceph デーモンとその ID
  • Ceph バージョン
curl コマンド

コマンドラインで、以下を使用します。

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/host/HOST_NAME'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • HOST_NAME は、hostname フィールドに一覧表示されるホストのホスト名に置き換えます。

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/host/HOST_NAME'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host/HOST_NAME', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • HOST_NAME は、hostname フィールドに一覧表示されるホストのホスト名に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host/HOST_NAME', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Web ブラウザー

Web ブラウザーで以下を入力します。

https://CEPH_MANAGER:8080/api/host/HOST_NAME

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • HOST_NAME は、hostname フィールドに一覧表示されるホストのホスト名に置き換えます。

プロンプトが表示されたら、ユーザー名とパスワードを入力します。

1.5.2. 設定の変更

本セクションでは、Ceph API プラグインを使用して OSD 設定オプション、OSD の状態、プールに関する情報を変更する方法を説明します。

1.5.2.1. OSD 設定オプションの変更方法

本セクションでは、RESTful プラグインを使用して OSD 設定オプションを変更する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'

以下を置き換えます。

  • OPTION を変更するオプションに置き換えます (pausenoupnodownnooutnoinnobackfillnorecovernoscrubnodeep-scrub)
  • true または falseVALUE
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/flags', json={"OPTION": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • OPTION を変更するオプションに置き換えます (pausenoupnodownnooutnoinnobackfillnorecovernoscrubnodeep-scrub)
  • VALUETrue または False に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/flags', json={"OPTION": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.5.2.2. OSD の状態を変更する方法

本セクションでは、RESTful プラグインを使用して OSD の状態を変更する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"STATE": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'

以下を置き換えます。

  • STATE は、変更する状態 (in または up) に置き換えます。
  • true または falseVALUE
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"STATE": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"STATE": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID
  • STATE は、変更する状態 (in または up) に置き換えます。
  • VALUETrue または False に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"STATE": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.5.2.3. OSD の重みを再設定する方法

本セクションでは、OSD の重みを変更する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"reweight": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'

以下を置き換えます。

  • VALUE は、新しい重みに置き換えます。
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"reweight": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/osd/ID', json={"reweight": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID
  • VALUE は、新しい重みに置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"reweight": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.5.2.4. プールの情報の変更方法

本セクションでは、RESTful プラグインを使用して特定のプールの情報を変更する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'

以下を置き換えます。

  • OPTION は、変更するオプションに置き換えます。
  • VALUE は、オプションの新しい値に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/pool/ID', json={"OPTION": VALUE}, auth=("USER, "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID
  • OPTION は、変更するオプションに置き換えます。
  • VALUE は、オプションの新しい値に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/pool/ID', json={"OPTION": VALUE}, auth=("USER, "PASSWORD"), verify=False)
>> print result.json()

1.5.3. クラスターの管理

本セクションでは、Ceph API プラグインを使用して OSD でのスクラビングまたはディープスクラビングの初期化、プールの作成、プールからのデータの削除、リクエストの削除、または要求の作成を行う方法を説明します。

1.5.3.1. OSD でスケジュール済みプロセスを実行する方法

本セクションでは、OSD でのスクラビングやディープスクラビングなどの RESTful API を使用してスケジュール済みプロセスを実行する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"command": "COMMAND"}' | curl --request POST --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'

以下を置き換えます。

  • 起動するプロセス (scrubdeep-scrub、または repair) を持つ COMMAND。プロセスが OSD でサポートされていることを確認します。詳しくは 「OSD でどのプロセスがスケジュールされるのかを指定する方法」 を参照してください。
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"command": "COMMAND"}' | curl --request POST --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/osd/ID/command', json={"command": "COMMAND"}, auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • osd フィールドにリストされている OSD の ID を持つ ID
  • 起動するプロセス (scrubdeep-scrub、または repair) を持つ COMMAND。プロセスが OSD でサポートされていることを確認します。詳しくは 「OSD でどのプロセスがスケジュールされるのかを指定する方法」 を参照してください。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/osd/ID/command', json={"command": "COMMAND"}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.5.3.2. 新規プールの作成方法

本セクションでは、RESTful プラグインを使用して新しいプールを作成する方法を説明します。

curl コマンド

コマンドラインで、以下を使用します。

echo -En '{"name": "NAME", "pg_num": NUMBER}' | curl --request POST --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/pool'

以下を置き換えます。

  • NAME は、新規プールの名前に置き換えます。
  • NUMBER は、配置グループの数に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

echo -En '{"name": "NAME", "pg_num": NUMBER}' | curl --request POST --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/pool', json={"name": "NAME", "pg_num": NUMBER}, auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • NAME は、新規プールの名前に置き換えます。
  • NUMBER は、配置グループの数に置き換えます。
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/pool', json={"name": "NAME", "pg_num": NUMBER}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.5.3.3. プールの削除方法

本セクションでは、RESTful プラグインを使用してプールを削除する方法を説明します。

この要求はデフォルトで禁止されています。そのためには、以下のパラメーターを Ceph 設定ガイドに追加します。

mon_allow_pool_delete = true
curl コマンド

コマンドラインで、以下を使用します。

curl --request DELETE --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'

以下を置き換えます。

  • USER は、ユーザー名に置き換えます。
  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID

プロンプトが表示されたら、ユーザーのパスワードを入力します。

自己署名証明書を使用した場合は、--insecure オプションを使用します。

curl --request DELETE --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Python

Python インタープリターで、以下を入力します。

$ python
>> import requests
>> result = requests.delete('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"))
>> print result.json()

以下を置き換えます。

  • アクティブな ceph-mgr インスタンスを持つノードの IP アドレスまたは短いホスト名を持つ CEPH_MANAGER
  • pool フィールドにリストされているプールの ID を持つ ID
  • USER は、ユーザー名に置き換えます。
  • PASSWORD は、ユーザーのパスワードに置き換えます。

自己署名証明書を使用した場合は、verify=False オプションを使用します。

$ python
>> import requests
>> result = requests.delete('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()

1.6. 関連情報

第2章 Ceph Object Gateway 管理 API

開発者は、RESTful アプリケーションプログラミングインターフェイス (API) と対話して Ceph Object Gateway を管理することができます。Ceph Object Gateway は、RESTful API の radosgw-admin コマンドの機能を利用できます。他の管理プラットフォームと統合できるユーザー、データ、クォータ、および使用方法を管理できます。

注記

Red Hat では、Ceph Object Gateway の設定時にコマンドラインインターフェイスを使用することを推奨します。

Basic Access Diagram

管理 API は以下の機能を提供します。

2.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

2.2. 管理操作

管理アプリケーションプログラミングインターフェイス (API) リクエストは、設定可能な管理者リソースエントリーポイントで開始する URI で実行されます。管理 API の認可は S3 認可メカニズムを複製します。一部の操作では、ユーザーが特別な管理機能を保持する必要があります。XML または JSON のいずれかのレスポンスエンティティータイプはリクエストの format オプションとして指定され、指定されていないとデフォルトは JSON に設定されます。

PUT /admin/user?caps&format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Content-Type: text/plain
Authorization: AUTHORIZATION_TOKEN

usage=read

2.3. 管理認証要求

Amazon の S3 サービスは、アクセスキー、要求ヘッダーのハッシュ、および秘密鍵を使用して要求を認証します。これは、認証されたリクエスト (特に SSL オーバーヘッドのない大規模なアップロード) を提供する利点があります。

S3 API のほとんどのユースケースには、Java や Python Boto 用の Amazon SDK の AmazonS3Client などのオープンソースの S3 クライアントを使用します。これらのライブラリーは、Ceph Object Gateway 管理 API をサポートしません。これらのライブラリーをサブクラス化および拡張して、Ceph Admin API をサポートすることができます。一意のゲートウェイクライアントを作成できます。

execute() メソッドの作成

本セクションの CephAdminAPI のサンプルクラスでは、要求パラメーターの取得、リクエストの認証、Ceph 管理 API を呼び出してレスポンスを受け取ることができる execute() メソッドの作成方法を説明します。

CephAdminAPI クラスの例は、商用としてはサポートされず、そのように意図されてもいません。これは説明のみを目的としています。

Ceph Object Gateway の呼び出し

クライアントコード には、CRUD 操作を示すために Ceph Object Gateway への 5 つの呼び出しが含まれます。

  • ユーザーの作成
  • ユーザーの取得
  • ユーザーの変更
  • サブユーザーの作成
  • ユーザーを削除します。

この例を使用するには、httpcomponents-client-4.5.3 Apache HTTP コンポーネントを取得します。たとえば、http://hc.apache.org/downloads.cgi からダウンロードできます。その後、tar ファイルを展開して lib ディレクトリーに移動し、JAVA_HOME ディレクトリーの /jre/lib/ext ディレクトリーまたはカスタムクラスパスにコピーします。

CephAdminAPI クラスの例を検査する際に、execute() メソッドは HTTP メソッド、リクエストパス、オプションのサブリソース、未指定の場合は null、およびパラメーターのマップを取得することに注意してください。サブリソース (例: subuserkey など) で実行するには、サブリソースを execute() メソッドの引数として指定する必要があります。

方法の例を以下に示します。

  1. URI をビルドします。
  2. HTTP ヘッダー文字列をビルドします。
  3. HTTP リクエストをインスタンス化します (例: PUTPOSTGETDELETE)。
  4. Date ヘッダーを HTTP ヘッダー文字列および要求ヘッダーに追加します。
  5. Authorization ヘッダーを HTTP リクエストヘッダーに追加します。
  6. HTTP クライアントをインスタンス化し、インスタンス化された HTTP リクエストを渡します。
  7. 要求を行います。
  8. レスポンスを返します。

ヘッダー文字列のビルド

ヘッダー文字列のビルドは、Amazon の S3 認証手順を伴うプロセスの一部です。特に、サンプルメソッドは以下を行います。

  1. PUTPOSTGETDELETE などのリスエストタイプを追加します。
  2. 日付を追加します。
  3. requestPath を追加します。

リクエストタイプは、先頭または最後の空白のない大文字である必要があります。空白を削除しないと、認証は失敗します。日付は GMT で表現される必要があります。さもないと、認証に失敗します。

例示的な方法には、他のヘッダーはありません。Amazon S3 認証手順は、x-amz ヘッダーの辞書式に並べ替えられます。したがって、x-amz ヘッダーを追加する場合は、必ず辞書式で追加する必要があります。

ヘッダー文字列をビルドしたら、次の手順は HTTP リクエストをインスタンス化し、URI を渡すことです。典型的なメソッドは、PUT を使用してユーザーおよびサブユーザーを作成し、GET を使用してユーザーを取得し、POST を使用してユーザーを変更し、DELETE を使用してユーザーを削除します。

リクエストをインスタンス化したら、Date ヘッダーに続けて Authorization ヘッダーを追加します。Amazon の S3 認証は標準の Authorization ヘッダーを使用し、以下の構造を持ちます。

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()));

以下の CephAdminAPI のサンプルクラスでは、アクセスキー、シークレットキー、およびエンドポイントをコンストラクターに渡す必要があります。クラスは実行時に変更するためのアクセスメソッドを提供します。

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.Header;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.utils.URIBuilder;

import java.util.Base64;
import java.util.Base64.Encoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Mac;

import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;

public class CephAdminAPI {

	/*
	 * Each call must specify an access key, secret key, endpoint and format.
	 */
	String accessKey;
	String secretKey;
	String endpoint;
	String scheme = "http"; //http only.
	int port = 80;

	/*
	 * A constructor that takes an access key, secret key, endpoint and format.
	 */
	public CephAdminAPI(String accessKey, String secretKey, String endpoint){
		this.accessKey = accessKey;
		this.secretKey = secretKey;
		this.endpoint = endpoint;
	}

	/*
	 * Accessor methods for access key, secret key, endpoint and format.
	 */
	public String getEndpoint(){
		return this.endpoint;
	}

	public void setEndpoint(String endpoint){
		this.endpoint = endpoint;
	}

	public String getAccessKey(){
		return this.accessKey;
	}

	public void setAccessKey(String accessKey){
		this.accessKey = accessKey;
	}

	public String getSecretKey(){
		return this.secretKey;
	}

	public void setSecretKey(String secretKey){
		this.secretKey = secretKey;
	}

	/*
	 * Takes an HTTP Method, a resource and a map of arguments and
	 * returns a CloseableHTTPResponse.
	 */
	public CloseableHttpResponse execute(String HTTPMethod, String resource,
                                        String subresource, Map arguments) {

		String httpMethod = HTTPMethod;
		String requestPath = resource;
		StringBuffer request = new StringBuffer();
		StringBuffer headerString = new StringBuffer();
		HttpRequestBase httpRequest;
		CloseableHttpClient httpclient;
		URI uri;
		CloseableHttpResponse httpResponse = null;

		try {

			uri = new URIBuilder()
				.setScheme(this.scheme)
				.setHost(this.getEndpoint())
				.setPath(requestPath)
				.setPort(this.port)
				.build();


			if (subresource != null){
				uri = new URIBuilder(uri)
					.setCustomQuery(subresource)
					.build();
			}


			for (Iterator iter = arguments.entrySet().iterator();
			iter.hasNext();) {
				Entry entry = (Entry)iter.next();
				uri = new URIBuilder(uri)
					.setParameter(entry.getKey().toString(),
                                 entry.getValue().toString())
					.build();

			}

			request.append(uri);

			headerString.append(HTTPMethod.toUpperCase().trim() + "\n\n\n");

			OffsetDateTime dateTime = OffsetDateTime.now(ZoneId.of("GMT"));
			DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
			String date = dateTime.format(formatter);

			headerString.append(date + "\n");
			headerString.append(requestPath);

			if (HTTPMethod.equalsIgnoreCase("PUT")){
				httpRequest = new HttpPut(uri);
			} else if (HTTPMethod.equalsIgnoreCase("POST")){
				httpRequest = new HttpPost(uri);
			} else if (HTTPMethod.equalsIgnoreCase("GET")){
				httpRequest = new HttpGet(uri);
			} else if (HTTPMethod.equalsIgnoreCase("DELETE")){
				httpRequest = new HttpDelete(uri);
			} else {
				System.err.println("The HTTP Method must be PUT,
				POST, GET or DELETE.");
				throw new IOException();
			}

			httpRequest.addHeader("Date", date);
			httpRequest.addHeader("Authorization", "AWS " + this.getAccessKey()
			+ ":" + base64Sha1Hmac(headerString.toString(),
			this.getSecretKey()));

			httpclient = HttpClients.createDefault();
			httpResponse = httpclient.execute(httpRequest);

		} 	catch  (URISyntaxException e){
			System.err.println("The URI is not formatted properly.");
			e.printStackTrace();
		}  catch (IOException e){
			System.err.println("There was an error making the request.");
			e.printStackTrace();
		}
			return httpResponse;
	}

	/*
	 * Takes a uri and a secret key and returns a base64-encoded
	 * SHA-1 HMAC.
	 */
	public String base64Sha1Hmac(String uri, String secretKey) {
		try {

			byte[] keyBytes = secretKey.getBytes("UTF-8");
			SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

			Mac mac = Mac.getInstance("HmacSHA1");
			mac.init(signingKey);

			byte[] rawHmac = mac.doFinal(uri.getBytes("UTF-8"));

			Encoder base64 = Base64.getEncoder();
			return base64.encodeToString(rawHmac);

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}

後続の CephAdminAPIClient の例は、CephAdminAPI クラスをインスタンス化する方法、リクエストパラメーターのマップをビルドし、execute() メソッドを使用してユーザーを作成、取得、更新、および削除する方法を示しています。

import java.io.IOException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import java.util.*;


public class CephAdminAPIClient {

	public static void main (String[] args){

		CephAdminAPI adminApi = new CephAdminAPI ("FFC6ZQ6EMIF64194158N",
		                            "Xac39eCAhlTGcCAUreuwe1ZuH5oVQFa51lbEMVoT",
		                            "ceph-client");

		/*
		 * Create a user
		 */
		Map requestArgs = new HashMap();
		requestArgs.put("access", "usage=read, write; users=read, write");
		requestArgs.put("display-name", "New User");
		requestArgs.put("email", "new-user@email.com");
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		CloseableHttpResponse response =
			adminApi.execute("PUT", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		HttpEntity entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}

		/*
		 * Get a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		response = adminApi.execute("GET", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}

		/*
		 * Modify a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("display-name", "John Doe");
		requestArgs.put("email", "johndoe@email.com");
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");
		requestArgs.put("max-buckets", "100");

		response = adminApi.execute("POST", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}


		/*
		 * Create a subuser
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");
		requestArgs.put("subuser", "foobar");

		response = adminApi.execute("PUT", "/admin/user", "subuser", requestArgs);
		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}


		/*
		 * Delete a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		response = adminApi.execute("DELETE", "/admin/user", null, requestArgs);
		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}
	}
}

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドS3 認証 セクションを参照してください。
  • Amazon S3 認証手順の詳細は、Amazon Simple Storage Service ドキュメントの Signing and Authenticating REST Requests セクションを参照してください。

2.4. 管理ユーザーの作成

重要

Ceph Object Gateway ノードから radosgw-admin コマンドを実行するには、ノードに admin キーがあることを確認します。admin キーは、任意の Ceph Monitor ノードからコピーできます。

前提条件

  • Ceph Object Gateway ノードへのルートレベルのアクセス。

手順

  1. Object Gateway ユーザーを作成します。

    構文

    radosgw-admin user create --uid="USER_NAME" --display-name="DISPLAY_NAME"

    [user@client ~]$ radosgw-admin user create --uid="admin-api-user" --display-name="Admin API User"

    radosgw-admin コマンドラインインターフェイスはユーザーを返します。

    出力例

    {
        "user_id": "admin-api-user",
        "display_name": "Admin API User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "admin-api-user",
                "access_key": "NRWGT19TWMYOB1YDBV1Y",
                "secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }

  2. 作成するユーザーに管理ケイパビリティーを割り当てます。

    構文

    radosgw-admin caps add --uid="USER_NAME" --caps="users=*"

    [user@client ~]$ radosgw-admin caps add --uid=admin-api-user --caps="users=*"

    radosgw-admin コマンドラインインターフェイスはユーザーを返します。"caps": には、ユーザーに割り当てられたケイパビリティーがあります。

    出力例

    {
        "user_id": "admin-api-user",
        "display_name": "Admin API User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "admin-api-user",
                "access_key": "NRWGT19TWMYOB1YDBV1Y",
                "secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
            }
        ],
        "swift_keys": [],
        "caps": [
            {
                "type": "users",
                "perm": "*"
            }
        ],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }

    これで、管理者権限を持つユーザーが作成されます。

2.5. ユーザー情報の取得

ユーザーの情報の取得

機能

users=read

構文

GET /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
情報が要求されるユーザー。
文字列
foo_user
必須。
はい

レスポンスエンティティー

user
詳細
ユーザーデータ情報のコンテナー
Container
該当なし
user_id
詳細
ユーザー ID。
文字列
user
display_name
詳細
ユーザーの表示名。
文字列
user
suspended
詳細
ユーザーが一時停止してきる場合は True。
Boolean
user
max_buckets
詳細
ユーザーが所有するバケットの最大数。
Integer
user
subusers
詳細
このユーザーアカウントに関連付けられたサブユーザー。
Container
user
keys
詳細
このユーザーアカウントに関連付けられた S3 キー。
Container
user
swift_keys
詳細
このユーザーアカウントに関連付けられた Swift 鍵。
Container
user
caps
詳細
ユーザー機能。
Container
user

成功すると、応答にはユーザー情報が含まれます。

特別なエラーレスポンス

なし。

2.6. ユーザーの作成

新しいユーザーを作成します。デフォルトでは、S3 キーペアが自動的に作成され、レスポンスで返されます。access-key または secret-key のいずれかのみを指定すると、省略キーが自動的に生成されます。デフォルトでは、生成されたキーは、既存のキーペアを置き換えることなくキーリングに追加されます。access-key が指定され、ユーザーが所有する既存のキーを参照すると、そのキーは変更されます。

機能

`users=write`

構文

PUT /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
作成されるユーザー ID。
文字列
foo_user
必須。
はい
display-name
詳細
作成するユーザーの表示名。
文字列
foo_user
必須。
はい
email
詳細
ユーザーに関連付けられたメールアドレス。
文字列
foo@bar.com
必須。
いいえ
key-type
詳細
生成されるキータイプ。オプションは swift、s3 (デフォルト) です。
文字列
s3 [s3]
必須。
いいえ
access-key
詳細
アクセスキーを指定します。
文字列
ABCD0EF12GHIJ2K34LMN
必須。
いいえ
secret-key
詳細
シークレットキーを指定します。
文字列
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
必須。
いいえ
user-caps
詳細
ユーザー機能。
文字列
usage=read, write; users=read
必須。
いいえ
generate-key
詳細
新しいキーペアを生成し、既存のキーリングに追加します。
Boolean
True [True]
必須。
いいえ
max-buckets
詳細
ユーザーが所有できるバケットの最大数を指定します。
Integer
500 [1000]
必須。
いいえ
suspended
詳細
ユーザーが一時停止するかどうかを指定します。
Boolean
False [False]
必須。
いいえ

レスポンスエンティティー

user
詳細
ユーザーが一時停止するかどうかを指定します。
Boolean
いいえ
user_id
詳細
ユーザー ID。
文字列
user
display_name
詳細
ユーザーの表示名。
文字列
user
suspended
詳細
ユーザーが一時停止してきる場合は True。
Boolean
user
max_buckets
詳細
ユーザーが所有するバケットの最大数。
Integer
user
subusers
詳細
このユーザーアカウントに関連付けられたサブユーザー。
Container
user
keys
詳細
このユーザーアカウントに関連付けられた S3 キー。
Container
user
swift_keys
詳細
このユーザーアカウントに関連付けられた Swift 鍵。
Container
user
caps
詳細
ユーザー機能。
Container
成功すると、応答にはユーザー情報が含まれます。

特別なエラーレスポンス

UserExists
詳細
既存ユーザーの作成を試行。
コード
409 Conflict
InvalidAccessKey
詳細
無効なアクセスキーが指定されている。
コード
400 Bad Request
InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
InvalidSecretKey
詳細
無効なシークレットキーが指定されている。
コード
400 Bad Request
KeyExists
詳細
提供されたアクセスキーが存在し、別のユーザーに属している。
コード
409 Conflict
EmailExists
詳細
提供されるメールアドレスが存在する。
コード
409 Conflict
InvalidCap
詳細
無効な管理者機能の付与を試行。
コード
400 Bad Request

関連情報

2.7. ユーザーの変更

既存ユーザーの変更

機能

`users=write`

構文

POST /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
作成されるユーザー ID。
文字列
foo_user
必須。
はい
display-name
詳細
作成するユーザーの表示名。
文字列
foo_user
必須。
はい
email
詳細
ユーザーに関連付けられたメールアドレス。
文字列
foo@bar.com
必須。
いいえ
generate-key
詳細
新しいキーペアを生成し、既存のキーリングに追加します。
Boolean
True [False]
必須。
いいえ
access-key
詳細
アクセスキーを指定します。
文字列
ABCD0EF12GHIJ2K34LMN
必須。
いいえ
secret-key
詳細
シークレットキーを指定します。
文字列
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
必須。
いいえ
key-type
詳細
生成されるキータイプ。オプションは swift、s3 (デフォルト) です。
文字列
s3
必須。
いいえ
user-caps
詳細
ユーザー機能。
文字列
usage=read, write; users=read
必須。
いいえ
max-buckets
詳細
ユーザーが所有できるバケットの最大数を指定します。
Integer
500 [1000]
必須。
いいえ
suspended
詳細
ユーザーが一時停止するかどうかを指定します。
Boolean
False [False]
必須。
いいえ

レスポンスエンティティー

user
詳細
ユーザーが一時停止するかどうかを指定します。
Boolean
いいえ
user_id
詳細
ユーザー ID。
文字列
user
display_name
詳細
ユーザーの表示名。
文字列
user
suspended
詳細
ユーザーが一時停止してきる場合は True。
Boolean
user
max_buckets
詳細
ユーザーが所有するバケットの最大数。
Integer
user
subusers
詳細
このユーザーアカウントに関連付けられたサブユーザー。
Container
user
keys
詳細
このユーザーアカウントに関連付けられた S3 キー。
Container
user
swift_keys
詳細
このユーザーアカウントに関連付けられた Swift 鍵。
Container
user
caps
詳細
ユーザー機能。
Container
成功すると、応答にはユーザー情報が含まれます。

特別なエラーレスポンス

InvalidAccessKey
詳細
無効なアクセスキーが指定されている。
コード
400 Bad Request
InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
InvalidSecretKey
詳細
無効なシークレットキーが指定されている。
コード
400 Bad Request
KeyExists
詳細
提供されたアクセスキーが存在し、別のユーザーに属している。
コード
409 Conflict
EmailExists
詳細
提供されるメールアドレスが存在する。
コード
409 Conflict
InvalidCap
詳細
無効な管理者機能の付与を試行。
コード
400 Bad Request

関連情報

2.8. ユーザーの削除

既存のユーザーを削除します。

機能

`users=write`

構文

DELETE /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
削除するユーザー ID。
文字列
foo_user
必須。
はい
purge-data
詳細
指定すると、ユーザーに属するバケットとオブジェクトも削除されます。
Boolean
True
必須。
いいえ

レスポンスエンティティー

なし。

特別なエラーレスポンス

なし。

関連情報

2.9. サブユーザーの作成

Swift API を使用するクライアントに主に役立つ新しいサブユーザーを作成します。

注記

有効なリクエストには、gen-subuser または subuser のいずれかが必要です。通常、サブユーザーには、access を指定してパーミッションを付与する必要があります。ユーザー作成 (subusersecret なしで指定されている場合) と同様に、シークレットキーは自動的に生成されます。

機能

`users=write`

構文

PUT /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
サブユーザーを作成するユーザー ID。
文字列
foo_user
必須。
はい
subuser
詳細
作成するサブユーザー ID を指定します。
文字列
sub_foo
必須。
必須 (または gen-subuser)
gen-subuser
詳細
作成するサブユーザー ID を指定します。
文字列
sub_foo
必須。
必須 (または gen-subuser)
secret-key
詳細
シークレットキーを指定します。
文字列
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
必須。
いいえ
key-type
詳細
生成されるキータイプ。オプションは swift (デフォルト)、s3 です。
文字列
swift [swift]
必須。
いいえ
access
詳細
サブユーザーのアクセスパーミッションを設定する場合は、read, write, readwrite, full のいずれかである必要があります。
文字列
read
必須。
いいえ
generate-secret
詳細
シークレットキーを生成します。
Boolean
True [False]
必須。
いいえ

レスポンスエンティティー

subusers
詳細
ユーザーアカウントに関連付けられたサブユーザー
Container
該当なし
permissions
詳細
ユーザーアカウントへのサブユーザーアクセス
文字列
subusers

成功すると、レスポンスにはサブユーザー情報が含まれます。

特別なエラーレスポンス

SubuserExists
詳細
指定したサブユーザーが存在する。
コード
409 Conflict
InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
InvalidSecretKey
詳細
無効なシークレットキーが指定されている。
コード
400 Bad Request
InvalidAccess
詳細
無効なサブユーザーアクセスが指定されている。
コード
400 Bad Request

2.10. サブユーザーの変更

既存のサブユーザーを変更します。

機能

`users=write`

構文

POST /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
サブユーザーを作成するユーザー ID。
文字列
foo_user
必須。
はい
subuser
詳細
変更するサブユーザー ID。
文字列
sub_foo
必須。
generate-secret
詳細
サブユーザーの新しい秘密鍵を生成し、既存のキーを置き換えます。
Boolean
True [False]
必須。
いいえ
secret
詳細
シークレットキーを指定します。
文字列
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
必須。
いいえ
key-type
詳細
生成されるキータイプ。オプションは swift (デフォルト)、s3 です。
文字列
swift [swift]
必須。
いいえ
access
詳細
サブユーザーのアクセスパーミッションを設定する場合は、read, write, readwrite, full のいずれかである必要があります。
文字列
read
必須。
いいえ

レスポンスエンティティー

subusers
詳細
ユーザーアカウントに関連付けられたサブユーザー
Container
該当なし
id
詳細
サブユーザー ID
文字列
subusers
permissions
詳細
ユーザーアカウントへのサブユーザーアクセス
文字列
subusers

成功すると、レスポンスにはサブユーザー情報が含まれます。

特別なエラーレスポンス

InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
InvalidSecretKey
詳細
無効なシークレットキーが指定されている。
コード
400 Bad Request
InvalidAccess
詳細
無効なサブユーザーアクセスが指定されている。
コード
400 Bad Request

2.11. サブユーザーの削除

既存のサブユーザーを削除します。

機能

`users=write`

構文

DELETE /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
削除するユーザー ID。
文字列
foo_user
必須。
はい
subuser
詳細
削除されるサブユーザー ID。
文字列
sub_foo
必須。
はい
purge-keys
詳細
サブユーザーに属する鍵を削除します。
Boolean
True [True]
必須。
いいえ

レスポンスエンティティー

なし。

特別なエラーレスポンス

なし。

2.12. ユーザーへの機能の追加

指定したユーザーに管理ケイパビリティーを追加します。

機能

`users=write`

構文

PUT /admin/user?caps&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
管理機能を追加するユーザー ID。
文字列
foo_user
必須。
はい
user-caps
詳細
ユーザーに追加する管理機能。
文字列
usage=read, write
必須。
はい

レスポンスエンティティー

user
詳細
ユーザーデータ情報のコンテナー
Container
該当なし
user_id
詳細
ユーザー ID
文字列
user
caps
詳細
ユーザー機能。
Container
user

成功すると、レスポンスにはユーザーのケイパビリティーが含まれます。

特別なエラーレスポンス

InvalidCap
詳細
無効な管理者機能の付与を試行。
コード
400 Bad Request

2.13. ユーザーからの機能の削除

指定したユーザーから管理ケイパビリティーを削除します。

機能

`users=write`

構文

DELETE /admin/user?caps&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
管理機能を削除するユーザー ID。
文字列
foo_user
必須。
はい
user-caps
詳細
ユーザーから削除する管理機能。
文字列
usage=read, write
必須。
はい

レスポンスエンティティー

user
詳細
ユーザーデータ情報のコンテナー
Container
該当なし
user_id
詳細
ユーザー ID。
文字列
user
caps
詳細
ユーザー機能。
Container
user

成功すると、レスポンスにはユーザーのケイパビリティーが含まれます。

特別なエラーレスポンス

InvalidCap
詳細
無効な管理機能の削除を試行します。
コード
400 Bad Request
NoSuchCap
詳細
ユーザーは指定されている機能を処理しません。
コード
404 Not Found

2.14. キーの作成

新しいキーを作成します。subuser を指定すると、デフォルトで作成されたキーは swift タイプになります。access-key または secret-key のいずれかのみが指定された場合、コミットされたキーは自動的に生成されます。secret-key のみが指定されている場合、access-key は自動的に生成されます。デフォルトでは、生成されたキーは、既存のキーペアを置き換えることなくキーリングに追加されます。access-key が指定され、ユーザーが所有する既存のキーを参照すると、そのキーは変更されます。レスポンスは、作成された鍵と同じタイプの鍵をすべて一覧表示するコンテナーです。

注記

swift キーの作成時に、access-key オプションを指定しても効果はありません。また、ユーザーまたはサブユーザーごとに 1 つの swift キーのみを保持することができます。

機能

`users=write`

構文

PUT /admin/user?key&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
新しいキーを受け取るユーザー ID。
文字列
foo_user
必須。
はい
subuser
詳細
新しいキーを受け取るサブユーザー ID。
文字列
sub_foo
必須。
いいえ
key-type
詳細
生成されるキータイプ。オプションは swift、s3 (デフォルト) です。
文字列
s3 [s3]
必須。
いいえ
access-key
詳細
アクセスキーを指定します。
文字列
AB01C2D3EF45G6H7IJ8K
必須。
いいえ
secret-key
詳細
シークレットキーを指定します。
文字列
0ab/CdeFGhij1klmnopqRSTUv1WxyZabcDEFgHij
必須。
いいえ
generate-key
詳細
新しいキーペアを生成し、既存のキーリングに追加します。
Boolean
True [True]
必須。
いいえ

レスポンスエンティティー

keys
詳細
このユーザーアカウントに関連付けられたタイプのキー。
Container
該当なし
user
詳細
キーに関連付けられたユーザーアカウント。
文字列
keys
access-key
詳細
アクセスキー。
文字列
keys
secret-key
詳細
シークレットキー。
文字列
keys

特別なエラーレスポンス

InvalidAccessKey
詳細
無効なアクセスキーが指定されている。
コード
400 Bad Request
InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
InvalidSecretKey
詳細
無効なシークレットキーが指定されている。
コード
400 Bad Request
InvalidKeyType
詳細
無効なキータイプが指定されている。
コード
400 Bad Request
KeyExists
詳細
提供されたアクセスキーが存在し、別のユーザーに属している。
コード
409 Conflict

2.15. 鍵の削除

既存のキーを削除します。

機能

`users=write`

構文

DELETE /admin/user?key&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

access-key
説明
削除する S3 キーペアに属する S3 アクセスキー。
タイプ
文字列
AB01C2D3EF45G6H7IJ8K
必須。
はい
uid
詳細
キーの削除元のユーザー。
文字列
foo_user
必須。
いいえ
subuser
詳細
キーの削除元のサブユーザー。
文字列
sub_foo
必須。
いいえ
key-type
詳細

削除するキータイプ。オプションは swift、s3 です。

注記

swift キーを削除するために必要です。

タイプ
文字列
swift
必須。
いいえ

特別なエラーレスポンス

なし。

レスポンスエンティティー

なし。

2.16. バケット通知

ストレージ管理者は、これらの API を使用してバケット通知メカニズムの設定および制御インターフェイスを提供できます。API トピックは、特定のエンドポイントの定義が含まれる名前が付けられたオブジェクトです。バケット通知では、トピックを特定のバケットに関連付けます。S3 バケット操作 セクションでは、バケット通知の詳細が表示されます。

注記

すべてのトピックアクションでは、パラメーターは URL エンコードされ、application/x-www-form-urlencoded コンテンツタイプを使用してメッセージのボディーで送信されます。

注記

トピックの更新を有効にするには、トピックにすでに関連付けられているバケット通知を再作成する必要があります。

2.16.1. 前提条件

  • Ceph Object Gateway 上にバケット通知を作成します。

2.16.2. バケット通知の概要

バケット通知により、バケットで特定のイベントが発生した場合に、Ceph Object Gateway から情報を送る方法が提供されます。バケット通知は HTTP、AMQP0.9.1、および Kafka エンドポイントに送信できます。特定バケットおよび特定のトピック上のイベントのバケット通知を送信するために、通知エントリーを作成する必要があります。バケット通知は、イベントタイプのサブセットに作成することも、デフォルトですべてのイベントタイプに対して作成できます。バケット通知は、キーの接頭辞または接尾辞、キーに一致する正規表現、オブジェクトに割り当てられたメタデータ属性、またはオブジェクトタグに基づいてイベントをフィルターリングできます。バケット通知には、バケット通知メカニズムの設定および制御インターフェイスを提供する REST API があります。

2.16.3. 永続通知

永続的な通知により、Ceph ObjectGateway からトピックで設定されたエンドポイントへの通知の信頼性の高い非同期配信が可能になります。エンドポイントへの配信は、リクエスト中に同期的に実行されるため、通常の通知も信頼性があります。永続的な通知により、Ceph Object Gateway はエンドポイントがダウンした場合や、操作中にネットワークの問題がある場合でも、通知は送信を再試行します。これは、エンドポイントに正常に配信されない場合に通知が再試行されます。通知は、通知操作に関連するその他のアクションがすべて成功する場合にのみ送信されます。エンドポイントが長期間ダウンすると、通知キューがいっぱいになり、これらのエンドポイントの通知が設定された S3 操作が失敗します。

注記

kafka-ack-level=none を使用すると、メッセージの失敗が示されないため、ブローカーが停止している間に送信されたメッセージは、ブローカーが再び起動したときに再試行されません。ブローカーが再び起動すると、新しい通知のみが表示されます。

2.16.4. トピックの作成

バケット通知を作成する前に、トピックを作成できます。トピックは Simple Notification Service (SNS) エンティティーで、すべてのトピック操作 (つまり createdeletelist、および get) は SNS 操作です。トピックには、バケット通知の作成時に使用されるエンドポイントパラメーターが必要です。リクエストが正常に行われると、レスポンスには、バケット通知要求でこのトピックを参照するために後で使用できるトピックの Amazon Resource Name (ARN) が含まれます。

注記

topic_arn はバケット通知設定を提供し、トピックの作成後に生成されます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ルートレベルのアクセス。
  • Ceph Object Gateway のインストール
  • ユーザーアクセスキーおよびシークレットキー。
  • エンドポイントパラメーター。

手順

  1. 以下の要求形式でトピックを作成します。

    構文

    POST
    Action=CreateTopic
    &Name=TOPIC_NAME
    [&Attributes.entry.1.key=amqp-exchange&Attributes.entry.1.value=EXCHANGE]
    [&Attributes.entry.2.key=amqp-ack-level&Attributes.entry.2.value=none|broker|routable]
    [&Attributes.entry.3.key=verify-ssl&Attributes.entry.3.value=true|false]
    [&Attributes.entry.4.key=kafka-ack-level&Attributes.entry.4.value=none|broker]
    [&Attributes.entry.5.key=use-ssl&Attributes.entry.5.value=true|false]
    [&Attributes.entry.6.key=ca-location&Attributes.entry.6.value=FILE_PATH]
    [&Attributes.entry.7.key=OpaqueData&Attributes.entry.7.value=OPAQUE_DATA]
    [&Attributes.entry.8.key=push-endpoint&Attributes.entry.8.value=ENDPOINT]
    [&Attributes.entry.9.key=persistent&Attributes.entry.9.value=true|false]

    リクエストパラメーターを以下に示します。

    • Endpoint: 通知を送信するエンドポイントの URL。
    • OpaqueData: 不透明なデータはトピック設定で設定され、トピックによって発生するすべての通知に追加されます。
    • persistent: このエンドポイントへの通知が永続的 (非同期) であるかを示します。デフォルト値は false です。
    • HTTP エンドポイント:

      • URL: https://FQDN:PORT
      • ポートのデフォルト: HTTP または HTTPS にそれぞれ 80 または 443 を使用します。
      • verify-ssl: サーバー証明書がクライアントによって検証されているかどうかを示します。デフォルトでは true です。
    • AMQP0.9.1 エンドポイント:

      • URL: amqp://USER:PASSWORD@FQDN:PORT[/VHOST].
      • ユーザーおよびグループのデフォルト値はそれぞれ guestguest です。
      • ユーザーおよびパスワードの詳細は HTTPS 経由で提供する必要があります。そうしないと、トピック作成要求は拒否されます。
      • Port のデフォルト値 は 5672 です。
      • vhost のデフォルトは/です。
      • amqp-exchange: 交換は存在し、トピックに基づいてメッセージをルーティングできる必要があります。これは AMQP0.9.1 の必須パラメーターです。同じエンドポイントを参照するさまざまなトピックが同じ交換を使用する必要があります。
      • amqp-ack-level: 最終宛先に送信される前にメッセージがブローカーで永続化される可能性があるため、終了確認は不要です。承認メソッドは 3 つあります。

        • none: ブローカーに送信された場合にメッセージが 配信されている と見なされます。
        • broker: デフォルトでは、メッセージはブローカーによって確認応答されると 配信されている と見なされます。
        • routable: ブローカーがコンシューマーにルーティングできる場合、メッセージは 配信されている と見なされます。

          注記

          特定のパラメーターのキーと値は、同じ行または特定の順序で存在する必要はありませんが、同じインデックスを使用する必要があります。属性インデックスは、特定の値から順番にしたり、開始したりする必要はありません。

          注記

          topic-name は AMQP トピックに使用されます。

    • Kafka エンドポイント:

      • URL: kafka://USER:PASSWORD@FQDN:PORT.
      • use-ssl がデフォルトで false に設定される場合。use-ssltrue に設定されている場合は、ブローカーへの接続にセキュアな接続が使用されます。
      • ca-location が指定され、セキュアな接続が使用される場合は、ブローカーを認証するために、デフォルトの CA ではなく、指定された CA が使用されます。
      • ユーザーおよびパスワードは HTTP[S] でのみ提供できます。そうしないと、トピック作成要求は拒否されます。
      • ユーザーおよびパスワードは use-ssl とのみ提供でき、ブローカーへの接続に失敗していました。
      • Port のデフォルト値 は 9092 です。
      • kafka-ack-level: 最終宛先に送信される前にメッセージがブローカーで永続化される可能性があるため、終了確認は不要です。承認メソッドは 2 つあります。

        • none: ブローカーに送信された場合にメッセージが 配信されている と見なされます。
        • broker: デフォルトでは、メッセージはブローカーによって確認応答されると 配信されている と見なされます。

応答形式の例を以下に示します。

<CreateTopicResponse xmlns="https://sns.amazonaws.com/doc/2010-03-31/">
    <CreateTopicResult>
        <TopicArn></TopicArn>
    </CreateTopicResult>
    <ResponseMetadata>
        <RequestId></RequestId>
    </ResponseMetadata>
</CreateTopicResponse>

注記

レスポンスのトピックの Amazon Resource Name (ARN) の形式は、arn:aws:sns:ZONE_GROUP:TENANT:TOPIC になります。

以下は AMQP0.9.1 エンドポイントの例になります。

client.create_topic(Name='my-topic' , Attributes={'push-endpoint': 'amqp://127.0.0.1:5672', 'amqp-exchange': 'ex1', 'amqp-ack-level': 'broker'}) "

2.16.5. トピック情報の取得

指定したトピックに関する情報を返します。これには、指定されている場合にはエンドポイント情報を含めることができます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ルートレベルのアクセス。
  • Ceph Object Gateway のインストール
  • ユーザーアクセスキーおよびシークレットキー。
  • エンドポイントパラメーター。

手順

  1. 以下の要求形式でトピック情報を取得します。

    構文

    POST
    Action=GetTopic
    &TopicArn=TOPIC_ARN

    レスポンスフォーマットの例を以下に示します。

    <GetTopicResponse>
    <GetTopicRersult>
    <Topic>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    <HasStoredSecret></HasStoredSecret>
    <Persistent></Persistent>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </Topic>
    </GetTopicResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </GetTopicResponse>

    以下は、タグおよび定義です。

    • User: トピックを作成したユーザーの名前。
    • Name: トピックの名前。
    • JSON 形式のエンドポイントには以下が含まれます。

      • EndpointAddress: エンドポイントの URL。エンドポイント URL にユーザーおよびパスワード情報が含まれる場合、リクエストは HTTPS 経由で行う必要があります。それ以外の場合、トピックの取得要求は拒否されます。

        • EndPointArgs: エンドポイント引数。
        • EndpointTopic: エンドポイントに送信されるトピック名は、上記の例のトピック名とは異なる場合があります。
        • HasStoredSecret: エンドポイントの URL にユーザーおよびパスワード情報が含まれる場合に true
        • 永続: トピックが永続する場合は true
    • TopicArn: Topic ARN。
    • OpaqueData: これはトピック上の不透明なデータセットです。

2.16.6. トピックの一覧表示

ユーザーが定義したトピックを一覧表示します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ルートレベルのアクセス。
  • Ceph Object Gateway のインストール
  • ユーザーアクセスキーおよびシークレットキー。
  • エンドポイントパラメーター。

手順

  1. 以下の要求形式でトピック情報を一覧表示します。

    構文

    POST
    Action=ListTopics

    レスポンスフォーマットの例を以下に示します。

    <ListTopicdResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ListTopicsRersult>
    <Topics>
    <member>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </member>
    </Topics>
    </ListTopicsResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </ListTopicsResponse>
    注記

    エンドポイント URL にユーザーおよびパスワード情報が含まれる場合は、トピックのいずれかで要求を行う必要があります。そうしないと、トピック一覧の要求は拒否されます。

2.16.7. トピックの削除

削除したトピックを削除すると、操作はなく、失敗は発生しません。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ルートレベルのアクセス。
  • Ceph Object Gateway のインストール
  • ユーザーアクセスキーおよびシークレットキー。
  • エンドポイントパラメーター。

手順

  1. 以下の要求形式でトピックを削除します。

    構文

    POST
    Action=DeleteTopic
    &TopicArn=TOPIC_ARN

    レスポンスフォーマットの例を以下に示します。

    <DeleteTopicResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </DeleteTopicResponse>

2.16.8. イベントレコード

イベントは、Ceph Object Gateway によって行われる操作に関する情報を保持し、選択したエンドポイント (HTTP、HTTPS、Kafka、または AMQ0.9.1 など) 上のペイロードとして送信されます。イベントレコードは JSON 形式になります。

{"Records":[
    {
        "eventVersion":"2.1",
        "eventSource":"ceph:s3",
        "awsRegion":"us-east-1",
        "eventTime":"2019-11-22T13:47:35.124724Z",
        "eventName":"ObjectCreated:Put",
        "userIdentity":{
            "principalId":"tester"
        },
        "requestParameters":{
            "sourceIPAddress":""
        },
        "responseElements":{
            "x-amz-request-id":"503a4c37-85eb-47cd-8681-2817e80b4281.5330.903595",
            "x-amz-id-2":"14d2-zone1-zonegroup1"
        },
        "s3":{
            "s3SchemaVersion":"1.0",
            "configurationId":"mynotif1",
            "bucket":{
                "name":"mybucket1",
                "ownerIdentity":{
                    "principalId":"tester"
                },
                "arn":"arn:aws:s3:us-east-1::mybucket1",
                "id":"503a4c37-85eb-47cd-8681-2817e80b4281.5332.38"
            },
            "object":{
                "key":"myimage1.jpg",
                "size":"1024",
                "eTag":"37b51d194a7513e45b56f6524f2d51f2",
                "versionId":"",
                "sequencer": "F7E6D75DC742D108",
                "metadata":[],
                "tags":[]
            }
        },
        "eventId":"",
        "opaqueData":"me@example.com"
    }
]}

以下はイベントレコードのキーおよびその定義です。

  • awsRegion: Zonegroup。
  • eventTime: イベントがトリガーされたタイミングを示すタイムスタンプ。
  • eventName: イベントのタイプ。
  • userIdentity.principalId: イベントを開始したユーザーの ID。
  • requestParameters.sourceIPAddress: イベントをトリガーしたクライアントの IP アドレス。このフィールドはサポートされません。
  • responseElements.x-amz-request-id: イベントをトリガーしたリクエスト ID。
  • responseElements.x_amz_id_2: イベントがトリガーされた Ceph Object Gateway の IP アドレスID 形式は RGWID-ZONE-ZONEGROUP です。
  • s3.configurationId: イベントを作成した通知 ID。
  • s3.bucket.name: バケットの名前。
  • s3.bucket.ownerIdentity.principalId: バケットの所有者。
  • s3.bucket.arn: バケットの Amazon Resource Name(ARN)。
  • s3.bucket.id: バケットのアイデンティティー。
  • s3.object.key: オブジェクトキー。
  • s3.object.size: オブジェクトのサイズ
  • s3.object.eTag: オブジェクト etag。
  • s3.object.version: バージョン化されたバケットのオブジェクトバージョン。
  • s3.object.sequencer: 16 進数形式でオブジェクトごとの変更識別子を増加させます。
  • s3.object.metadata: x-amz-meta として送信されるオブジェクトにメタデータセット。
  • s3.object.tags: オブジェクトに設定されたタグ。
  • s3.eventId: イベントの一意のアイデンティティー
  • s3.opaqueData: Opaque データはトピック設定で設定され、トピックによってトリガーされるすべての通知に追加されます。

関連情報

2.16.9. サポートされるイベントタイプ

以下のイベントタイプがサポートされます。

  • s3:ObjectCreated:*
  • s3:ObjectCreated:Put
  • s3:ObjectCreated:Post
  • s3:ObjectCreated:Copy
  • s3:ObjectCreated:CompleteMultipartUpload
  • s3:ObjectRemoved:*
  • s3:ObjectRemoved:Delete
  • s3:ObjectRemoved:DeleteMarkerCreated

2.17. バケット情報の取得

既存のバケットのサブセットに関する情報を取得します。uidbucket なしで指定されると、そのユーザーに属するすべてのバケットが返されます。bucket のみが指定されている場合は、その特定のバケットの情報を取得します。

機能

`buckets=read`

構文

GET /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
情報を返すバケット。
文字列
foo_bucket
必須。
いいえ
uid
詳細
バケット情報を取得するユーザー。
文字列
foo_user
必須。
いいえ
stats
詳細
バケットの統計を返します。
Boolean
True [False]
必須。
いいえ

レスポンスエンティティー

stats
詳細
バケットごとの情報
Container
該当なし
buckets
詳細
1 つ以上のバケットコンテナーの一覧が含まれます。
Container
buckets
bucket
詳細
単一バケット情報用のコンテナー。
Container
buckets
name
詳細
バケットの名前。
文字列
bucket
pool
詳細
バケットが保存されているプール。
文字列
bucket
id
詳細
一意のバケット ID。
文字列
bucket
marker
詳細
内部バケットタグ。
文字列
bucket
owner
詳細
バケット所有者のユーザー ID。
文字列
bucket
使用方法
詳細
ストレージの使用情報。
Container
bucket
index
詳細
バケットインデックスのステータス。
文字列
bucket

成功すると、要求はバケット情報と共にバケットコンテナーを返します。

特別なエラーレスポンス

IndexRepairFailed
詳細
バケットインデックスの修復に失敗しました。
コード
409 Conflict

2.18. バケットインデックスを確認します。

既存のバケットのインデックスを確認します。

注記

check-objects で複数パートオブジェクトアカウンティングを確認するには、fix を True に設定する必要があります。

機能

buckets=write

構文

GET /admin/bucket?index&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
情報を返すバケット。
文字列
foo_bucket
必須。
はい
check-objects
詳細
複数パートオブジェクトアカウンティングを確認します。
Boolean
True [False]
必須。
いいえ
fix
詳細
また、チェック時にバケットインデックスも修正します。
Boolean
False [False]
必須。
いいえ

レスポンスエンティティー

index
詳細
バケットインデックスのステータス。
文字列

特別なエラーレスポンス

IndexRepairFailed
詳細
バケットインデックスの修復に失敗しました。
コード
409 Conflict

2.19. バケットの削除

既存のバケットを削除します。

機能

`buckets=write`

構文

DELETE /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
削除するバケット。
文字列
foo_bucket
必須。
はい
purge-objects
説明
削除する前に、バケットのオブジェクトを削除してください。
タイプ
Boolean
True [False]
必須。
いいえ

レスポンスエンティティー

なし。

特別なエラーレスポンス

BucketNotEmpty
詳細
空でないバケットの削除を試行しました。
コード
409 Conflict
ObjectRemovalFailed
詳細
オブジェクトを削除できません。
コード
409 Conflict

2.22. バケットまたはオブジェクトポリシーを取得する

オブジェクトまたはバケットのポリシーを読み取ります。

機能

`buckets=read`

構文

GET /admin/bucket?policy&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
ポリシーを読み取るバケット。
文字列
foo_bucket
必須。
はい
オブジェクト
詳細
ポリシーの読み取り元となるオブジェクト。
文字列
foo.txt
必須。
いいえ

レスポンスエンティティー

policy
詳細
アクセス制御ポリシー。
Container
該当なし

成功した場合には、オブジェクトまたはバケットポリシーを返します。

特別なエラーレスポンス

IncompleteBody
詳細
バケットポリシー要求にバケットが指定されていないか、またはオブジェクトがオブジェクトポリシー要求に指定されていません。
コード
400 Bad Request

2.23. オブジェクトの削除

既存のオブジェクトを削除します。

注記

所有者を一時停止せずに指定する必要はありません。

機能

`buckets=write`

構文

DELETE /admin/bucket?object&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
削除されるオブジェクトを含むバケット。
文字列
foo_bucket
必須。
はい
オブジェクト
詳細
削除するオブジェクト。
文字列
foo.txt
必須。
はい

レスポンスエンティティー

なし。

特別なエラーレスポンス

NoSuchObject
詳細
指定されたオブジェクトは存在しません。
コード
404 Not Found
ObjectRemovalFailed
詳細
オブジェクトを削除できません。
コード
409 Conflict

2.24. Quotas

管理操作 API を使用すると、ユーザーおよびユーザーが所有するバケットにクォータを設定できます。クォータには、バケットのオブジェクトの最大数と、メガバイト単位のストレージの最大サイズが含まれます。

クォータを表示するには、ユーザーに users=read ケイパビリティーが必要です。クォータを設定、変更、または無効にするには、ユーザーに users=write ケイパビリティーが必要です。

クォータの有効なパラメーターには以下が含まれます。

  • Bucket: bucket オプションでは、ユーザーが所有するバケットのクォータを指定できます。
  • Maximum Objects: max-objects 設定では、オブジェクトの最大数を指定できます。負の値を設定すると、この設定が無効になります。
  • Maximum Size: max-size オプションでは、バイトの最大数のクォータを指定できます。負の値を設定すると、この設定が無効になります。
  • Quota Scope: quota-scope オプションは、クォータのスコープを設定します。オプションは bucketuser です。

2.25. ユーザークォータの取得

クォータを取得するには、read パーミッションを持つ users ケイパビリティーが設定されている必要があります。

構文

GET /admin/user?quota&uid=UID&quota-type=user

2.26. ユーザークォータの設定

クォータを設定するには、ユーザーに write パーミッションを持つ users ケイパビリティーを設定する必要があります。

構文

PUT /admin/user?quota&uid=UID&quota-type=user

コンテンツには、対応する読み取り操作でエンコードされているクォータ設定の JSON 表現が含まれている必要があります。

2.27. バケットクォータの取得

既存のバケットのサブセットに関する情報を取得します。uidbucket なしで指定されると、そのユーザーに属するすべてのバケットが返されます。bucket のみが指定されている場合は、その特定のバケットの情報を取得します。

機能

`buckets=read`

構文

GET /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

bucket
詳細
情報を返すバケット。
文字列
foo_bucket
必須。
いいえ
uid
詳細
バケット情報を取得するユーザー。
文字列
foo_user
必須。
いいえ
stats
詳細
バケットの統計を返します。
Boolean
True [False]
必須。
いいえ

レスポンスエンティティー

stats
詳細
バケットごとの情報
Container
該当なし
buckets
詳細
1 つ以上のバケットコンテナーの一覧が含まれます。
Container
該当なし
bucket
詳細
単一バケット情報用のコンテナー。
Container
buckets
name
詳細
バケットの名前。
文字列
bucket
pool
詳細
バケットが保存されているプール。
文字列
bucket
id
詳細
一意のバケット ID。
文字列
bucket
marker
詳細
内部バケットタグ。
文字列
bucket
owner
詳細
バケット所有者のユーザー ID。
文字列
bucket
使用方法
詳細
ストレージの使用情報。
Container
bucket
index
詳細
バケットインデックスのステータス。
文字列
bucket

成功すると、要求はバケット情報と共にバケットコンテナーを返します。

特別なエラーレスポンス

IndexRepairFailed
詳細
バケットインデックスの修復に失敗しました。
コード
409 Conflict

2.28. バケットクォータの設定

クォータを設定するには、ユーザーに write パーミッションを持つ users ケイパビリティーを設定する必要があります。

構文

PUT /admin/user?quota&uid=UID&quota-type=bucket

コンテンツには、対応する読み取り操作でエンコードされているクォータ設定の JSON 表現が含まれている必要があります。

2.29. 使用方法情報の取得

帯域幅の使用情報の要求。

機能

`usage=read`

構文

GET /admin/usage?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
情報が要求されるユーザー。
文字列
必須
はい
start
詳細
データリクエストが開始した時点の日付 (任意で時刻)。(例: 2012-09-25 16:00:00)。
文字列
必須
いいえ
end
詳細
データリクエストが終了した時点の日付 (任意で時刻)。(例: 2012-09-25 16:00:00)。
文字列
必須
いいえ
show-entries
詳細
データエントリーを返すかどうかを指定します。
ブール値
必須
いいえ
show-summary
詳細
データエントリーを返すかどうかを指定します。
ブール値
必須
いいえ

レスポンスエンティティー

使用方法
詳細
使用方法に関する情報用のコンテナー。
Container
エントリー
詳細
使用方法エントリー情報のコンテナー。
Container
user
詳細
ユーザーデータ情報のコンテナー
Container
owner
詳細
バケットを所有するユーザーの名前。
文字列
bucket
詳細
バケット名。
文字列
time
詳細
データが指定されている時間の下限 (最初の関連する時間の開始に丸められます)。
文字列
epoch
詳細
1/1/1970 からの経過時間 (秒単位)。
文字列
categories
詳細
統計情報カテゴリーのコンテナー。
Container
entry
詳細
stats エントリーのコンテナー。
Container
category
詳細
統計が提供される要求カテゴリーの名前。
文字列
bytes_sent
詳細
Ceph Object Gateway によって送信されるバイト数。
Integer
bytes_received
詳細
Ceph Object Gateway が受け取るバイト数。
Integer
ops
詳細
演算の数。
Integer
successful_ops
詳細
成功した操作の数。
Integer
summary
詳細
成功した操作の数。
Container
total
詳細
統計情報の概要集計合計のコンテナー。
Container

成功すると、レスポンスには要求された情報が含まれます。

2.30. 使用方法に関する情報を削除

使用方法に関する情報を削除します。日付を指定しないと、すべての使用情報が削除されます。

機能

`usage=write`

構文

DELETE /admin/usage?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME

リクエストパラメーター

uid
詳細
情報が要求されるユーザー。
文字列
foo_user
必須。
はい
start
詳細
データリクエストが開始した時点の日付 (任意で時刻)。(例: 2012-09-25 16:00:00)。
文字列
2012-09-25 16:00:00
必須。
いいえ
end
詳細
データリクエストが終了した時点の日付 (任意で時刻)。(例: 2012-09-25 16:00:00)。
文字列
2012-09-25 16:00:00
必須。
いいえ
remove-all
詳細
マルチユーザーデータの削除を確認するために uid が指定されていない場合に必須です。
Boolean
True [False]
必須。
いいえ

2.31. 標準エラーレスポンス

以下のリストは、標準的なエラーレスポンスと説明の詳細を示しています。

AccessDenied
詳細
アクセスが拒否されました。
コード
403 Forbidden
InternalError
詳細
内部サーバーエラー。
コード
500 Internal Server Error
NoSuchUser
詳細
ユーザーが存在しません。
コード
404 Not Found
NoSuchBucket
詳細
バケットが存在しません。
コード
404 Not Found
NoSuchKey
詳細
そのようなアクセスキーはありません。
コード
404 Not Found

第3章 Ceph Object Gateway および S3 API

開発者は、Amazon S3 データアクセスモデルと互換性のある RESTful アプリケーションプログラミングインターフェイス (API) を使用できます。Ceph Object Gateway を使用して、Red Hat Ceph Storage クラスターに保存されているバケットおよびオブジェクトを管理できます。

3.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

3.2. S3 の制限

重要

以下の制限事項を使用してください。お使いのハードウェアの選択には影響があるため、この要件を Red Hat アカウントチームと常に相談してください。

  • Amazon S3 を使用する場合の最大オブジェクトサイズ: 個別の Amazon S3 オブジェクトは、最小の 0B から最大 5TB のサイズに制限できます。1 つの PUT でアップロードできる最大オブジェクトは 5 GB です。100MB を超えるオブジェクトの場合は、Multipart Upload ケイパビリティーの使用を検討してください。
  • Amazon S3 を使用する場合の最大メタデータサイズ: オブジェクトに適用できるユーザーメタデータの合計サイズに定義された制限はありませんが、単一の HTTP リクエストは 16,000 バイトに制限されます。
  • Red Hat Ceph Storage クラスターでは、S3 オブジェクトおよびメタデータを保存するために生成するデータオーバーヘッドのデータ量: 推定時間は 200-300 バイトとオブジェクト名の長さです。バージョン管理されたオブジェクトは、バージョン数に比例する領域を追加で使用します。また、マルチパートアップロードなどのトランザクション更新中に一時的なオーバーヘッドが発生しますが、これらのオーバーヘッドはガベージコレクション中にリカバリーされます。

関連情報

3.3. S3 API を使用した Ceph Object Gateway へのアクセス

開発者は、Amazon S3 API の使用を開始する前に、Ceph Object Gateway および Secure Token Service (STS) へのアクセスを設定する必要があります。

3.3.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • 実行中の Ceph Object Gateway。
  • RESTful クライアント。

3.3.2. S3 認証

Ceph Object Gateway への要求は、認証または認証解除のいずれかになります。Ceph Object Gateway は、認証されていないリクエストが匿名ユーザーによって送信されることを前提としています。Ceph Object Gateway は、固定 ACL をサポートしています。

ほとんどのユースケースでは、クライアントは、Java や Python Boto 用の Amazon SDK の AmazonS3Client などの既存のオープンソースライブラリーを使用します。オープンソースライブラリーでは、アクセスキーおよびシークレットキーを渡すだけで、ライブラリーはユーザーの要求ヘッダーおよび認証署名をビルドします。ただし、リクエストを作成して署名することもできます。

リクエストの認証には、アクセスキーとベース 64 でエンコードされたハッシュベースのメッセージ認証コード (HMAC) が Ceph Object Gateway サーバーに送信される前に要求に追加する必要があります。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 に対応するシークレットに置き換えます。

ヘッダー文字列およびシークレットのハッシュの生成

ヘッダー文字列およびシークレットのハッシュを生成するには、以下を実行します。

  1. ヘッダー文字列の値を取得します。
  2. 要求ヘッダー文字列を正規形式に正規化します。
  3. SHA-1 ハッシュアルゴリズムを使用して HMAC を生成します。
  4. hmac の結果を base-64 としてエンコードします。

ヘッダーを正規化

ヘッダーを正規の形式に正規化するには、以下を行います。

  1. すべての content- ヘッダーを取得します。
  2. content-type および content-md5 以外の content- ヘッダーをすべて削除します。
  3. content- ヘッダー名が小文字であることを確認します。
  4. content- ヘッダーの辞書式で並べ替えます。
  5. Date ヘッダー AND があることを確認します。指定した日付が、オフセットではなく GMT を使用していることを確認してください。
  6. x-amz- で始まるヘッダーをすべて取得します。
  7. x-amz- ヘッダーがすべて小文字であることを確認します。
  8. x-amz- ヘッダーの辞書式で並べ替えます。
  9. 同じフィールド名の複数のインスタンスを単一のフィールドに組み合わせ、フィールド値をコンマで区切ります。
  10. ヘッダー値の空白文字および改行文字を、単一スペースに置き換えます。
  11. コロンの前後に空白を削除します。
  12. 各ヘッダーの後に新しい行を追加します。
  13. ヘッダーを要求ヘッダーにマージします。

HASH_OF_HEADER_AND_SECRET を、base-64 でエンコードされた HMAC 文字列に置き換えます。

関連情報

3.3.3. S3 サーバー側の暗号化

Ceph Object Gateway は、S3 アプリケーションプログラムインターフェイス (API) のアップロードされたオブジェクトのサーバー側の暗号化をサポートします。サーバー側の暗号化とは、S3 クライアントが暗号化されていない形式で HTTP 経由でデータを送信し、Ceph Object Gateway はそのデータを暗号化した形式で Red Hat Ceph Storage に保存することを意味します。

注記
  • Red Hat は、Static Large Object (SLO) または Dynamic Large Object (DLO) の S3 オブジェクト暗号化をサポートしません。
  • 現在、S3 Server-Side Encryption (SSE) モードのいずれも CopyObject のサポートを実装していません。これは、現在開発中です。[BZ#2149758]
重要

暗号化を使用するには、クライアントリクエストは、SSL 接続上でリクエストを送信する 必要があります。Red Hat は、Ceph Object Gateway が SSL を使用しない限り、クライアントからの S3 暗号化をサポートしません。ただし、テストの目的で、管理者は ceph config set client.rgw コマンドを使用して、rgw_crypt_require_ssl 設定を false に設定してから、Ceph Object Gateway インスタンスを再起動することで、テスト中に SSL を無効にできます。

実稼働環境では、SSL 経由で暗号化された要求を送信できない場合があります。このような場合は、サーバー側の暗号化で HTTP を使用して要求を送信します。

サーバー側の暗号化で HTTP を設定する方法は、以下の関連情報セクションを参照してください。

暗号化キーの管理には、以下の 2 つのオプションがあります。

お客様提供のキー

お客様が提供する鍵を使用する場合、S3 クライアントは暗号鍵を各リクエストと共に渡して、暗号化されたデータの読み取りまたは書き込みを行います。これらのキーを管理するのは、お客様の責任です。各オブジェクトの暗号化に使用する Ceph Object Gateway の鍵を覚えておく必要があります。

Ceph Object Gateway は、Amazon SSE-C 仕様に従って、S3 API で顧客提供のキー動作を実装します。

お客様がキー管理を処理し、S3 クライアントはキーを Ceph Object Gateway に渡すため、Ceph Object Gateway ではこの暗号化モードをサポートするための特別な設定は必要ありません。

キー管理サービス

キー管理サービスを使用する場合、セキュアなキー管理サービスはキーを格納し、Ceph Object Gateway はデータの暗号化または復号の要求に対応するためにキーをオンデマンドで取得します。

Ceph Object Gateway は、Amazon SSE-KMS 仕様に従って S3 API にキー管理サービスの動作を実装します。

重要

現時点で、テスト済み鍵管理の実装は HashiCorp Vault および OpenStack Barbican です。ただし、OpenStack Barbican はテクノロジープレビューであるため、実稼働システムでの使用はサポートされません。

3.3.4. S3 アクセス制御リスト

Ceph Object Gateway は S3 と互換性のあるアクセス制御リスト (ACL) の機能をサポートします。ACL は、ユーザーがバケットまたはオブジェクトで実行できる操作を指定するアクセス権限の一覧です。それぞれの付与は、バケットに適用するか、またはオブジェクトに適用される場合の異なる意味を持ちます。

表3.1 ユーザー操作

パーミッションバケットObject

READ

パーミッションを得たユーザーは、バケットのオブジェクトを一覧表示できます。

パーミッションを得たユーザーは、オブジェクトを読み取りできます。

WRITE

パーミッションを得たユーザーは、バケットのオブジェクトを書き込みまたは削除できます。

該当なし

READ_ACP

パーミッションを得たユーザーは、バケット ACL を読み取ることができます。

パーミッションを得たユーザーは、オブジェクト ACL を読み取ることができます。

WRITE_ACP

パーミッションを得たユーザーは、バケット ACL を書き込めます。

パーミッションを得たユーザーは、オブジェクト ACL に書き込めます。

FULL_CONTROL

Grantee にはバケットのオブジェクトに対する完全なパーミッションがあります。

パーミッションを得たユーザーは、オブジェクト ACL に読み取りまたは書き込みできます。

3.3.5. S3 を使用した Ceph Object Gateway へのアクセスの準備

ゲートウェイサーバーにアクセスする前に、Ceph Object Gateway ノードの前提条件に従う必要があります。

前提条件

  • Ceph Object Gateway ソフトウェアのインストール。
  • Ceph Object Gateway ノードへのルートレベルのアクセス。

手順

  1. root で、ファイアウォールのポート 8080 を開きます。

    [root@rgw ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
    [root@rgw ~]# firewall-cmd --reload
  2. オブジェクトゲートウェイ設定および管理ガイド で説明されているように、ゲートウェイに使用する DNS サーバーにワイルドカードを追加します。

    ローカル DNS キャッシュ用のゲートウェイノードを設定することもできます。これを実行するには、以下の手順を実行します。

    1. rootdnsmasq をインストールおよび設定します。

      [root@rgw ~]# yum install dnsmasq
      [root@rgw ~]# echo "address=/.FQDN_OF_GATEWAY_NODE/IP_OF_GATEWAY_NODE" | tee --append /etc/dnsmasq.conf
      [root@rgw ~]# systemctl start dnsmasq
      [root@rgw ~]# systemctl enable dnsmasq

      IP_OF_GATEWAY_NODE および FQDN_OF_GATEWAY_NODE は、ゲートウェイノードの IP アドレスと FQDN に置き換えます。

    2. root で NetworkManager を停止します。

      [root@rgw ~]# systemctl stop NetworkManager
      [root@rgw ~]# systemctl disable NetworkManager
    3. root として、ゲートウェイサーバーの IP を名前空間として設定します。

      [root@rgw ~]# echo "DNS1=IP_OF_GATEWAY_NODE" | tee --append /etc/sysconfig/network-scripts/ifcfg-eth0
      [root@rgw ~]# echo "IP_OF_GATEWAY_NODE FQDN_OF_GATEWAY_NODE" | tee --append /etc/hosts
      [root@rgw ~]# systemctl restart network
      [root@rgw ~]# systemctl enable network
      [root@rgw ~]# systemctl restart dnsmasq

      IP_OF_GATEWAY_NODE および FQDN_OF_GATEWAY_NODE は、ゲートウェイノードの IP アドレスと FQDN に置き換えます。

    4. サブドメイン要求を確認します。

      [user@rgw ~]$ ping mybucket.FQDN_OF_GATEWAY_NODE

      FQDN_OF_GATEWAY_NODE は、ゲートウェイノードの FQDN に置き換えます。

      警告

      ローカルの DNS キャッシュ用にゲートウェイサーバーを設定することは、テスト目的のみを目的としています。これを行った後は、外部ネットワークにはアクセスできなくなります。Red Hat Ceph Storage クラスターおよびゲートウェイノードに適切な DNS サーバーを使用することを強く推奨します。

  3. オブジェクトゲートウェイの設定および管理ガイド に説明されているように、S3 アクセスに radosgw ユーザーを作成し、生成した access_key および secret_key をコピーします。S3 アクセス、およびそれ以降のバケット管理タスクには、これらのキーが必要です。

3.3.6. Ruby AWS S3 を使用した Ceph Object Gateway へのアクセス

Ruby プログラミング言語は、S3 アクセスに aws-s3 gem と共に使用できます。Ruby AWS::S3 で Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。

前提条件

  • Ceph Object Gateway へのユーザーレベルのアクセス。
  • Ceph Object Gateway にアクセスするノードへのルートレベルのアクセス。
  • インターネットアクセス。

手順

  1. ruby パッケージをインストールします。

    [root@dev ~]# yum install ruby
    注記

    上記のコマンドは ruby と、rubygemsruby-libs などの基本的な依存関係をインストールします。コマンドによってすべての依存関係がインストールされていない場合は、個別にインストールします。

  2. Ruby パッケージ aws-s3 をインストールします。

    [root@dev ~]# gem install aws-s3
  3. プロジェクトディレクトリーを作成します。

    [user@dev ~]$ mkdir ruby_aws_s3
    [user@dev ~]$ cd ruby_aws_s3
  4. コネクションファイルを作成します。

    [user@dev ~]$ vim conn.rb
  5. conn.rb ファイルに以下のコンテンツを貼り付けます。

    構文

    #!/usr/bin/env ruby
    
    require 'aws/s3'
    require 'resolv-replace'
    
    AWS::S3::Base.establish_connection!(
            :server            => 'FQDN_OF_GATEWAY_NODE',
            :port           => '8080',
            :access_key_id     => 'MY_ACCESS_KEY',
            :secret_access_key => 'MY_SECRET_KEY'
    )

    FQDN_OF_GATEWAY_NODE は、Ceph Object Gateway ノードの FQDN に置き換えます。Red Hat Ceph Storage オブジェクトゲートウェイの設定および管理ガイド に記載されたとおり、MY_ACCESS_KEY および MY_SECRET_KEY は、S3 アクセスの radosgw が作成された場合に生成された access_key および secret_key に置き換えます。

    #!/usr/bin/env ruby
    
    require 'aws/s3'
    require 'resolv-replace'
    
    AWS::S3::Base.establish_connection!(
            :server            => 'testclient.englab.pnq.redhat.com',
            :port           => '8080',
            :access_key_id     => '98J4R9P22P5CDL65HKP8',
            :secret_access_key => '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049'
    )

    ファイルを保存して、エディターを終了します。

  6. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x conn.rb
  7. コマンドを実行します。

    [user@dev ~]$ ./conn.rb | echo $?

    ファイルに正しく値を指定した場合は、コマンドの出力は 0 になります。

  8. バケットを作成するための新規ファイルを作成します。

    [user@dev ~]$ vim create_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.create('my-new-bucket1')

    ファイルを保存して、エディターを終了します。

  9. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x create_bucket.rb
  10. コマンドを実行します。

    [user@dev ~]$ ./create_bucket.rb

    コマンドの出力が true の場合は、バケット my-new-bucket1 が正常に作成されたことを意味します。

  11. 所有されるバケットを一覧表示するために新規ファイルを作成します。

    [user@dev ~]$ vim list_owned_buckets.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Service.buckets.each do |bucket|
            puts "{bucket.name}\t{bucket.creation_date}"
    end

    ファイルを保存して、エディターを終了します。

  12. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x list_owned_buckets.rb
  13. コマンドを実行します。

    [user@dev ~]$ ./list_owned_buckets.rb

    出力は以下のようになります。

    my-new-bucket1 2020-01-21 10:33:19 UTC
  14. オブジェクトを作成するための新規ファイルを作成します。

    [user@dev ~]$ vim create_object.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::S3Object.store(
            'hello.txt',
            'Hello World!',
            'my-new-bucket1',
            :content_type => 'text/plain'
    )

    ファイルを保存して、エディターを終了します。

  15. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x create_object.rb
  16. コマンドを実行します。

    [user@dev ~]$ ./create_object.rb

    これで、文字列 Hello World!hello.txt が作成されます。

  17. バケットのコンテンツを一覧表示するための新規ファイルを作成します。

    [user@dev ~]$ vim list_bucket_content.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    new_bucket = AWS::S3::Bucket.find('my-new-bucket1')
    new_bucket.each do |object|
            puts "{object.key}\t{object.about['content-length']}\t{object.about['last-modified']}"
    end

    ファイルを保存して、エディターを終了します。

  18. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x list_bucket_content.rb
  19. コマンドを実行します。

    [user@dev ~]$ ./list_bucket_content.rb

    出力は以下のようになります。

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
  20. 空のバケットを削除するために新規ファイルを作成します。

    [user@dev ~]$ vim del_empty_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.delete('my-new-bucket1')

    ファイルを保存して、エディターを終了します。

  21. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x del_empty_bucket.rb
  22. コマンドを実行します。

    [user@dev ~]$ ./del_empty_bucket.rb | echo $?

    バケットが正常に削除されると、コマンドは 0 を出力として返します。

    注記

    create_bucket.rb ファイルを編集し、空のバケットを作成します (例: my-new-bucket4my-new-bucket5)。次に、空のバケットの削除を試みる前に、上記の del_empty_bucket.rb ファイルを適宜編集します。

  23. 空でないバケットを削除する新規ファイルを作成します。

    [user@dev ~]$ vim del_non_empty_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.delete('my-new-bucket1', :force => true)

    ファイルを保存して、エディターを終了します。

  24. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x del_non_empty_bucket.rb
  25. コマンドを実行します。

    [user@dev ~]$ ./del_non_empty_bucket.rb | echo $?

    バケットが正常に削除されると、コマンドは 0 を出力として返します。

  26. オブジェクトを削除する新しいファイルを作成します。

    [user@dev ~]$ vim delete_object.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::S3Object.delete('hello.txt', 'my-new-bucket1')

    ファイルを保存して、エディターを終了します。

  27. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x delete_object.rb
  28. コマンドを実行します。

    [user@dev ~]$ ./delete_object.rb

    これにより、オブジェクト hello.txt が削除されます。

3.3.7. Ruby AWS SDK を使用した Ceph Object Gateway へのアクセス

Ruby プログラミング言語は、S3 アクセスに aws-sdk gem と共に使用できます。Ruby AWS::SDK を使用して Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。

前提条件

  • Ceph Object Gateway へのユーザーレベルのアクセス。
  • Ceph Object Gateway にアクセスするノードへのルートレベルのアクセス。
  • インターネットアクセス。

手順

  1. ruby パッケージをインストールします。

    [root@dev ~]# yum install ruby
    注記

    上記のコマンドは ruby と、rubygemsruby-libs などの基本的な依存関係をインストールします。コマンドによってすべての依存関係がインストールされていない場合は、個別にインストールします。

  2. Ruby パッケージ aws-sdk をインストールします。

    [root@dev ~]# gem install aws-sdk
  3. プロジェクトディレクトリーを作成します。

    [user@dev ~]$ mkdir ruby_aws_sdk
    [user@dev ~]$ cd ruby_aws_sdk
  4. コネクションファイルを作成します。

    [user@dev ~]$ vim conn.rb
  5. conn.rb ファイルに以下のコンテンツを貼り付けます。

    構文

    #!/usr/bin/env ruby
    
    require 'aws-sdk'
    require 'resolv-replace'
    
    Aws.config.update(
            endpoint: 'http://FQDN_OF_GATEWAY_NODE:8080',
            access_key_id: 'MY_ACCESS_KEY',
            secret_access_key: 'MY_SECRET_KEY',
            force_path_style: true,
            region: 'us-east-1'
    )

    FQDN_OF_GATEWAY_NODE は、Ceph Object Gateway ノードの FQDN に置き換えます。Red Hat Ceph Storage オブジェクトゲートウェイの設定および管理ガイド に記載されたとおり、MY_ACCESS_KEY および MY_SECRET_KEY は、S3 アクセスの radosgw が作成された場合に生成された access_key および secret_key に置き換えます。

    #!/usr/bin/env ruby
    
    require 'aws-sdk'
    require 'resolv-replace'
    
    Aws.config.update(
            endpoint: 'http://testclient.englab.pnq.redhat.com:8080',
            access_key_id: '98J4R9P22P5CDL65HKP8',
            secret_access_key: '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049',
            force_path_style: true,
            region: 'us-east-1'
    )

    ファイルを保存して、エディターを終了します。

  6. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x conn.rb
  7. コマンドを実行します。

    [user@dev ~]$ ./conn.rb | echo $?

    ファイルに正しく値を指定した場合は、コマンドの出力は 0 になります。

  8. バケットを作成するための新規ファイルを作成します。

    [user@dev ~]$ vim create_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    構文

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.create_bucket(bucket: 'my-new-bucket2')

    ファイルを保存して、エディターを終了します。

  9. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x create_bucket.rb
  10. コマンドを実行します。

    [user@dev ~]$ ./create_bucket.rb

    コマンドの出力が true の場合は、バケット my-new-bucket2 が正常に作成されていることを意味します。

  11. 所有されるバケットを一覧表示するために新規ファイルを作成します。

    [user@dev ~]$ vim list_owned_buckets.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.list_buckets.buckets.each do |bucket|
            puts "{bucket.name}\t{bucket.creation_date}"
    end

    ファイルを保存して、エディターを終了します。

  12. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x list_owned_buckets.rb
  13. コマンドを実行します。

    [user@dev ~]$ ./list_owned_buckets.rb

    出力は以下のようになります。

    my-new-bucket2 2020-01-21 10:33:19 UTC
  14. オブジェクトを作成するための新規ファイルを作成します。

    [user@dev ~]$ vim create_object.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.put_object(
            key: 'hello.txt',
            body: 'Hello World!',
            bucket: 'my-new-bucket2',
            content_type: 'text/plain'
    )

    ファイルを保存して、エディターを終了します。

  15. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x create_object.rb
  16. コマンドを実行します。

    [user@dev ~]$ ./create_object.rb

    これで、文字列 Hello World!hello.txt が作成されます。

  17. バケットのコンテンツを一覧表示するための新規ファイルを作成します。

    [user@dev ~]$ vim list_bucket_content.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.list_objects(bucket: 'my-new-bucket2').contents.each do |object|
            puts "{object.key}\t{object.size}"
    end

    ファイルを保存して、エディターを終了します。

  18. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x list_bucket_content.rb
  19. コマンドを実行します。

    [user@dev ~]$ ./list_bucket_content.rb

    出力は以下のようになります。

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
  20. 空のバケットを削除するために新規ファイルを作成します。

    [user@dev ~]$ vim del_empty_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.delete_bucket(bucket: 'my-new-bucket2')

    ファイルを保存して、エディターを終了します。

  21. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x del_empty_bucket.rb
  22. コマンドを実行します。

    [user@dev ~]$ ./del_empty_bucket.rb | echo $?

    バケットが正常に削除されると、コマンドは 0 を出力として返します。

    注記

    create_bucket.rb ファイルを編集し、空のバケットを作成します (例: my-new-bucket6my-new-bucket7)。次に、空のバケットの削除を試みる前に、上記の del_empty_bucket.rb ファイルを適宜編集します。

  23. 空でないバケットを削除する新規ファイルを作成します。

    [user@dev ~]$ vim del_non_empty_bucket.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    Aws::S3::Bucket.new('my-new-bucket2', client: s3_client).clear!
    s3_client.delete_bucket(bucket: 'my-new-bucket2')

    ファイルを保存して、エディターを終了します。

  24. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x del_non_empty_bucket.rb
  25. コマンドを実行します。

    [user@dev ~]$ ./del_non_empty_bucket.rb | echo $?

    バケットが正常に削除されると、コマンドは 0 を出力として返します。

  26. オブジェクトを削除する新しいファイルを作成します。

    [user@dev ~]$ vim delete_object.rb

    以下のコンテンツをファイルに貼り付けます。

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.delete_object(key: 'hello.txt', bucket: 'my-new-bucket2')

    ファイルを保存して、エディターを終了します。

  27. ファイルを実行可能にします。

    [user@dev ~]$ chmod +x delete_object.rb
  28. コマンドを実行します。

    [user@dev ~]$ ./delete_object.rb

    これにより、オブジェクト hello.txt が削除されます。

3.3.8. PHP を使用した Ceph Object Gateway へのアクセス

S3 アクセスには PHP スクリプトを使用できます。この手順では、バケットやオブジェクトの削除など、さまざまなタスクを実行する PHP スクリプトの例を提供します。

重要

以下は、php v5.4.16 および aws-sdk v2.8.24 に対してテストされています。php >= 5.5+ が必要なため、phpaws-sdk の最新バージョンを使用 しませんphp 5.5 は、RHEL 7 のデフォルトリポジトリーでは利用できません。php 5.5 を使用する場合は、epel およびその他のサードパーティーのリポジトリーを有効にする必要があります。また、php 5.5 および最新バージョンの aws-sdk の設定オプションも異なります。

前提条件

  • 開発ワークステーションへのルートレベルのアクセス。
  • インターネットアクセス。

手順

  1. php パッケージをインストールします。

    [root@dev ~]# yum install php
  2. PHP 用に aws-sdk の zip アーカイブを ダウンロード し、展開します。
  3. プロジェクトディレクトリーを作成します。

    [user@dev ~]$ mkdir php_s3
    [user@dev ~]$ cd php_s3
  4. 展開した aws ディレクトリーをプロジェクトのディレクトリーにコピーします。以下に例を示します。

    [user@dev ~]$ cp -r ~/Downloads/aws/ ~/php_s3/
  5. コネクションファイルを作成します。

    [user@dev ~]$ vim conn.php
  6. conn.php ファイルに以下のコンテンツを貼り付けます。

    構文

    <?php
    define('AWS_KEY', 'MY_ACCESS_KEY');
    define('AWS_SECRET_KEY', 'MY_SECRET_KEY');
    define('HOST', 'FQDN_OF_GATEWAY_NODE');
    define('PORT', '8080');
    
    // require the AWS SDK for php library
    require '/PATH_TO_AWS/aws-autoloader.php';
    
    use Aws\S3\S3Client;
    
    // Establish connection with host using S3 Client
    client = S3Client::factory(array(
        'base_url' => HOST,
        'port' => PORT,
        'key'      => AWS_KEY,
        'secret'   => AWS_SECRET_KEY
    ));
    ?>

    FQDN_OF_GATEWAY_NODE は、ゲートウェイノードの FQDN に置き換えます。Red Hat Ceph Storage オブジェクトゲートウェイの設定および管理ガイド に記載されたとおり、MY_ACCESS_KEY および MY_SECRET_KEY は、S3 アクセスの radosgw が作成された場合に生成された access_key および secret_key に置き換えます。PATH_TO_AWS は、php プロジェクトディレクトリーにコピーした、展開した aws ディレクトリーへの絶対パスに置き換えます。

    ファイルを保存して、エディターを終了します。

  7. コマンドを実行します。

    [user@dev ~]$ php -f conn.php | echo $?

    ファイルに正しく値を指定した場合は、コマンドの出力は 0 になります。

  8. バケットを作成するための新規ファイルを作成します。

    [user@dev ~]$ vim create_bucket.php

    新しいファイルに以下の内容を貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    client->createBucket(array('Bucket' => 'my-new-bucket3'));
    
    ?>

    ファイルを保存して、エディターを終了します。

  9. コマンドを実行します。

    [user@dev ~]$ php -f create_bucket.php
  10. 所有されるバケットを一覧表示するために新規ファイルを作成します。

    [user@dev ~]$ vim list_owned_buckets.php

    以下のコンテンツをファイルに貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    blist = client->listBuckets();
    echo "Buckets belonging to " . blist['Owner']['ID'] . ":\n";
    foreach (blist['Buckets'] as b) {
        echo "{b['Name']}\t{b['CreationDate']}\n";
    }
    
    ?>

    ファイルを保存して、エディターを終了します。

  11. コマンドを実行します。

    [user@dev ~]$ php -f list_owned_buckets.php

    出力は以下のようになります。

    my-new-bucket3 2020-01-21 10:33:19 UTC
  12. まず hello.txt という名前のソースファイルを作成するオブジェクトを作成します。

    [user@dev ~]$ echo "Hello World!" > hello.txt
  13. 新しい php ファイルを作成します。

    [user@dev ~]$ vim create_object.php

    以下のコンテンツをファイルに貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    key         = 'hello.txt';
    source_file = './hello.txt';
    acl         = 'private';
    bucket      = 'my-new-bucket3';
    client->upload(bucket, key, fopen(source_file, 'r'), acl);
    
    ?>

    ファイルを保存して、エディターを終了します。

  14. コマンドを実行します。

    [user@dev ~]$ php -f create_object.php

    これにより、バケット my-new-bucket3 でオブジェクト hello.txt が作成されます。

  15. バケットのコンテンツを一覧表示するための新規ファイルを作成します。

    [user@dev ~]$ vim list_bucket_content.php

    以下のコンテンツをファイルに貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    o_iter = client->getIterator('ListObjects', array(
        'Bucket' => 'my-new-bucket3'
    ));
    foreach (o_iter as o) {
        echo "{o['Key']}\t{o['Size']}\t{o['LastModified']}\n";
    }
    ?>

    ファイルを保存して、エディターを終了します。

  16. コマンドを実行します。

    [user@dev ~]$ php -f list_bucket_content.php

    出力は以下のようになります。

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
  17. 空のバケットを削除するために新規ファイルを作成します。

    [user@dev ~]$ vim del_empty_bucket.php

    以下のコンテンツをファイルに貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    client->deleteBucket(array('Bucket' => 'my-new-bucket3'));
    ?>

    ファイルを保存して、エディターを終了します。

  18. コマンドを実行します。

    [user@dev ~]$ php -f del_empty_bucket.php | echo $?

    バケットが正常に削除されると、コマンドは 0 を出力として返します。

    注記

    create_bucket.php ファイルを編集し、空のバケットを作成します (例: my-new-bucket4my-new-bucket5)。次に、空のバケットの削除を試みる前に、上記の del_empty_bucket.php ファイルを適宜編集します。

    重要

    空でないバケットの削除は、現在 PHP 2 以降のバージョンの aws-sdk ではサポートされていません。

  19. オブジェクトを削除する新しいファイルを作成します。

    [user@dev ~]$ vim delete_object.php

    以下のコンテンツをファイルに貼り付けます。

    構文

    <?php
    
    include 'conn.php';
    
    client->deleteObject(array(
        'Bucket' => 'my-new-bucket3',
        'Key'    => 'hello.txt',
    ));
    ?>

    ファイルを保存して、エディターを終了します。

  20. コマンドを実行します。

    [user@dev ~]$ php -f delete_object.php

    これにより、オブジェクト hello.txt が削除されます。

3.3.9. セキュアなトークンサービス

Amazon Web Services の Secure Token Service (STS) は、ユーザーを認証するための一時セキュリティー認証情報のセットを返します。Ceph Object Gateway は STS アプリケーションプログラミングインターフェイス (API) のサブセットを実装し、ID およびアクセス管理 (IAM) の一時的な認証情報を提供します。これらの一時的な認証情報を使用して、Ceph Object Gateway の STS エンジンを使用して S3 呼び出しを認証します。IAM ポリシーを使用すると、STS API に渡されるパラメーターである一時認証情報をさらに制限できます。

関連情報

3.3.9.1. Secure Token Service アプリケーションのプログラミングインターフェイス

Ceph Object Gateway は、以下の Secure Token Service (STS) アプリケーションプログラミングインターフェイス (API) を実装します。

AssumeRole

この API は、アカウント間のアクセスのための一時的な認証情報のセットを返します。これらの一時的な認証情報により、Role と、AssumeRole API で割り当てられるポリシーの両方に割り当てられるパーミッションポリシーを使用することができます。RoleArn および RoleSessionName リクエストパラメーターは必須ですが、他の要求パラメーターは任意です。

RoleArn
詳細
長さが 20 ~ 2048 文字の Amazon Resource Name (ARN) について想定するロール。
文字列
必須
はい
RoleSessionName
詳細
仮定するロールセッション名を特定します。ロールセッション名は、異なるプリンシパルや別の理由がロールを想定する場合にセッションを一意に識別できます。このパラメーターの値は、2 文字から 64 文字までです。=,.@、および - 文字は使用できますが、スペースは使用できません。
文字列
必須
はい
ポリシー
詳細
インラインセッションで使用する JSON 形式の ID およびアクセス管理ポリシー (IAM)。このパラメーターの値は 1 文字から 2048 文字までです。
文字列
必須
いいえ
DurationSeconds
詳細
セッションの期間 (秒単位)。最小値は 900 秒で、最大値は 43200 秒です。デフォルト値は 3600 秒です。
整数
必須
いいえ
ExternalId
詳細
別のアカウントのロールを想定する場合には、利用可能な場合は一意の外部識別子を指定します。このパラメーターの値は、2 文字から 1224 文字までになります。
文字列
必須
いいえ
SerialNumber
詳細
関連付けられたマルチファクター認証 (MFA) デバイスからのユーザーの識別番号。パラメーターの値は、9 文字から 256 文字までのハードウェアデバイスまたは仮想デバイスのシリアル番号になります。
文字列
必須
いいえ
TokenCode
説明
信頼ポリシーに MFA が必要な場合は、マルチファクター認証 (MFA) デバイスから生成された値。MFA デバイスが必要で、このパラメーターの値が空または期限切れの場合には、AssumeRole の呼び出しは access denied エラーメッセージを返します。このパラメーターの値には、固定長は 6 文字です。
文字列
必須
いいえ

AssumeRoleWithWebIdentity

この API は、OpenID Connect や OAuth 2.0 アイデンティティープロバイダーなどのアプリケーションによって認証されたユーザーの一時認証情報のセットを返します。RoleArn および RoleSessionName リクエストパラメーターは必須ですが、他の要求パラメーターは任意です。

RoleArn
詳細
長さが 20 ~ 2048 文字の Amazon Resource Name (ARN) について想定するロール。
文字列
必須
はい
RoleSessionName
詳細
仮定するロールセッション名を特定します。ロールセッション名は、異なるプリンシパルや別の理由がロールを想定する場合にセッションを一意に識別できます。このパラメーターの値は、2 文字から 64 文字までです。=,.@、および - 文字は使用できますが、スペースは使用できません。
タイプ
文字列
必須
はい
ポリシー
詳細
インラインセッションで使用する JSON 形式の ID およびアクセス管理ポリシー (IAM)。このパラメーターの値は 1 文字から 2048 文字までです。
文字列
必須
いいえ
DurationSeconds
詳細
セッションの期間 (秒単位)。最小値は 900 秒で、最大値は 43200 秒です。デフォルト値は 3600 秒です。
整数
必須
いいえ
ProviderId
詳細
アイデンティティープロバイダーからのドメイン名の完全修飾ホストコンポーネント。このパラメーターの値は、長さが 4 ~ 2048 文字の OAuth 2.0 アクセストークンでのみ有効です。
文字列
必須
いいえ
WebIdentityToken
詳細
アイデンティティープロバイダーから提供される OpenID Connect アイデンティティートークンまたは OAuth 2.0 アクセストークン。このパラメーターの値は、4 文字から 2048 文字までです。
文字列
必須
いいえ

関連情報

3.3.9.2. セキュアなトークンサービスの設定

rgw_sts_key および rgw_s3_auth_use_sts オプションを設定して、CephObjectGateway で使用する Ceph Object Gateway (STS) を設定します。

注記

S3 と STS API は同じ名前空間に共存し、いずれも Ceph Object Gateway の同じエンドポイントからアクセスできます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • 実行中の Ceph Object Gateway。
  • Ceph Manager ノードへのルートレベルのアクセス。

手順

  1. Ceph Object Gateway クライアントに以下の設定オプションを設定します。

    構文

    ceph config set RGW_CLIENT_NAME rgw_sts_key STS_KEY
    ceph config set RGW_CLIENT_NAME rgw_s3_auth_use_sts true

    [root@mgr ~]# ceph config set client.rgw rgw_sts_key 9a2142613c504c42a23ba2b82147dc28
    [root@mgr ~]# ceph config set client.rgw rgw_s3_auth_use_sts true

関連情報

3.3.9.3. OpenID Connect プロバイダー用のユーザーの作成

Ceph Object Gateway と OpenID Connect Provider との間の信頼を確立するには、ユーザーエンティティーとロール信頼ポリシーを作成します。

前提条件

  • Ceph Object Gateway ノードへのユーザーレベルのアクセス。

手順

  1. 新しい Ceph ユーザーを作成します。

    構文

    radosgw-admin --uid USER_NAME --display-name "DISPLAY_NAME" --access_key USER_NAME --secret SECRET user create

    [user@rgw ~]$ radosgw-admin --uid TESTER --display-name "TestUser" --access_key TESTER --secret test123 user create

  2. Ceph ユーザー機能を設定します。

    構文

    radosgw-admin caps add --uid="USER_NAME" --caps="oidc-provider=*"

    [user@rgw ~]$ radosgw-admin caps add --uid="TESTER" --caps="oidc-provider=*"

  3. Secure Token Service (STS) API を使用してロール信頼ポリシーに条件を追加します。

    構文

    "{\"Version\":\"2020-01-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Federated\":[\"arn:aws:iam:::oidc-provider/IDP_URL\"]},\"Action\":[\"sts:AssumeRoleWithWebIdentity\"],\"Condition\":{\"StringEquals\":{\"IDP_URL:app_id\":\"AUD_FIELD\"\}\}\}\]\}"

    重要

    上記の構文例の app_id は、着信トークンの AUD_FIELD フィールドと一致させる必要があります。

関連情報

3.3.9.4. OpenID Connect プロバイダーのサムプリントの取得

OpenID Connect プロバイダー (IDP) の設定ドキュメントを取得するには、以下を実行します。

前提条件

  • openssl パッケージおよび curl パッケージのインストール。

手順

  1. IDP の URL から設定ドキュメントを取得します。

    構文

    curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "IDP_URL:8000/CONTEXT/realms/REALM/.well-known/openid-configuration" \
       | jq .

    [user@client ~]$ curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "http://www.example.com:8000/auth/realms/quickstart/.well-known/openid-configuration" \
       | jq .

  2. IDP 証明書を取得します。

    構文

    curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "IDP_URL/CONTEXT/realms/REALM/protocol/openid-connect/certs" \
         | jq .

    [user@client ~]$ curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "http://www.example.com/auth/realms/quickstart/protocol/openid-connect/certs" \
         | jq .

  3. 直前のコマンドから x5c 応答の結果をコピーし、それを certificate.crt ファイルに貼り付けます。冒頭に —–BEGIN CERTIFICATE—–、末尾に —–END CERTIFICATE—– を含めます。
  4. 証明書のサムプリントを取得します。

    構文

    openssl x509 -in CERT_FILE -fingerprint -noout

    [user@client ~]$ openssl x509 -in certificate.crt -fingerprint -noout
    SHA1 Fingerprint=F7:D7:B3:51:5D:D0:D3:19:DD:21:9A:43:A9:EA:72:7A:D6:06:52:87

  5. SHA1 フィンガープリントからコロンをすべて削除し、IAM 要求で IDP エンティティーを作成するための入力として使用します。

関連情報

3.3.9.5. Keystone での STS Lite の設定および使用 (テクノロジープレビュー)

Amazon Secure Token Service (STS) と S3 API は、同じ名前空間に共存します。STS オプションは、Keystone オプションと組み合わせて設定できます。

注記

S3 と STS の API の両方に、Ceph Object Gateway の同じエンドポイントを使用してアクセスできます。

前提条件

  • Red Hat Ceph Storage 5.0 以降
  • 実行中の Ceph Object Gateway。
  • Boto Python モジュールのバージョン 3 以降のインストール
  • Ceph Manager ノードへのルートレベルのアクセス。
  • OpenStack ノードへのユーザーレベルのアクセス。

手順

  1. Ceph Object Gateway クライアントに以下の設定オプションを設定します。

    構文

    ceph config set RGW_CLIENT_NAME rgw_sts_key STS_KEY
    ceph config set RGW_CLIENT_NAME rgw_s3_auth_use_sts true

    [root@mgr ~]# ceph config set client.rgw rgw_sts_key 9a2142613c504c42a23ba2b82147dc28
    [root@mgr ~]# ceph config set client.rgw rgw_s3_auth_use_sts true

  2. OpenStack ノードで EC2 認証情報を生成します。

    [user@osp ~]$ openstack ec2 credentials create
    
    +------------+--------------------------------------------------------+
    | Field      | Value                                                  |
    +------------+--------------------------------------------------------+
    | access     | b924dfc87d454d15896691182fdeb0ef                       |
    | links      | {u'self': u'http://192.168.0.15/identity/v3/users/     |
    |            | 40a7140e424f493d8165abc652dc731c/credentials/          |
    |            | OS-EC2/b924dfc87d454d15896691182fdeb0ef'}              |
    | project_id | c703801dccaf4a0aaa39bec8c481e25a                       |
    | secret     | 6a2142613c504c42a94ba2b82147dc28                       |
    | trust_id   | None                                                   |
    | user_id    | 40a7140e424f493d8165abc652dc731c                       |
    +------------+--------------------------------------------------------+

  3. 生成された認証情報を使用して、GetSessionToken API を使用して一時的なセキュリティー認証情報のセットを取得します。

    import boto3
    
    access_key = b924dfc87d454d15896691182fdeb0ef
    secret_key = 6a2142613c504c42a94ba2b82147dc28
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.get_session_token(
        DurationSeconds=43200
    )

  4. 一時認証情報の取得は、S3 呼び出しの作成に使用できます。

    s3client = boto3.client('s3',
      aws_access_key_id = response['Credentials']['AccessKeyId'],
      aws_secret_access_key = response['Credentials']['SecretAccessKey'],
      aws_session_token = response['Credentials']['SessionToken'],
      endpoint_url=https://www.example.com/s3,
      region_name='')
    
    bucket = s3client.create_bucket(Bucket='my-new-shiny-bucket')
    response = s3client.list_buckets()
    for bucket in response["Buckets"]:
      print "{name}\t{created}".format(
        name = bucket['Name'],
        created = bucket['CreationDate'],
      )

  5. 新しい S3Access ロールを作成し、ポリシーを設定します。

    1. 管理 CAPS でユーザーを割り当てます。

      構文

      radosgw-admin caps add --uid="USER" --caps="roles=*"

      [root@mgr ~]# radosgw-admin caps add --uid="gwadmin" --caps="roles=*"

    2. S3Access ロールを作成します。

      構文

      radosgw-admin role create --role-name=ROLE_NAME --path=PATH --assume-role-policy-doc=TRUST_POLICY_DOC

      [root@mgr ~]# radosgw-admin role create --role-name=S3Access --path=/application_abc/component_xyz/ --assume-role-policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}

    3. S3Access ロールにパーミッションポリシーを割り当てます。

      構文

      radosgw-admin role-policy put --role-name=ROLE_NAME --policy-name=POLICY_NAME --policy-doc=PERMISSION_POLICY_DOC

      [root@mgr ~]# radosgw-admin role-policy put --role-name=S3Access --policy-name=Policy --policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Action\":\[\"s3:*\"\],\"Resource\":\"arn:aws:s3:::example_bucket\"\}\]\}

    4. 別のユーザーが gwadmin ユーザーのロールを想定できるようになりました。たとえば、gwuser ユーザーは、gwadmin ユーザーのパーミッションを想定できます。
    5. 仮定ユーザーの access_key および secret_key の値を書き留めておきます。

      [root@mgr ~]# radosgw-admin user info --uid=gwuser | grep -A1 access_key

  6. AssumeRole API 呼び出しを使用し、仮定のユーザーから access_key および secret_key の値を提供します。

    import boto3
    
    access_key = 11BS02LGFB6AL6H1ADMW
    secret_key = vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.assume_role(
    RoleArn='arn:aws:iam:::role/application_abc/component_xyz/S3Access',
    RoleSessionName='Bob',
    DurationSeconds=3600
    )

    重要

    AssumeRole API には S3Access ロールが必要です。

関連情報

  • Boto Python モジュールのインストールに関する詳細は、Red Hat Ceph Storage オブジェクトゲートウェイガイドS3 アクセスのテスト セクションを参照してください。
  • 詳細は、Red Hat Ceph Storage オブジェクトゲートウェイガイドユーザーの作成 セクションを参照してください。

3.3.9.6. Keystone で STS Lite を使用するための制限の回避 (テクノロジープレビュー)

Keystone の制限は、Secure Token Service (STS) 要求をサポートしないことです。もう 1 つの制限は、ペイロードハッシュがリクエストに含まれていないことです。この 2 つの制限を回避するには、Boto 認証コードを変更する必要があります。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター (バージョン 5.0 以降)。
  • 実行中の Ceph Object Gateway。
  • Boto Python モジュールのバージョン 3 以降のインストール

手順

  1. Boto の auth.py ファイルを開いて編集します。

    1. 以下の 4 つの行をコードブロックに追加します。

      class SigV4Auth(BaseSigner):
        """
        Sign a request with Signature V4.
        """
        REQUIRES_REGION = True
      
        def __init__(self, credentials, service_name, region_name):
            self.credentials = credentials
            # We initialize these value here so the unit tests can have
            # valid values.  But these will get overriden in ``add_auth``
            # later for real requests.
            self._region_name = region_name
            if service_name == 'sts': 1
                self._service_name = 's3' 2
            else: 3
                self._service_name = service_name 4
    2. 以下の 2 つの行をコードブロックに追加します。

      def _modify_request_before_signing(self, request):
              if 'Authorization' in request.headers:
                  del request.headers['Authorization']
              self._set_necessary_date_headers(request)
              if self.credentials.token:
                  if 'X-Amz-Security-Token' in request.headers:
                      del request.headers['X-Amz-Security-Token']
                  request.headers['X-Amz-Security-Token'] = self.credentials.token
      
              if not request.context.get('payload_signing_enabled', True):
                  if 'X-Amz-Content-SHA256' in request.headers:
                      del request.headers['X-Amz-Content-SHA256']
                  request.headers['X-Amz-Content-SHA256'] = UNSIGNED_PAYLOAD 1
              else: 2
                  request.headers['X-Amz-Content-SHA256'] = self.payload(request)

関連情報

  • Boto Python モジュールのインストールに関する詳細は、Red Hat Ceph Storage オブジェクトゲートウェイガイドS3 アクセスのテスト セクションを参照してください。

3.4. S3 バケット操作

開発者は、Ceph Object Gateway 経由で Amazon S3 アプリケーションプログラミングインターフェイス (API) を使用してバケット操作を実行できます。

以下の表は、バケットの Amazon S3 機能操作と関数のサポートステータスを示しています。

表3.2 バケット操作

機能状態注記

バケットの一覧表示

サポート対象

 

バケットの作成

サポート対象

固定 ACL のさまざまなセット。

Put Bucket Website

サポート対象

 

Get Bucket Website

サポート対象

 

Delete Bucket Website

サポート対象

 

バケットライフサイクル

一部サポート対象

ExpirationNoncurrentVersionExpiration および AbortIncompleteMultipartUpload がサポートされます。

PUT バケットライフサイクル

一部サポート対象

ExpirationNoncurrentVersionExpiration および AbortIncompleteMultipartUpload がサポートされます。

バケットライフサイクルの削除

サポート対象

 

バケットオブジェクトの取得

サポート対象

 

バケットの場所

サポート対象

 

バケットバージョンの取得

サポート対象

 

バケットバージョンの送信

サポート対象

 

バケットの削除

サポート対象

 

バケット ACL の取得

サポート対象

固定 ACL のさまざまなセット

バケット ACL の送信

サポート対象

固定 ACL のさまざまなセット

バケットに関する CORS 設定情報を取得

サポート対象

 

バケットに対し CORS 設定を行う

サポート対象

 

バケットの CORS 設定を削除

サポート対象

 

バケットオブジェクトバージョンの一覧表示

サポート対象

 

HEAD バケット

サポート対象

 

バケットマルチパートアップロードの一覧表示

サポート対象

 

バケットポリシー

一部サポート対象

 

バケットリクエストの支払いの取得

サポート対象

 

バケットリクエストの支払いを行う

サポート対象

 

マルチテナントバケット操作

サポート対象

 

3.4.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

3.4.2. S3 create bucket notifications

バケットレベルでバケット通知を作成します。通知設定には、Red Hat Ceph Storage Object Gateway S3 イベント (ObjectCreated および ObjectRemoved) があります。これらは公開され、バケット通知を送信する宛先である必要があります。バケット通知は S3 オペレーションです。

s3:objectCreate および s3:objectRemove イベントのバケット通知を作成するには、PUT を使用します。

client.put_bucket_notification_configuration(
   Bucket=bucket_name,
   NotificationConfiguration={
       'TopicConfigurations': [
           {
               'Id': notification_name,
               'TopicArn': topic_arn,
               'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*']
           }]})

重要

Red Hat は、ObjectCreate イベント (例: putpostmultipartUpload、および copy) をサポートします。また、Red Hat は、object_deletes3_multi_object_delete などの ObjectRemove イベントをサポートしています。

リクエストエンティティー

NotificationConfiguration
詳細
TopicConfiguration エンティティーのリスト。
Container
必須。
はい
TopicConfiguration
説明
イベントエンティティーの IdTopic、および list
タイプ
Container
必須。
はい
id
詳細
通知の名前。
文字列
必須
はい
トピック
説明

トピック Amazon リソース名 (ARN)

注記

トピックは事前に作成する必要があります。

タイプ
文字列
必須
はい
Event
詳細
サポートされるイベントの一覧。複数のイベントエンティティーを使用できます。省略すると、すべてのイベントが処理されます。
文字列
必須
いいえ
Filter
詳細
S3KeyS3Metadata、および S3Tags エンティティー。
Container
必須。
いいえ
S3Key
詳細
オブジェクトキーに基づくフィルターリングの FilterRule エンティティーの一覧。リストには最大で 3 つのエンティティーを含めることができます。たとえば、NamePrefixsuffix、または regex になります。リスト内のフィルタールールはすべて、フィルターが一致するために一致している必要があります。
Container
必須。
いいえ
S3Metadata
詳細
オブジェクトメタデータに基づくフィルターリングの FilterRule エンティティーの一覧。リスト内のフィルタールールはすべて、オブジェクトで定義されたメタデータと一致する必要があります。ただし、フィルターにリストされていない他のメタデータエントリーがある場合には、オブジェクトは一致するままになります。
Container
必須。
いいえ
S3Tags
詳細
オブジェクトタグに基づいてフィルターリングする FilterRule エンティティーの一覧。リスト内のフィルタールールはすべて、オブジェクトで定義されたタグと一致する必要があります。ただし、フィルターに他のタグがリストされていない場合、オブジェクトは引き続き一致します。
Container
必須。
いいえ
S3Key.FilterRule
詳細
Name エンティティーおよび Value エンティティーです。Name は、prefixsuffix、または regex です。Value は、キー接頭辞、キー接尾辞、またはキーに一致する正規表現を保持します。
タイプ
Container
必須。
はい
S3Metadata.FilterRule
詳細
Name エンティティーおよび Value エンティティーです。Name は、メタデータ属性の名前です (例: x-amz-meta-xxx)。この値は、この属性で想定される値になります。
Container
必須。
はい
S3Tags.FilterRule
詳細
Name エンティティーおよび Value エンティティーです。Name はタグキーで、値はタグの値です。
Container
必須。
はい

HTTP レスポンス

400
ステータスコード
MalformedXML
詳細
XML は適していません。
400
ステータスコード
InvalidArgument
詳細
ID がないか、トピック ARN がないか無効であるか、イベントが無効です。
404
ステータスコード
NoSuchBucket
詳細
バケットが存在しません。
404
ステータスコード
NoSuchKey
詳細
トピックが存在しません。

3.4.3. S3 get bucket notifications

特定の通知を取得するか、またはバケットに設定されたすべての通知を一覧表示します。

構文

Get /BUCKET?notification=NOTIFICATION_ID HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

Get /testbucket?notification=testnotificationID HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

レスポンスの例

<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <TopicConfiguration>
        <Id></Id>
        <Topic></Topic>
        <Event></Event>
        <Filter>
            <S3Key>
                <FilterRule>
                    <Name></Name>
                    <Value></Value>
                </FilterRule>
                 </S3Key>
             <S3Metadata>
                 <FilterRule>
                     <Name></Name>
                     <Value></Value>
                 </FilterRule>
             </S3Metadata>
             <S3Tags>
                 <FilterRule>
                     <Name></Name>
                     <Value></Value>
                 </FilterRule>
             </S3Tags>
         </Filter>
    </TopicConfiguration>
</NotificationConfiguration>

注記

notification サブリソースはバケット通知設定または空の NotificationConfiguration 要素を返します。呼び出し元はバケットの所有者である必要があります。

リクエストエンティティー

notification-id
詳細
通知の名前。ID が指定されていない場合は、すべての通知が一覧表示されます。
文字列
NotificationConfiguration
詳細
TopicConfiguration エンティティーのリスト。
Container
必須。
はい
TopicConfiguration
説明
イベントエンティティーの IdTopic、および list
タイプ
Container
必須。
はい
id
詳細
通知の名前。
文字列
必須
はい
トピック
説明

トピック Amazon リソース名 (ARN)

注記

トピックは事前に作成する必要があります。

タイプ
文字列
必須
はい
Event
詳細
処理されたイベント。複数のイベントエンティティーが存在する可能性があります。
文字列
必須
はい
Filter
詳細
指定の設定のフィルター。
Container
必須。
いいえ

HTTP レスポンス

404
ステータスコード
NoSuchBucket
詳細
バケットが存在しません。
404
ステータスコード
NoSuchKey
詳細
通知は、提供された場合に存在しません。

3.4.4. S3 delete bucket notifications

バケットから特定の通知またはすべての通知を削除します。

注記

通知の削除は、S3 通知 API の拡張機能です。バケットで定義された通知は、バケットの削除時に削除されます。不明な通知 (例: double delete) を削除しても、エラーとは見なされません。

特定の通知またはすべての通知を削除するには、DELETE を使用します。

構文

DELETE /BUCKET?notification=NOTIFICATION_ID HTTP/1.1

DELETE /testbucket?notification=testnotificationID HTTP/1.1

リクエストエンティティー

notification-id
詳細
通知の名前。通知 ID が指定されていない場合は、バケットのすべての通知が削除されます。
文字列

HTTP レスポンス

404
ステータスコード
NoSuchBucket
詳細
バケットが存在しません。

3.4.5. バケットのホスト名へのアクセス

バケットにアクセスするモードは 2 つあります。最初のメソッドは推奨されるメソッドで、バケットを URI の最上位ディレクトリーとして識別します。

GET /mybucket HTTP/1.1
Host: cname.domain.com

2 番目のメソッドは、仮想バケットのホスト名経由でバケットを識別します。

GET / HTTP/1.1
Host: mybucket.cname.domain.com

ヒント

2 番目の方法では高価なドメイン認定と DNS ワイルドカードが必要なため、Red Hat は最初の方法を推奨します。

3.4.6. S3 list buckets

GET / は、ユーザーがリクエストを行うユーザーが作成するバケットの一覧を返します。GET / は、認証ユーザーが作成したバケットのみを返します。匿名のリクエストを行うことはできません。

構文

GET / HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

レスポンスエンティティー

バケット
詳細
バケットの一覧用のコンテナー。
Container
Bucket
詳細
バケット情報用のコンテナー
Container
Name
詳細
バケット名。
文字列
CreationDate
詳細
バケットが作成された時点の UTC 時間。
Date
ListAllMyBucketsResult
詳細
結果のコンテナー。
Container
Owner
詳細
バケット所有者の ID および DisplayName のコンテナー。
Container
ID
詳細
バケット所有者の ID。
文字列
DisplayName
詳細
バケットの所有者の表示名。
文字列

3.4.7. S3 return a list of bucket objects

バケットオブジェクトの一覧を返します。

構文

GET /BUCKET?max-keys=25 HTTP/1.1
Host: cname.domain.com

パラメーター

prefix
詳細
指定された接頭辞が含まれるオブジェクトのみを返します。
文字列
delimiter
詳細
接頭辞と他のオブジェクト名の間に挿入される区切り文字。
文字列
marker
詳細
返されるオブジェクトリストの開始インデックス。
文字列
max-keys
詳細
返すキーの最大数。デフォルトは 1000 です。
Integer

HTTP レスポンス

200
ステータスコード
OK
詳細
取得するバケット

GET /BUCKET は、以下のフィールドが含まれるバケットのコンテナーを返します。

バケットレスポンスエンティティー

ListBucketResult
詳細
オブジェクト一覧のコンテナー。
エンティティー
Name
詳細
コンテンツが返されるバケットの名前。
文字列
接頭辞
詳細
オブジェクトキーの接頭辞。
文字列
Marker
詳細
返されるオブジェクトリストの開始インデックス。
文字列
MaxKeys
詳細
返されるキーの最大数。
Integer
デリミタ
詳細
設定されている場合は、同じ接頭辞を持つオブジェクトが CommonPrefixes リストに表示されます。
文字列
IsTruncated
詳細
true の場合、バケットの内容のサブセットのみが返されます。
Boolean
CommonPrefixes
詳細
複数のオブジェクトに同じ接頭辞が含まれる場合は、この一覧に表示されます。
Container

ListBucketResult にはオブジェクトが含まれ、各オブジェクトは Contents コンテナー内にあります。

オブジェクトレスポンスエンティティー

内容
詳細
オブジェクトのコンテナー。
Object
キー
詳細
オブジェクトのキー。
文字列
LastModified
詳細
オブジェクトの最終変更日および時間。
Date
ETag
詳細
オブジェクトの MD-5 ハッシュ。ETag はエンティティータグです。
文字列
サイズ
詳細
オブジェクトのサイズ。
Integer
StorageClass
詳細
常に STANDARD を返す必要があります。
文字列

3.4.8. S3 create a new bucket

新規バケットを作成します。バケットを作成するには、要求を認証するためにユーザー ID および有効な AWS アクセスキー ID が必要です。バケットを匿名ユーザーとして作成することはできません。

制約

通常、バケット名はドメイン名の制約に従う必要があります。

  • バケット名は一意である必要があります。
  • バケット名を IP アドレスとしてフォーマットすることはできません。
  • バケット名の長さは 3〜63 文字です。
  • バケット名には、大文字やアンダースコアを含めることはできません。
  • バケット名は小文字または数字で始まる必要があります。
  • バケット名にはダッシュ (-) を含めることができます。
  • バケット名は、一連の 1 つ以上のラベルである必要があります。隣接するラベルは単一のピリオド (.) で区切られます。バケット名には、小文字、数字、およびハイフンを含めることができます。各ラベルは、小文字または数字で開始および終了する必要があります。
注記

rgw_relaxed_s3_bucket_namestrue に設定されている場合、上記の制約は緩和されます。バケット名は一意である必要があり、IP アドレスとしてフォーマットすることはできず、最大 255 文字の文字、数字、ピリオド、ダッシュ、およびアンダースコアを含めることができます。

構文

PUT /BUCKET HTTP/1.1
Host: cname.domain.com
x-amz-acl: public-read-write

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

パラメーター

x-amz-acl
詳細
固定 ACL。
Valid Values
privatepublic-readpublic-read-writeauthenticated-read
必須。
いいえ

HTTP レスポンス

バケット名が一意で、制約内で未使用であると、操作は成功します。同じ名前のバケットがすでに存在し、ユーザーがバケット所有者である場合は、操作が成功します。バケット名が使用中の場合は、操作が失敗します。

409
ステータスコード
BucketAlreadyExists
詳細
バケットは、異なるユーザーの所有権に存在します。

3.4.9. S3 put bucket website

put bucket website API は、website サブリソースで指定されている Web サイトの設定を設定します。バケットを Web サイトとして設定するには、website のサブリソースをバケットに追加できます。

注記

put 操作には S3:PutBucketWebsite パーミッションが必要です。デフォルトでは、バケットの所有者のみがバケットに接続されている Web サイトを設定できます。

構文

PUT /BUCKET?website-configuration=HTTP/1.1

PUT /testbucket?website-configuration=HTTP/1.1

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.4.10. S3 get bucket website

get bucket website API は、website サブリソースで指定されている Web サイトの設定を取得します。

注記

Get 操作を実行するには、S3:GetBucketWebsite パーミッションが必要です。デフォルトでは、バケットの所有者のみがバケット Web 設定を読み取ることができます。

構文

GET /BUCKET?website-configuration=HTTP/1.1

GET /testbucket?website-configuration=HTTP/1.1

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.4.11. S3 delete bucket website

delete bucket website API は、バケットの Web サイト設定を削除します。

構文

DELETE /BUCKET?website-configuration=HTTP/1.1

DELETE /testbucket?website-configuration=HTTP/1.1

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.4.12. S3 delete a bucket

バケットを削除します。バケットの削除が正常に行われた後にバケット名を再利用できます。

構文

DELETE /BUCKET HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

HTTP レスポンス

204
ステータスコード
コンテンツなし
詳細
バケットが削除されました。

3.4.13. S3 bucket lifecycle

バケットのライフサイクル設定を使用してオブジェクトを管理し、そのオブジェクトが有効期間中効果的に保存されるようにすることができます。Ceph Object Gateway の S3 API は、AWS バケットライフサイクルアクションのサブセットをサポートします。

  • Expiration: これはバケット内のオブジェクトの有効期間を定義します。オブジェクトが存続する日数または有効期限がかかり、その時点で Ceph Object Gateway がオブジェクトを削除します。バケットがバージョン管理を有効にしない場合、Ceph Object Gateway はオブジェクトを永続的に削除します。バケットがバージョン管理を有効化する場合、Ceph Object Gateway は現行バージョンの削除マーカーを作成し、現行バージョンを削除します。
  • NoncurrentVersionExpiration: これはバケット内の最新バージョン以外のオブジェクトバージョンのライフサイクルを定義します。この機能を使用するには、バケットがバージョン管理を有効にする必要があります。最新バージョン以外のオブジェクトが存続する日数を取ります。この時点では、Ceph Object Gateway が最新バージョン以外のオブジェクトを削除します。
  • AbortIncompleteMultipartUpload: これは、非完全なマルチパートアップロードが中止されるまでの日数を定義します。

ライフサイクル設定には、<Rule> 要素を使用した 1 つ以上のルールが含まれます。

<LifecycleConfiguration>
    <Rule>
      <Prefix/>
      <Status>Enabled</Status>
      <Expiration>
        <Days>10</Days>
      </Expiration>
    </Rule>
</LifecycleConfiguration>

ライフサイクルルールは、ライフサイクルルールに指定する <Filter> 要素に基づいてバケットの全オブジェクトまたはサブセットに適用できます。フィルターは複数の方法を指定できます。

  • キーの接頭辞
  • オブジェクトタグ
  • キー接頭辞と 1 つ以上のオブジェクトタグの両方

キーの接頭辞

ライフサイクルルールは、キー名の接頭辞に基づいてオブジェクトのサブセットに適用できます。たとえば、<keypre/> を指定すると、keypre/ で始まるオブジェクトに適用されます。

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>keypre/</Prefix>
        </Filter>
    </Rule>
</LifecycleConfiguration>

異なるキー接頭辞を持つオブジェクトに、異なるライフサイクルルールを適用することもできます。

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>keypre/</Prefix>
        </Filter>
    </Rule>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>mypre/</Prefix>
        </Filter>
    </Rule>
</LifecycleConfiguration>

オブジェクトタグ

ライフサイクルルールは、<Key> 要素および <Value> 要素を使用して、特定のタグを持つオブジェクトにのみ適用できます。

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Tag>
              <Key>key</Key>
              <Value>value</Value>
           </Tag>
        </Filter>
    </Rule>
</LifecycleConfiguration>

接頭辞および 1 つ以上のタグの両方

ライフサイクルルールでは、キーの接頭辞と 1 つ以上のタグの両方に基づいてフィルターを指定できます。これらは <And> 要素でラップする必要があります。フィルターには 1 つの接頭辞と、ゼロまたは複数のタグのみを使用できます。

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
          <And>
             <Prefix>key-prefix</Prefix>
             <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
             </Tag>
             <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
             </Tag>
              ...
          </And>
        </Filter>
    </Rule>
</LifecycleConfiguration>

関連情報

3.4.14. S3 GET bucket lifecycle

バケットのライフサイクルを取得するには、GET を使用して宛先バケットを指定します。

構文

GET /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

リクエストヘッダー

共通リクエストヘッダーの詳細については、付録 BS3 共通リクエストヘッダー を参照してください。

応答

レスポンスには、バケットライフサイクルとその要素が含まれます。

3.4.15. S3 create or replace a bucket lifecycle

バケットライフサイクルを作成または置き換えるには、PUT を使用して宛先バケットとライフサイクル設定を指定します。Ceph Object Gateway は、S3 ライフサイクル機能のサブセットのみをサポートします。

構文

PUT /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
<LifecycleConfiguration>
  <Rule>
    <Expiration>
      <Days>10</Days>
    </Expiration>
  </Rule>
    ...
  <Rule>
  </Rule>
</LifecycleConfiguration>

リクエストヘッダー

content-md5
詳細
メッセージの base64 でエンコードされた MD-5 ハッシュ
Valid Values
文字列。デフォルトや制約はありません。
必須。
いいえ

関連情報

  • Amazon S3 共通リクエストヘッダーの詳細については、Red HatCephStorage 開発者ガイド の付録 B の S3 共通リクエストヘッダー のセクションを参照してください。
  • Amazon S3 バケットのライフサイクルの詳細については、Red HatCephStorage 開発者ガイドS3 バケットのライフサイクル のセクションを参照してください。

3.4.16. S3 delete a bucket lifecycle

バケットライフサイクルを削除するには、DELETE を使用し、宛先バケットを指定します。

構文

DELETE /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

リクエストヘッダー

リクエストには特別な要素が含まれません。

レスポンス

レスポンスは、一般的なレスポンスのステータスを返します。

関連情報

  • Amazon S3 共通リクエストヘッダーの詳細については、Red HatCephStorage 開発者ガイド の付録 B の S3 共通リクエストヘッダー のセクションを参照してください。
  • Amazon S3 共通応答ステータスコードの詳細については、Red HatCephStorage 開発者ガイド の付録 C の S3 共通応答ステータスコード のセクションを参照してください。

3.4.17. S3 get bucket location

バケットのゾーングループを取得します。これを呼び出すには、ユーザーはバケット所有者である必要があります。PUT 要求時に LocationConstraint を指定して、バケットをゾーングループに制限できます。

以下のように location サブリソースをバケットリソースに追加します。

構文

GET /BUCKET?location HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

レスポンスエンティティー

LocationConstraint
説明
バケットが存在するゾーングループ (デフォルトゾーングループ用の空の文字列)
タイプ
文字列

3.4.18. S3 get bucket versioning

バケットのバージョン状態を取得します。これを呼び出すには、ユーザーはバケット所有者である必要があります。

以下のように、versioning サブリソースをバケットリソースに追加します。

構文

GET /BUCKET?versioning HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.19. S3 put bucket versioning

このサブリソースは、既存のバケットのバージョン管理状態を設定します。バージョン管理状態を設定するには、バケット所有者である必要があります。バージョン管理状態がバケットに設定されていないと、バージョンは管理されていません。GET バージョン管理リクエストを実行しても、バージョン管理状態の値は返されません。

バケットによるバージョン管理の状態を設定します。

Enabled: バケットのオブジェクトのバージョン管理を有効にします。バケットに追加したすべてのオブジェクトは、一意のバージョン ID を受信します。Suspended: バケットのオブジェクトのバージョン管理を無効にします。バケットに追加したすべてのオブジェクトは、バージョン ID の Null を受け取ります。

構文

PUT /BUCKET?versioning HTTP/1.1

PUT /testbucket?versioning HTTP/1.1

バケット要求のエンティティー

VersioningConfiguration
詳細
要求のコンテナー。
Container
状態
詳細
バケットのバージョン状態を設定します。有効な値: Suspended/Enabled
文字列

3.4.20. S3 get bucket access control lists

バケットのアクセス制御リストを取得します。ユーザーはバケットの所有者である必要があります。または、バケットで READ_ACP パーミッションが付与されている必要があります。

以下のように、acl サブリソースをバケット要求に追加します。

構文

GET /BUCKET?acl HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

レスポンスエンティティー

AccessControlPolicy
詳細
応答のコンテナー。
Container
AccessControlList
詳細
ACL 情報用のコンテナー
Container
Owner
詳細
バケット所有者の ID および DisplayName のコンテナー。
Container
ID
詳細
バケット所有者の ID。
文字列
DisplayName
詳細
バケットの所有者の表示名。
文字列
Grant
詳細
Grantee および Permission のコンテナー。
Container
Grantee
詳細
パーミッションを付与されるユーザーの DisplayName および ID のコンテナー。
Container
パーミッション
詳細
Grantee バケットに指定されるパーミッション。
文字列

3.4.21. S3 put bucket Access Control Lists

既存のバケットへのアクセス制御を設定します。ユーザーはバケットの所有者である必要があります。または、バケットの WRITE_ACP パーミッションが付与されている必要があります。

以下のように、acl サブリソースをバケット要求に追加します。

構文

PUT /BUCKET?acl HTTP/1.1

リクエストエンティティー

S3 list multipart uploads

AccessControlList
詳細
ACL 情報用のコンテナー
Container
Owner
詳細
バケット所有者の ID および DisplayName のコンテナー。
Container
ID
詳細
バケット所有者の ID。
文字列
DisplayName
詳細
バケットの所有者の表示名。
文字列
Grant
詳細
Grantee および Permission のコンテナー。
Container
Grantee
詳細
パーミッションを付与されるユーザーの DisplayName および ID のコンテナー。
Container
パーミッション
詳細
Grantee バケットに指定されるパーミッション。
文字列

3.4.22. S3 get bucket cors

バケットに設定された CORS 設定情報を取得します。ユーザーはバケットの所有者である必要があります。または、バケットで READ_ACP パーミッションが付与されている必要があります。

以下に示すように、cors サブリソースをバケット要求に追加します。

構文

GET /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.23. S3 put bucket cors

バケットの CORS 設定を設定します。ユーザーはバケットの所有者である必要があります。または、バケットで READ_ACP パーミッションが付与されている必要があります。

以下に示すように、cors サブリソースをバケット要求に追加します。

構文

PUT /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.24. S3 delete a bucket cors

バケットに設定された CORS 設定情報を削除します。ユーザーはバケットの所有者である必要があります。または、バケットで READ_ACP パーミッションが付与されている必要があります。

以下に示すように、cors サブリソースをバケット要求に追加します。

構文

DELETE /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.25. S3 list bucket object versions

バケット内のすべてのバージョンのオブジェクトに関するメタデータの一覧を返します。バケットへの READ アクセスが必要です。

以下のように versions サブリソースをバケット要求に追加します。

構文

GET /BUCKET?versions HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

GET /BUCKET?versions のパラメーターを指定できますが、いずれも不要です。

パラメーター

prefix
説明
指定の接頭辞が含まれるキーが含まれる進行中のアップロードを返します。
タイプ
文字列
delimiter
詳細
接頭辞と他のオブジェクト名の間に挿入される区切り文字。
文字列
key-marker
詳細
アップロード一覧の最初のマーカー。
文字列
max-keys
詳細
進行中のアップロードの最大数。デフォルトは 1000 です。
Integer
version-id-marker
詳細
リストを開始するオブジェクトバージョンを指定します。
文字列

レスポンスエンティティー

KeyMarker
詳細
key-marker 要求パラメーターによって指定されるキーマーカー (存在する場合)。
文字列
NextKeyMarker
詳細
IsTruncatedtrue の場合に後続のリクエストで使用するキーマーカー。
文字列
NextUploadIdMarker
詳細
IsTruncatedtrue の場合に後続のリクエストで使用するアップロード ID マーカー。
文字列
IsTruncated
詳細
true の場合は、バケットのアップロードコンテンツのサブセットのみが返されます。
Boolean
サイズ
詳細
アップロードした部分のサイズ。
Integer
DisplayName
説明
所有者の表示名。
タイプ
文字列
ID
説明
所有者の ID。
タイプ
文字列
Owner
詳細
オブジェクトを所有するユーザーの ID および DisplayName のコンテナー。
Container
StorageClass
詳細
作成されるオブジェクトを保存するために使用されるメソッド。STANDARD または REDUCED_REDUNDANCY
文字列
バージョン
詳細
バージョン情報のコンテナー
Container
versionId
詳細
オブジェクトのバージョン ID。
文字列
versionIdMarker
詳細
省略されたレスポンスのキーの最後のバージョン。
文字列

3.4.26. S3 head bucket

バケットで HEAD を呼び出して、存在する場合は、呼び出し元にアクセス権限があるかどうかを判断します。バケットが存在し、呼び出し元にパーミッションがある場合は 200 OK を返します。バケットが存在しない場合は 404 Not Found、バケットが存在しますが呼び出し元にはアクセスパーミッションがない場合は 403 Forbidden を返します。

構文

HEAD /BUCKET HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.27. S3 list multipart uploads

GET /?uploads は、現在の進行中のマルチパートアップロードの一覧を返します。つまり、アプリケーションは複数パートごとのアップロードを開始しますが、サービスがすべてのアップロードを完了しているわけではありません。

構文

GET /BUCKET?uploads HTTP/1.1

GET /BUCKET?uploads のパラメーターを指定できますが、いずれも不要です。

パラメーター

prefix
説明
指定の接頭辞が含まれるキーが含まれる進行中のアップロードを返します。
タイプ
文字列
delimiter
詳細
接頭辞と他のオブジェクト名の間に挿入される区切り文字。
文字列
key-marker
詳細
アップロード一覧の最初のマーカー。
文字列
max-keys
詳細
進行中のアップロードの最大数。デフォルトは 1000 です。
Integer
max-uploads
詳細
マルチパートアップロードの最大数。範囲は 1-1000 です。デフォルトは 1000 です。
Integer
version-id-marker
詳細
key-marker が指定されていない場合は無視されます。ID またはそれに続く辞書順序でリストされる最初のアップロードの ID を指定します。
タイプ
文字列

レスポンスエンティティー

ListMultipartUploadsResult
詳細
結果のコンテナー
Container
ListMultipartUploadsResult.Prefix
説明
prefix 要求パラメーターで指定される接頭辞 (存在する場合)。
タイプ
文字列
Bucket
詳細
バケットのコンテンツを受け取るバケット。
文字列
KeyMarker
詳細
key-marker 要求パラメーターによって指定されるキーマーカー (存在する場合)。
文字列
UploadIdMarker
詳細
upload-id-marker 要求パラメーターによって指定されるマーカー (存在する場合)。
文字列
NextKeyMarker
詳細
IsTruncatedtrue の場合に後続のリクエストで使用するキーマーカー。
文字列
NextUploadIdMarker
詳細
IsTruncatedtrue の場合に後続のリクエストで使用するアップロード ID マーカー。
文字列
MaxUploads
詳細
max-uploads リクエストパラメーターで指定される最大アップロード数。
Integer
デリミタ
詳細
設定されている場合は、同じ接頭辞を持つオブジェクトが CommonPrefixes リストに表示されます。
文字列
IsTruncated
詳細
true の場合は、バケットのアップロードコンテンツのサブセットのみが返されます。
Boolean
Upload
詳細
KeyUploadIdInitiatorOwnerStorageClass、および Initiated 要素のコンテナー。
Container
キー
詳細
マルチパートアップロードが完了した後のオブジェクトのキー。
文字列
UploadId
詳細
マルチパートアップロードを識別する ID
文字列
イニシエーター
詳細
アップロードを開始したユーザーの IDDisplayName が含まれます。
Container
DisplayName
詳細
イニシエーターの表示名。
文字列
ID
詳細
イニシエーターの ID。
文字列
Owner
詳細
アップロードしたオブジェクトを所有するユーザーの ID および DisplayName のコンテナー。
Container
StorageClass
詳細
作成されるオブジェクトを保存するために使用されるメソッド。STANDARD または REDUCED_REDUNDANCY
文字列
Initiated
詳細
ユーザーがアップロードを開始した日時。
Date
CommonPrefixes
詳細
複数のオブジェクトに同じ接頭辞が含まれる場合は、この一覧に表示されます。
Container
CommonPrefixes.Prefix
詳細
prefix リクエストパラメーターで定義されている接頭辞の後にキーのサブ文字列。
文字列

3.4.28. S3 bucket policies

Ceph Object Gateway は、バケットに適用される Amazon S3 ポリシー言語のサブセットをサポートします。

作成および削除

Ceph Object Gateway は、CLI ツール radosgw-admin を使用するのではなく、標準の S3 操作を使用して S3 バケットポリシーを管理します。

管理者は、s3cmd コマンドを使用してポリシーを設定または削除できます。

$ cat > examplepol
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred"]},
    "Action": "s3:PutObjectAcl",
    "Resource": [
      "arn:aws:s3:::happybucket/*"
    ]
  }]
}

$ s3cmd setpolicy examplepol s3://happybucket
$ s3cmd delpolicy s3://happybucket

制限

Ceph Object Gateway がサポートするのは以下の S3 アクションだけです。

  • s3:AbortMultipartUpload
  • s3:CreateBucket
  • s3:DeleteBucketPolicy
  • s3:DeleteBucket
  • s3:DeleteBucketWebsite
  • s3:DeleteObject
  • s3:DeleteObjectVersion
  • s3:GetBucketAcl
  • s3:GetBucketCORS
  • s3:GetBucketLocation
  • s3:GetBucketPolicy
  • s3:GetBucketRequestPayment
  • s3:GetBucketVersioning
  • s3:GetBucketWebsite
  • s3:GetLifecycleConfiguration
  • s3:GetObjectAcl
  • s3:GetObject
  • s3:GetObjectTorrent
  • s3:GetObjectVersionAcl
  • s3:GetObjectVersion
  • s3:GetObjectVersionTorrent
  • s3:ListAllMyBuckets
  • s3:ListBucketMultiPartUploads
  • s3:ListBucket
  • s3:ListBucketVersions
  • s3:ListMultipartUploadParts
  • s3:PutBucketAcl
  • s3:PutBucketCORS
  • s3:PutBucketPolicy
  • s3:PutBucketRequestPayment
  • s3:PutBucketVersioning
  • s3:PutBucketWebsite
  • s3:PutLifecycleConfiguration
  • s3:PutObjectAcl
  • s3:PutObject
  • s3:PutObjectVersionAcl
注記

Ceph Object Gateway は、ユーザー、グループ、またはロールへのポリシー設定をサポートしません。

Ceph Object Gateway は、Amazon の 12 桁のアカウント ID の代わりに RGW の tenant 識別子を使用します。Amazon Web Service (AWS) S3 と Ceph Object Gateway S3 との間でポリシーを使用する場合、Ceph Object Gateway は、ユーザーの作成時に Amazon アカウント ID をテナント ID として使用する必要があります。

AWS S3 では、すべてのテナントが単一の名前空間を共有します。対照的に、Ceph Object Gateway はすべてのテナントにバケットの独自の名前空間を提供します。現在、別のテナントに属するバケットにアクセスしようとしている Ceph Object Gateway クライアントは、S3 リクエストの tenant:bucket としてそれを処理する必要があります。

AWS では、バケットポリシーは別のアカウントへのアクセスを許可し、そのアカウントの所有者はユーザーパーミッションを持つ個々のユーザーにアクセス権限を付与できます。Ceph Object Gateway はユーザー、ロール、およびグループのパーミッションをサポートしていません。そのため、アカウントの所有者は個々のユーザーに直接アクセスを付与する必要があります。

重要

アカウント全体のアクセスをバケットに付与すると、そのアカウントのすべてのユーザーにアクセス権限が付与されます。

バケットポリシーは文字列の補正を サポートしません

Ceph Object Gateway では、以下の条件キーがサポートされます。

  • aws:CurrentTime
  • aws:EpochTime
  • aws:PrincipalType
  • aws:Referer
  • aws:SecureTransport
  • aws:SourceIp
  • aws:UserAgent
  • aws:username

Ceph Object Gateway のみ は、ListBucket アクションの以下の条件キーをサポートします。

  • s3:prefix
  • s3:delimiter
  • s3:max-keys

Swift への影響

Ceph Object Gateway は、Swift API にバケットポリシーを設定する機能はありません。ただし、S3 API で設定されているバケットポリシーは Swift と S3 のいずれの操作も管理します。

Ceph Object Gateway は、ポリシーで指定されたプリンシパルに対して Swift の認証情報と一致します。

3.4.29. S3 get the request payment configuration on a bucket

requestPayment サブリソースを使用してバケットの要求支払い設定を返します。ユーザーはバケットの所有者である必要があります。または、バケットで READ_ACP パーミッションが付与されている必要があります。

以下のように requestPayment サブリソースをバケット要求に追加します。

構文

GET /BUCKET?requestPayment HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

3.4.30. S3 set the request payment configuration on a bucket

requestPayment サブリソースを使用してバケットの要求支払い設定を設定します。デフォルトでは、バケットの所有者はバケットからのダウンロードに対して支払います。この設定パラメーターにより、バケットの所有者は、ダウンロードを要求するすべてのユーザーが要求に対して要求およびバケットからダウンロードに対して課金されることを指定できます。

以下のように requestPayment サブリソースをバケット要求に追加します。

構文

PUT /BUCKET?requestPayment HTTP/1.1
Host: cname.domain.com

リクエストエンティティー

Payer
詳細
ダウンロードおよびリクエストの費用の課金を指定します。
Enum
RequestPaymentConfiguration
詳細
Payer のコンテナー。
Container

3.4.31. マルチテナントバケット操作

クライアントアプリケーションがバケットにアクセスする場合は、常に特定ユーザーの認証情報で動作します。Red Hat Ceph Storage クラスターでは、すべてのユーザーがテナントに属します。そのため、テナントが明示的に指定されていない場合は、すべてのバケット操作のコンテキストに暗黙的なテナントがあります。したがって、マルチテナンシーは、参照されるバケットと参照ユーザーが同じテナントに属する限り、以前のリリースと完全に後方互換性があります。

明示的なテナントの指定に使用される拡張機能は、使用されるプロトコルおよび認証システムによって異なります。

以下の例では、コロン文字はテナントとバケットを分離します。そのため、URL のサンプルは以下のようになります。

https://rgw.domain.com/tenant:bucket

一方、単純な Python の例は、バケットメソッド自体でテナントとバケットを分離します。

from boto.s3.connection import S3Connection, OrdinaryCallingFormat
  c = S3Connection(
    aws_access_key_id="TESTER",
    aws_secret_access_key="test123",
    host="rgw.domain.com",
    calling_format = OrdinaryCallingFormat()
  )
  bucket = c.get_bucket("tenant:bucket")

注記

ホスト名に、コロンや、バケット名では有効ではない他の区切り文字を含めることができないため、マルチテナンシーを使用して S3 形式のサブドメインを使用することはできません。期間を使用するとあいまいな構文が作成されます。そのため、bucket-in-URL-path 形式をマルチテナンシーと併用する必要があります。

関連情報

  • 詳細は、Red Hat Ceph Storage Object Gateway ガイドユーザー管理マルチテネンシー セクションを参照してください。

3.5. S3 オブジェクト操作

開発者は、Ceph Object Gateway 経由で Amazon S3 アプリケーションプログラミングインターフェイス (API) を使用してオブジェクト操作を行うことができます。

以下の表は、関数のサポートステータスとともに、オブジェクトの Amazon S3 の機能操作を示しています。

表3.3 オブジェクト操作

機能状態

Get Object

サポート対象

Get Object Information

サポート対象

Put Object Lock

サポート対象

Get Object Lock

サポート対象

Put Object Legal Hold

サポート対象

Get Object Legal Hold

サポート対象

Put Object Retention

サポート対象

Get Object Retention

サポート対象

Put Object Tagging

サポート対象

Get Object Tagging

サポート対象

Delete Object Tagging

サポート対象

Put Object

サポート対象

Delete Object

サポート対象

Delete Multiple Objects

サポート対象

Get Object ACLs

サポート対象

Put Object ACLs

サポート対象

Copy Object

サポート対象

Post Object

サポート対象

Options Object

サポート対象

Initiate Multipart Upload

サポート対象

Add a Part to a Multipart Upload

サポート対象

List Parts of a Multipart Upload

サポート対象

Assemble Multipart Upload

サポート対象

Copy Multipart Upload

サポート対象

Abort Multipart Upload

サポート対象

マルチテナンシー

サポート対象

3.5.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

3.5.2. S3 get an object from a bucket

バケットからオブジェクトを取得します。

構文

GET /BUCKET/OBJECT HTTP/1.1

versionId サブリソースを追加して、オブジェクトの特定のバージョンを取得します。

構文

GET /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1

リクエストヘッダー

range
詳細
取得するオブジェクトの範囲。
Valid Values
範囲: bytes=beginbyte-endbyte
必須。
いいえ
if-modified-since
詳細
タイムスタンプ以降に変更した場合にのみ取得します。
Valid Values
Timestamp
必須。
いいえ
if-match
詳細
オブジェクトの ETag が ETag と一致する場合にのみ取得します。
Valid Values
エンティティータグ
必須。
いいえ
if-none-match
詳細
オブジェクトの ETag が ETag と一致する場合にのみ取得します。
Valid Values
エンティティータグ
必須。
いいえ

レスポンスヘッダー

Content-Range
詳細
データ範囲 (範囲ヘッダーフィールドがリクエストに指定された場合のみを返します)。
x-amz-version-id
詳細
バージョン ID または Null を返します。

3.5.3. S3 get information on an object

オブジェクトに関する情報を返します。この要求は Get Object 要求と同じヘッダー情報を返しますが、オブジェクトデータペイロードではなくメタデータのみが含まれます。

オブジェクトの現行バージョンを取得します。

構文

HEAD /BUCKET/OBJECT HTTP/1.1

versionId サブリソースを追加して、特定バージョンの情報を取得します。

構文

HEAD /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1

リクエストヘッダー

range
詳細
取得するオブジェクトの範囲。
Valid Values
範囲: bytes=beginbyte-endbyte
必須。
いいえ
if-modified-since
詳細
タイムスタンプ以降に変更した場合にのみ取得します。
Valid Values
Timestamp
必須。
いいえ
if-match
詳細
オブジェクトの ETag が ETag と一致する場合にのみ取得します。
Valid Values
エンティティータグ
必須。
いいえ
if-none-match
詳細
オブジェクトの ETag が ETag と一致する場合にのみ取得します。
Valid Values
エンティティータグ
必須。
いいえ

レスポンスヘッダー

x-amz-version-id
詳細
バージョン ID または Null を返します。

3.5.4. S3 put object lock

put object lock API は、選択したバケットにロック設定を配置します。オブジェクトロックを使用すると、write-once-read-many(WORM) モデルを使用してオブジェクトを格納できます。オブジェクトロックは、オブジェクトが一定期間または無期限に削除または上書きされないようにします。Object Lock 設定に指定されるルールは、デフォルトで選択されるバケットにあるすべての新規オブジェクトに適用されます。

重要

バケットを作成するときにオブジェクトロックを有効にします。有効にしないと、操作が失敗します。

構文

PUT /BUCKET?object-lock HTTP/1.1

PUT /testbucket?object-lock HTTP/1.1

リクエストエンティティー

ObjectLockConfiguration
詳細
要求のコンテナー。
Container
必須。
はい
ObjectLockEnabled
詳細
このバケットにオブジェクトロック設定が有効になっているかどうかを示します。
文字列
必須
はい
**ルール**
詳細
指定されたバケットの位置にあるオブジェクトロックルール。
Container
必須。
いいえ
DefaultRetention
詳細
指定されたバケットに設定される新規オブジェクトに適用されるデフォルトの保持期間。
Container
必須。
いいえ
Mode
詳細
デフォルトのオブジェクトのロック保持モード。有効な値は GOVERNANCE/COMPLIANCE です。
Container
必須。
はい
Days
詳細
デフォルトの保持期間に指定される日数。
整数
必須
いいえ
Years
詳細
デフォルトの保持期間に指定されるの年数。
整数
必須
いいえ

HTTP レスポンス

400
ステータスコード
MalformedXML
詳細
XML は適していません。
409
ステータスコード
InvalidBucketState
詳細
バケットオブジェクトのロックが有効になっていません。

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.5. S3 get object lock

get object lock API は、バケットのロック設定を取得します。

構文

GET /BUCKET?object-lock HTTP/1.1

GET /testbucket?object-lock HTTP/1.1

レスポンスエンティティー

ObjectLockConfiguration
詳細
要求のコンテナー。
Container
必須。
はい
ObjectLockEnabled
詳細
このバケットにオブジェクトロック設定が有効になっているかどうかを示します。
文字列
必須
はい
**ルール**
説明
指定されたバケットの位置に、オブジェクトロックルールがあります。
タイプ
Container
必須。
いいえ
DefaultRetention
詳細
指定されたバケットに設定される新規オブジェクトに適用されるデフォルトの保持期間。
Container
必須。
いいえ
Mode
詳細
デフォルトのオブジェクトのロック保持モード。有効な値は GOVERNANCE/COMPLIANCE です。
Container
必須。
はい
Days
詳細
デフォルトの保持期間に指定される日数。
整数
必須
いいえ
Years
詳細
デフォルトの保持期間に指定されるの年数。
整数
必須
いいえ

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.8. S3 put object retention

put object retention API は、オブジェクトの保持設定をオブジェクトに配置します。保持期間は、オブジェクトのバージョンを一定時間保護します。ガバナンスモードとコンプライアンスモードの 2 つのモードがあります。これら 2 つの保持モードは、オブジェクトに対して異なる保護レベルを適用します。

注記

この期間中、オブジェクトは write-once-read-many(WORM 保護) で、上書きまたは削除することはできません。

構文

PUT /BUCKET/OBJECT?retention&versionId= HTTP/1.1

PUT /testbucket/testobject?retention&versionId= HTTP/1.1

versionId サブリソースは、オブジェクトの特定のバージョンを取得します。

リクエストエンティティー

Retention
詳細
要求のコンテナー。
Container
必須。
はい
Mode
詳細
指定されたオブジェクトの保持モード。有効な値: GOVERNANCE/COMPLIANCE
文字列
必須
はい
RetainUntilDate
詳細
保持日。形式: 2020-01-05T00:00:00.000Z
Timestamp
必須。
はい

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.9. S3 get object retention

get object retention API は、オブジェクト上でオブジェクトの保持設定を取得します。

構文

GET /BUCKET/OBJECT?retention&versionId= HTTP/1.1

GET /testbucket/testobject?retention&versionId= HTTP/1.1

versionId サブリソースは、オブジェクトの特定のバージョンを取得します。

レスポンスエンティティー

Retention
詳細
要求のコンテナー。
Container
必須。
はい
Mode
詳細
指定されたオブジェクトの保持モード。有効な値: GOVERNANCE/COMPLIANCE
文字列
必須
はい
RetainUntilDate
詳細
保持日。形式: 2020-01-05T00:00:00.000Z
Timestamp
必須。
はい

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.10. S3 put object tagging

put object tagging API は、タグをオブジェクトに関連付けます。タグはキーと値のペアです。他のバージョンのタグを配置するには、versionId クエリーパラメーターを使用します。s3:PutObjectTagging アクションを実行するパーミッションが必要です。デフォルトでは、バケットの所有者はこのパーミッションを持ち、このパーミッションを他のユーザーに付与できます。

構文

PUT /BUCKET/OBJECT?tagging&versionId= HTTP/1.1

PUT /testbucket/testobject?tagging&versionId= HTTP/1.1

リクエストエンティティー

タグ付け
詳細
要求のコンテナー。
Container
必須。
はい
TagSet
詳細
タグのセットのコレクションです。
文字列
必須
はい

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.11. S3 get object tagging

get object tagging API は、オブジェクトのタグを返します。デフォルトでは、GET 操作はオブジェクトの現行バージョンについての情報を返します。

注記

バージョン付けされたバケットの場合は、バケットに複数のバージョンのオブジェクトを使用できます。他のバージョンのタグを取得するには、要求に versionId クエリーパラメーターを追加します。

構文

GET /BUCKET/OBJECT?tagging&versionId= HTTP/1.1

GET /testbucket/testobject?tagging&versionId= HTTP/1.1

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.12. S3 delete object tagging

delete object tagging API は、指定されたオブジェクトから設定されたタグ全体を削除します。この操作を使用するには、s3:DeleteObjectTagging アクションを実行するパーミッションが必要です。

注記

特定のオブジェクトバージョンのタグを削除するには、リクエストに versionId クエリーパラメーターを追加します。

構文

DELETE /BUCKET/OBJECT?tagging&versionId= HTTP/1.1

DELETE /testbucket/testobject?tagging&versionId= HTTP/1.1

関連情報

  • この API 呼び出しの詳細は、S3 API を参照してください。

3.5.13. S3 add an object to a bucket

オブジェクトをバケットに追加します。この操作を実行するには、バケットに書き込みパーミッションが必要です。

構文

PUT /BUCKET/OBJECT HTTP/1.1

リクエストヘッダー

content-md5
詳細
メッセージの base64 でエンコードされた MD-5 ハッシュ
Valid Values
文字列。デフォルトや制約はありません。
必須。
いいえ
content-type
詳細
標準の MIME タイプ。
Valid Values
MIME タイプ。デフォルト: binary/octet-stream
必須。
いいえ
x-amz-meta-<…​>*
詳細
ユーザーのメタデータ。オブジェクトとともに保存されます。
Valid Values
8kb までの文字列。デフォルトはありません。
必須。
いいえ
x-amz-acl
詳細
固定 ACL。
Valid Values
privatepublic-readpublic-read-writeauthenticated-read
必須。
いいえ

レスポンスヘッダー

x-amz-version-id
詳細
バージョン ID または Null を返します。

3.5.14. S3 delete an object

オブジェクトを削除します。含まれるバケットに WRITE パーミッションを設定する必要があります。

オブジェクトを削除します。オブジェクトのバージョン管理が有効なの場合、マーカーが作成されます。

構文

DELETE /BUCKET/OBJECT HTTP/1.1

バージョン管理が有効な場合にオブジェクトを削除するには、versionId サブリソースおよび削除するオブジェクトのバージョンを指定する必要があります。

DELETE /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1

3.5.15. S3 delete multiple objects

この API 呼び出しは、バケットから複数のオブジェクトを削除します。

構文

POST /BUCKET/OBJECT?delete HTTP/1.1

3.5.16. S3 get an object's Access Control List (ACL)

オブジェクトの現行バージョンの ACL を返します。

構文

GET /BUCKET/OBJECT?acl HTTP/1.1

versionId サブリソースを追加して、特定バージョンの ACL を取得します。

構文

GET /BUCKET/OBJECT?versionId=VERSION_ID&acl HTTP/1.1

レスポンスヘッダー

x-amz-version-id
詳細
バージョン ID または Null を返します。

レスポンスエンティティー

AccessControlPolicy
詳細
応答のコンテナー。
Container
AccessControlList
詳細
ACL 情報用のコンテナー
Container
Owner
詳細
バケット所有者の ID および DisplayName のコンテナー。
Container
ID
詳細
バケット所有者の ID。
文字列
DisplayName
詳細
バケットの所有者の表示名。
文字列
Grant
詳細
Grantee および Permission のコンテナー。
Container
Grantee
詳細
パーミッションを付与されるユーザーの DisplayName および ID のコンテナー。
Container
パーミッション
詳細
Grantee バケットに指定されるパーミッション。
文字列

3.5.17. S3 set an object's Access Control List (ACL)

オブジェクトの現行バージョンのオブジェクト ACL を設定します。

構文

PUT /BUCKET/OBJECT?acl

リクエストエンティティー

AccessControlPolicy
詳細
応答のコンテナー。
Container
AccessControlList
詳細
ACL 情報用のコンテナー
Container
Owner
詳細
バケット所有者の ID および DisplayName のコンテナー。
Container
ID
詳細
バケット所有者の ID。
文字列
DisplayName
詳細
バケットの所有者の表示名。
文字列
Grant
詳細
Grantee および Permission のコンテナー。
Container
Grantee
詳細
パーミッションを付与されるユーザーの DisplayName および ID のコンテナー。
Container
パーミッション
詳細
Grantee バケットに指定されるパーミッション。
文字列

3.5.18. S3 copy an object

オブジェクトをコピーするには、PUT を使用して宛先バケットとオブジェクト名を指定します。

構文

PUT /DEST_BUCKET/DEST_OBJECT HTTP/1.1
x-amz-copy-source: SOURCE_BUCKET/SOURCE_OBJECT

リクエストヘッダー

x-amz-copy-source
詳細
ソースバケット名 + オブジェクト名。
Valid Values
BUCKET/OBJECT
必須。
はい
x-amz-acl
詳細
固定 ACL。
Valid Values
privatepublic-readpublic-read-writeauthenticated-read
必須。
いいえ
x-amz-copy-if-modified-since
詳細
タイムスタンプ以降に変更された場合のみコピーします。
Valid Values
Timestamp
必須。
いいえ
x-amz-copy-if-unmodified-since
詳細
タイムスタンプ以降変更されていない場合にのみコピーします。
Valid Values
Timestamp
必須。
いいえ
x-amz-copy-if-match
詳細
オブジェクトの ETag が ETag と一致する場合に限りコピーします。
Valid Values
エンティティータグ
必須。
いいえ
x-amz-copy-if-none-match
詳細
オブジェクトの ETag が ETag と一致する場合に限りコピーします。
Valid Values
エンティティータグ
必須。
いいえ

レスポンスエンティティー

CopyObjectResult
詳細
レスポンス要素のコンテナー。
Container
LastModified
詳細
ソースオブジェクトを最後に変更した日付。
Date
Etag
詳細
新規オブジェクトの ETag。
文字列

3.5.19. S3 add an object to a bucket using HTML forms

HTML フォームを使用してオブジェクトをバケットに追加します。この操作を実行するには、バケットに書き込みパーミッションが必要です。

構文

POST /BUCKET/OBJECT HTTP/1.1

3.5.20. S3 determine options for a request

特定の送信元、HTTP メソッド、およびヘッダーを使用して実際のリクエストを送信できるかどうかを判断するための事前要求です。

構文

OPTIONS /OBJECT HTTP/1.1

3.5.21. S3 initiate a multipart upload

複数パートからなるアップロードプロセスを開始します。追加部分の追加、パーツの一覧表示、および複数パートアップロードの完了または破棄時に指定できる UploadId を返します。

構文

POST /BUCKET/OBJECT?uploads

リクエストヘッダー

content-md5
詳細
メッセージの base64 でエンコードされた MD-5 ハッシュ
Valid Values
文字列。デフォルトや制約はありません。
必須。
いいえ
content-type
詳細
標準の MIME タイプ。
Valid Values
MIME タイプ。デフォルト: binary/octet-stream
必須。
いいえ
x-amz-meta-<…​>
詳細
ユーザーのメタデータ。オブジェクトとともに保存されます。
Valid Values
8kb までの文字列。デフォルトはありません。
必須。
いいえ
x-amz-acl
詳細
固定 ACL。
Valid Values
privatepublic-readpublic-read-writeauthenticated-read
必須。
いいえ

レスポンスエンティティー

InitiatedMultipartUploadsResult
詳細
結果のコンテナー
Container
Bucket
詳細
オブジェクトの内容を受け取るバケット。
文字列
キー
詳細
key リクエストパラメーターで指定されるキー (存在する場合)。
文字列
UploadId
詳細
upload-id 要求パラメーターで指定される ID で、マルチパートアップロードを特定します (存在する場合)。
文字列

3.5.22. S3 add a part to a multipart upload

マルチパートアップロードに部分を追加します。

複数パートのアップロードに部分を追加するために uploadId サブリソースとアップロード ID を指定します。

構文

PUT /BUCKET/OBJECT?partNumber=&uploadId=UPLOAD_ID HTTP/1.1

以下の HTTP レスポンスが返されます。

HTTP レスポンス

404
ステータスコード
NoSuchUpload
詳細
指定した upload-id がこのオブジェクトで開始されたアップロードと一致しません。

3.5.23. S3 list the parts of a multipart upload

マルチパートアップロードの一部を一覧表示するために uploadId サブリソースとアップロード ID を指定します。

構文

GET /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1

レスポンスエンティティー

InitiatedMultipartUploadsResult
詳細
結果のコンテナー
Container
Bucket
詳細
オブジェクトの内容を受け取るバケット。
文字列
キー
詳細
key リクエストパラメーターで指定されるキー (存在する場合)。
文字列
UploadId
詳細
upload-id 要求パラメーターで指定される ID で、マルチパートアップロードを特定します (存在する場合)。
文字列
イニシエーター
詳細
アップロードを開始したユーザーの IDDisplayName が含まれます。
Container
ID
詳細
イニシエーターの ID。
文字列
DisplayName
詳細
イニシエーターの表示名。
文字列
Owner
詳細
アップロードしたオブジェクトを所有するユーザーの ID および DisplayName のコンテナー。
Container
StorageClass
詳細
作成されるオブジェクトを保存するために使用されるメソッド。STANDARD または REDUCED_REDUNDANCY
文字列
PartNumberMarker
詳細
IsTruncatedtrue の場合に後続のリクエストで使用する部分マーカー。一覧の先頭に指定します。
文字列
NextPartNumberMarker
詳細
IsTruncatedtrue の場合は、後続のリクエストで使用する次の部分マーカー。リストの末尾。
文字列
IsTruncated
詳細
true の場合は、オブジェクトのアップロードコンテンツのサブセットのみが返されます。
Boolean
部分
詳細
KeyPartInitiatorOwnerStorageClass、および Initiated 要素のコンテナー。
Container
PartNumber
詳細
KeyPartInitiatorOwnerStorageClass、および Initiated 要素のコンテナー。
Integer
ETag
詳細
コンポーネントのエンティティータグです。
文字列
サイズ
詳細
アップロードした部分のサイズ。
Integer

3.5.24. S3 assemble the uploaded parts

アップロードした部分を組み立て、新規オブジェクトを作成します。これにより、複数パートのアップロードが実行されます。

複数パートからなるアップロードを完了するには、uploadId サブリソースとアップロード ID を指定します。

構文

POST /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1

リクエストエンティティー

CompleteMultipartUpload
詳細
1 つ以上の部分で設定されるコンテナー。
Container
必須。
はい
部分
詳細
PartNumber および ETag のコンテナー。
Container
必須。
はい
PartNumber
詳細
部分の識別子。
整数
必須
はい
ETag
詳細
コンポーネントのエンティティータグです。
文字列
必須
はい

レスポンスエンティティー

CompleteMultipartUploadResult
詳細
応答のコンテナー。
Container
場所
詳細
新規オブジェクトのリソース識別子 (パス)。
URI
bucket
詳細
新規オブジェクトが含まれるバケットの名前。
文字列
キー
詳細
オブジェクトのキー。
文字列
ETag
詳細
新規オブジェクトのエンティティータグ。
文字列

3.5.25. S3 copy a multipart upload

既存のオブジェクトからデータをデータソースとしてコピーして、パーツをアップロードします。

複数パートからなるアップロードコピーを実行するには、uploadId サブリソースとアップロード ID を指定します。

構文

PUT /BUCKET/OBJECT?partNumber=PartNumber&uploadId=UPLOAD_ID HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

リクエストヘッダー

x-amz-copy-source
詳細
ソースバケット名およびオブジェクト名。
Valid Values
BUCKET/OBJECT
必須。
はい
x-amz-copy-source-range
詳細
ソースオブジェクトからコピーするバイトの範囲。
Valid Values
範囲: bytes=first-last (ここで、最初のおよび最後は、コピーするゼロベースのバイトオフセットです)たとえば、bytes=0-9 は、ソースの最初の 10 バイトをコピーすることを示しています。
必須。
いいえ

レスポンスエンティティー

CopyPartResult
詳細
すべてのレスポンス要素のコンテナー。
Container
ETag
詳細
新しい部分の ETag を返します。
文字列
LastModified
詳細
最後に変更した日付を返します。
文字列

関連情報

3.5.26. S3 abort a multipart upload

複数パートアップロードを中止します。

マルチパートによるアップロードを中止するために uploadId サブリソースとアップロード ID を指定します。

構文

DELETE /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1

3.5.27. S3 Hadoop interoperability

HDFS (Hadoop Distributed File System) のアクセスを必要とするデータ解析アプリケーションは、Hadoop 用の Apache S3A コネクターを使用して Ceph Object Gateway にアクセスできます。S3A コネクターは、データが Ceph Object Gateway に保存される一方で、HDFS ファイルシステムがアプリケーションへのセマンティクスを読み取りおよび書き込みする S3 互換のオブジェクトストレージを HDFS ファイルシステムとして表示するオープンソースツールです。

Ceph Object Gateway は、Hadoop 2.7.3 に同梱される S3A コネクターと完全に互換性があります。

3.5.28. 関連情報

3.6. S3 選択操作 (テクノロジープレビュー)

開発者は、Spark-SQL などの高レベルの分析アプリケーションに S3 select API を使用して、レイテンシーとスループットを向上させることができます。たとえば、複数のギガバイトのデータを持つ CSV S3 オブジェクトの場合、ユーザーは以下のクエリーを使用して別の列でフィルターされる単一の列を抽出できます。

select customerid from s3Object where age>30 and age<65;

現時点で、S3 オブジェクトはデータのフィルターリングおよび抽出の前に、Ceph Object Gateway 経由で Ceph OSD からデータを取得する必要があります。オブジェクトのサイズが大きく、クエリーが具体的な場合に、パフォーマンスが向上します。

3.6.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。
  • ユーザーアクセスで作成された S3 ユーザー。

3.6.2. S3 select content from an object

select object content API は、構造化されたクエリー言語 (SQL) でオブジェクトの内容をフィルターします。リクエストでは、オブジェクトのコンマ区切りの値 (CSV) であるデータのシリアライズ形式を指定して、指定のコンテンツを取得する必要があります。Amazon Web Services (AWS) のコマンドラインインターフェイス (CLI) 選択オブジェクトコンテンツは CSV 形式を使用してオブジェクトデータをレコードに解析し、クエリーで指定されたレコードのみを返します。

注記

応答のデータシリアライゼーション形式を指定する必要があります。この操作には s3:GetObject パーミッションが必要です。

構文

POST /BUCKET/KEY?select&select-type=2 HTTP/1.1\r\n

POST /testbucket/sample1csv?select&select-type=2 HTTP/1.1\r\n

要求エンティティー

Bucket
詳細
オブジェクトコンテンツを選択するバケット。
文字列
必須
はい
キー
詳細
オブジェクトキー。
長さに関する制約
最小長は 1 です。
文字列
必須
はい
SelectObjectContentRequest
詳細
select オブジェクトコンテンツ要求パラメーターのルートレベルタグ。
文字列
必須
はい
詳細
オブジェクトのクエリーに使用される式。
文字列
必須
はい
ExpressionType
詳細
SQL など、提供された式のタイプ。
文字列
Valid Values
SQL
必須。
はい
InputSerialization
詳細
クエリーされるオブジェクトに含まれるデータの形式を記述します。
文字列
必須
はい
OutputSerialization
詳細
コンマセパレーターおよび改行で返されるデータの形式。
文字列
必須
はい

応答エンティティー

アクションに成功すると、サービスは HTTP 200 応答を返します。データは、サービスによって XML 形式で返されます。

Payload
詳細
ペイロードパラメーターのルートレベルタグ。
文字列
必須
はい
Records
詳細
レコードイベント。
base64 でエンコードされたバイナリーデータオブジェクト
必須。
いいえ
Stats
詳細
stats イベント。
ロング
必須。
いいえ

Ceph Object Gateway は以下の応答をサポートします。

{:event-type,records} {:content-type,application/octet-stream} :message-type,event}

構文

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket BUCKET_NAME
 --expression-type 'SQL'
 --input-serialization
 '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key OBJECT_NAME
 --expression "select count(0) from stdin where int(_1)<10;" output.csv

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket testbucket
 --expression-type 'SQL'
 --input-serialization
 '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key testobject
 --expression "select count(0) from stdin where int(_1)<10;" output.csv

サポートされる機能

現時点で、AWS s3 select コマンドの一部のみがサポートされます。

機能詳細詳細

算定演算子

^ * % / + - ( )

 

select (int(_1)+int(_2))*int(_9) from stdin;

算定演算子

% modulo

 

select count(*) from stdin where cast(_1 as int)%2 == 0;

算定演算子

^ power-of

 

select cast(2^10 as int) from stdin;

演算子の比較

> < >= ⇐ == !=

 

select _1,_2 from stdin where (int(_1)+int(_3))>int(_5);

論理演算子

AND または NOT

 

select count(*) from stdin where not (int(1)>123 and int(_5)<200);

論理演算子

is null

式の null 表示の場合は true/false を返します。

 

論理演算子および NULL

is not null

式の null 表示の場合は true/false を返します。

 

論理演算子および NULL

不明な状態

null 処理を確認し、NULL で論理操作の結果を確認します。クエリーは 0 を返します。

select count(*) from stdin where null and (3>2);

NULL を使用した算術演算子

不明な状態

null 処理を確認し、NULL でバイナリー操作の結果を確認します。クエリーは 0 を返します。

select count(*) from stdin where (null+1) and (3>2);

NULL との比較

不明な状態

null 処理を確認し、比較操作の結果を NULL で確認します。クエリーは 0 を返します。

select count(*) from stdin where (null*1.5) != 3;

列がない

不明な状態

 

select count(*) from stdin where _1 is null;

投影列

if、then、または else と同様です。

ケースの選択

when (1+1==(2+1)*3) then ‘case_1' when 4*3)==(12 then ‘case_2’ else ‘case_else’ end, age*2 from stdin;

論理演算子

 

coalesce は、最初の null 以外の引数を返します。

select coalesce(nullif(5,5),nullif(1,1.0),age+12) from stdin;

論理演算子

 

nullif の場合は、両方の引数が等しい場合は null を返し、それ以外の場合は最初の引数 nullif(1,1)=NULL nullif(null,1)=NULL nullif(2,1)=2 を返します。

select nullif(cast(_1 as int),cast(_2 as int)) from stdin;

論理演算子

 

{expression} in ( .. {expression} ..)

select count(*) from s3object where ‘ben' in (trim(_5),substring(_1,char_length(_1)-3,3),last_name);

論理演算子

 

{expression} between {expression} and {expression}

select count(*) from stdin where substring(_3,char_length(_3),1) between “x" and trim(_1) and substring(_3,char_length(_3)-1,1) == “:";

論理演算子

 

{expression} like {match-pattern}

select count() from stdin where first_name like ‘%de_’; select count() from stdin where _1 like "%a[r-s];

キャスト演算子

  

select cast(123 as int)%2 from stdin;

キャスト演算子

  

select cast(123.456 as float)%2 from stdin;

キャスト演算子

  

select cast(‘ABC0-9’ as string),cast(substr(‘ab12cd’,3,2) as int)*4 from stdin;

キャスト演算子

  

select cast(substring(‘publish on 2007-01-01’,12,10) as timestamp) from stdin;

AWS 以外のキャスト演算子

  

select int(_1),int( 1.2 + 3.4) from stdin;

AWS 以外のキャスト演算子

  

select float(1.2) from stdin;

AWS 以外のキャスト演算子

  

select timestamp(‘1999:10:10-12:23:44’) from stdin;

集約機能

sun

 

select sum(int(_1)) from stdin;

集約機能

avg

 

select avg(cast(_1 a float) + cast(_2 as int)) from stdin;

集約機能

min

 

select avg(cast(_1 a float) + cast(_2 as int)) from stdin;

集約機能

max

 

select max(float(_1)),min(int(_5)) from stdin;

集約機能

count

 

select count(*) from stdin where (int(1)+int(_3))>int(_5);

タイムスタンプ関数

extract

 

select count(*) from stdin where extract(‘year’,timestamp(_2)) > 1950 and extract(‘year’,timestamp(_1)) < 1960;

タイムスタンプ関数

dateadd

 

select count(0) from stdin where datediff(‘year’,timestamp(_1),dateadd(‘day’,366,timestamp(_1))) == 1;

タイムスタンプ関数

datediff

 

select count(0) from stdin where datediff(‘month’,timestamp(_1),timestamp(_2))) == 2;

タイムスタンプ関数

utcnow

 

select count(0) from stdin where datediff(‘hours’,utcnow(),dateadd(‘day’,1,utcnow())) == 24

文字列関数

substring

 

select count(0) from stdin where int(substring(_1,1,4))>1950 and int(substring(_1,1,4))<1960;

文字列関数

trim

 

select trim(‘ foobar ‘) from stdin;

文字列関数

trim

 

select trim(trailing from ‘ foobar ‘) from stdin;

文字列関数

trim

 

select trim(leading from ‘ foobar ‘) from stdin;

文字列関数

trim

 

select trim(both ‘12’ from ‘1112211foobar22211122’) from stdin;

文字列関数

lower または upper

 

select trim(both ‘12’ from ‘1112211foobar22211122’) from stdin;

文字列関数

char_length, character_length

 

select count(*) from stdin where char_length(_3)==3;

複雑なクエリー

  

select sum(cast(_1 as int)),max(cast(_3 as int)), substring(‘abcdefghijklm’, (2-1)*3+sum(cast(_1 as int))/sum(cast(_1 as int))+1, (count() + count(0))/count(0)) from stdin;

エイリアスのサポート

  

select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from stdin where a3>100 and a3<300;

関連情報

3.6.3. S3 supported select functions

S3 select は、.Timestamp の機能をサポートします。

timestamp(string)
詳細
文字列をタイムスタンプの基本タイプに変換します。
サポート対象
現在、yyyy:mm:dd hh:mi:dd に変換します。
extract(date-part,timestamp)
詳細
入力タイムスタンプからの date-part の抽出に従って整数を返します。
サポート対象
date-part: year,month,week,day.
dateadd(date-part ,integer,timestamp)
詳細
入力されたタイムスタンプと date-part の結果に基づいて計算されたタイムスタンプを返します。
サポート対象
date-part : year,month,day.
datediff(date-part,timestamp,timestamp)
詳細
整数を返します。これは、date-part に応じた 2 つのタイムスタンプの差の計算結果です。
サポート対象
date-part : year,month,day,hours.
utcnow()
詳細
現在の時刻のタイムスタンプを返します。

集約

count()
詳細
(条件がある場合) 条件と一致する行数に基づいて整数を返します。
sum(expression)
詳細
(条件がある場合) 条件と一致する各行の式の概要を返します。
avg(expression)
詳細
(条件がある場合) 条件に一致する各行の平均式を返します。
max(expression)
詳細
(条件がある場合) 条件に一致するすべての式について最大結果を返します。
min(expression)
詳細
(条件がある場合) 条件に一致するすべての式の最小結果を返します。

文字列

substring(string,from,to)
詳細
from および input をもとに、入力文字列から抽出した文字列を返します。
Char_length
詳細
文字列の文字数を返します。Character_length も同じです。
Trim
詳細
ターゲット文字列から先頭または末尾の文字をトリミングします。デフォルトは空白です。
Upper\lower
詳細
文字を大文字または小文字に変換します。

NULL

NULL 値が見つからないか、または不明な値で、NULL が任意の演算に値を生成できません。同じことが算術比較にも当てはまります。NULL との比較は不明である NULL です。

表3.4 NULL ユースケース

A is NULLResult(NULL=UNKNOWN)

Not A

NULL

A または alse

NULL

A or True

True

A or A

NULL

A and False

False

A and True

NULL

A and A

NULL

関連情報

3.6.4. S3 alias programming construct

エイリアスプログラミング構築は、多くの列または複雑なクエリーを含むオブジェクトを持つプログラミングを容易にするため、s3 select 言語に不可欠な部分です。エイリアス構造を含むステートメントを解析すると、エイリアスを適切な投影列への参照に置き換え、クエリーの実行時に参照が他の式として評価されます。エイリアスは結果キャッシュを維持します。つまり、エイリアスが複数回使用された場合は、キャッシュからの結果が使用されるため、同じ式は評価されず、同じ結果が返されます。現在、Red Hat は列エイリアスをサポートしています。

select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from s3object where a3>100 and a3<300;")

3.6.5. S3 CSV parsing explained

入力シリアライゼーションを使用して CSV 定義をデフォルト値で定義できます。

  • 行区切り文字には {\n}` を使用します。
  • 引用には {“} を使用します。
  • エスケープ文字には {\} を使用します。

csv-header-info の解析は、これはスキーマを含む入力オブジェクトの最初の行になります。現在、シリアル化および圧縮タイプの出力はサポートされていません。S3 select エンジンには、S3-objects を解析する CSV パーサーがあります。

  • 各行は、行区切り文字で終わります。
  • フィールド区切り文字は、隣接する列を区切ります。
  • 連続するフィールドの区切り文字は NULL 列を定義します。
  • 引用符は、フィールド区切り文字をオーバーライドします。フィールド区切り文字であるは、引用符の間の任意の文字です。
  • エスケープ文字は、行区切り文字以外の特殊文字を無効にします。

以下は、CSV 解析ルールの例です。

表3.5 CSV の解析

機能詳細入力 (トークン)

NULL

連続するフィールド区切り文字

,,1,,2, =⇒ {null}{null}{1}{null}{2}{null}

QUOTE

引用符は、フィールドの区切り文字を上書きします。

11,22,"a,b,c,d",last =⇒ {11}{22}{“a,b,c,d"}{last}

Escape

エスケープ文字はメタ文字をオーバーライドします。

オブジェクトの所有者の ID および DisplayName のコンテナー。

row delimiter

クローズされた引用符はありません。行区切り文字は終了行になります。

11,22,a="str,44,55,66 =⇒ {11}{22}{a="str,44,55,66}

csv header info

FileHeaderInfo タグ

USE の値は、最初の行の各トークンが column-name であることを示します。IGNORE 値は最初の行をスキップすることを意味します。

関連情報

3.7. 関連情報

第4章 Ceph Object Gateway および Swift API

開発者は、Swift API データアクセスモデルと互換性のある RESTful アプリケーションプログラミングインターフェイス (API) を使用できます。Ceph Object Gateway を使用して、Red Hat Ceph Storage クラスターに保存されているバケットおよびオブジェクトを管理できます。

以下の表は、現在の Swift 機能機能のサポート状況を示しています。

表4.1 機能

機能状態備考

認証

サポート対象

 

アカウントメタデータの取得

サポート対象

カスタムメタデータなし

Swift ACL

サポート対象

Swift ACL のサブセットに対応

コンテナーの一覧表示

サポート対象

 

コンテナーのオブジェクト一覧の表示

サポート対象

 

コンテナーの作成

サポート対象

 

コンテナーの削除

サポート対象

 

コンテナーメタデータの取得

サポート対象

 

コンテナーメタデータの追加/更新

サポート対象

 

コンテナーメタデータの削除

サポート対象

 

オブジェクトの取得

サポート対象

 

オブジェクトの作成/更新

サポート対象

 

大規模オブジェクトの作成

サポート対象

 

オブジェクトの削除

サポート対象

 

オブジェクトのコピー

サポート対象

 

オブジェクトメタデータの取得

サポート対象

 

オブジェクトメタデータの追加/更新

サポート対象

 

一時 URL 操作

サポート対象

 

CORS

サポート対象外

 

オブジェクトの期限設定

サポート対象

 

オブジェクトのバージョン管理

サポート対象外

 

静的な Web サイト

サポート対象外

 

4.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

4.2. Swift API の制限

重要

以下の制限事項を使用してください。お使いのハードウェアの選択には影響があるため、この要件を Red Hat アカウントチームと常に相談してください。

  • Swift API を使用する場合の最大オブジェクトサイズ: 5GB
  • Swift API を使用する場合のメタデータの最大サイズ: オブジェクトに適用できるユーザーメタデータの合計サイズに定義された制限はありませんが、単一の HTTP 要求は 16,000 バイトに制限されます。

4.3. Swift ユーザーの作成

Swift インターフェイスをテストするには、Swift サブユーザーを作成します。Swift ユーザーは、2 つの手順で作成します。最初のステップでは、ユーザーを作成します。次のステップでは、秘密鍵を作成します。

注記

マルチサイトのデプロイメントでは、マスターゾーングループのマスターゾーンにあるホストでユーザーを作成します。

前提条件

  • Ceph Object Gateway のインストール
  • Ceph Object Gateway ノードへのルートレベルのアクセス。

手順

  1. Swift ユーザーを作成します。

    構文

    radosgw-admin subuser create --uid=NAME --subuser=NAME:swift --access=full

    NAME を Swift ユーザー名に置き換えます。以下に例を示します。

    [root@host01 ~]# radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "13TLtdEW7bCqgttQgPzxFxziu0AgabtOc6vM8DLA"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

  2. シークレットキーを作成します。

    構文

    radosgw-admin key create --subuser=NAME:swift --key-type=swift --gen-secret

    NAME を Swift ユーザー名に置き換えます。以下に例を示します。

    [root@host01 ~]# radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "a4ioT4jEP653CDcdU8p4OuhruwABBRZmyNUbnSSt"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

4.4. ユーザーの Swift 認証

ユーザーを認証するには、X-Auth-User および X-Auth-Key を含むリクエストを作成します。

構文

GET /auth HTTP/1.1
Host: swift.example.com
X-Auth-User: johndoe
X-Auth-Key: R7UUOLFDI2ZI9PRCQ53K

レスポンスの例

HTTP/1.1 204 No Content
Date: Mon, 16 Jul 2012 11:05:33 GMT
Server: swift
X-Storage-Url: https://swift.example.com
X-Storage-Token: UOlCCC8TahFKlWuv9DB09TWHF0nDjpPElha0kAa
Content-Length: 0
Content-Type: text/plain; charset=UTF-8

注記

認証中に X-Storage-Url 値を使用して GET リクエストを実行すると、Ceph の Swift 互換サービスに関するデータを取得できます。

関連情報

4.5. Swift コンテナー操作

開発者は、Ceph Object Gateway 経由で Swift アプリケーションのプログラミングインターフェイス (API) を使用してコンテナーの操作を行うことができます。コンテナーを一覧表示、作成、更新、および削除できます。コンテナーのメタデータを追加または更新できます。

4.5.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

4.5.2. Swift コンテナー操作

コンテナーは、データオブジェクトを格納するメカニズムです。アカウントには多くのコンテナーを持たせることができますが、コンテナー名は一意でなければなりません。この API により、クライアントはコンテナーの作成、アクセス制御およびメタデータの設定、コンテナーのコンテンツの取得、およびコンテナーの削除を行うことができます。この API は特定のユーザーのアカウントの情報に関連するリクエストを行うため、コンテナーのアクセス制御が意図的に公開されていない限り、つまり匿名のリクエストを許可しない限り、この API のすべてのリクエストを認証する必要があります。

注記

Amazon S3 API はバケットという用語を使用してデータコンテナーを記述します。Swift API 内のバケットを参照すると、バケットという用語はコンテナーという用語と同じものになります。

オブジェクトストレージの 1 つは、階層パスやディレクトリーをサポートしないことです。代わりに、各コンテナーにオブジェクトがある 1 つ以上のコンテナーで設定される 1 つのレベルをサポートします。RADOS Gateway の Swift 互換 API は、疑似階層コンテナーの概念をサポートします。これは、オブジェクトの命名を使用してコンテナーをエミュレートする手段で、ストレージシステムで実際には実装されません。たとえば、photos/buildings/empire-state.jpg のように、疑似階層名でオブジェクトに名前を付けることができますが、コンテナー名にスラッシュ (/) 文字を含めることはできません。

重要

バージョン付けされた Swift コンテナーに大規模なオブジェクトをアップロードする場合は、python-swiftclient ユーティリティーで --leave-segments オプションを使用します。--leave-segments を使用しないと、マニフェストファイルが上書きされます。したがって、既存のオブジェクトは上書きされ、データが失われることになります。

4.5.3. Swift でコンテナーのアクセス制御リスト (ACL) の更新

ユーザーがコンテナーを作成すると、ユーザーはデフォルトでコンテナーへの読み取り/書き込みアクセスを持ちます。その他のユーザーがコンテナーのコンテンツを読み取りしたり、コンテナーに書き込むことを許可するには、ユーザーを明示的に有効にする必要があります。X-Container-Read または X-Container-Write* を指定することもできます。これにより、すべてのユーザーがコンテナーから読み取るか、またはコンテナーへの書き込みが可能になります。* を設定すると、コンテナーが公開されます。これにより、匿名ユーザーがコンテナーから読み込むか、またはコンテナーに書き込むことができます。

構文

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: *
X-Container-Write: UID1, UID2, UID3

リクエストヘッダー

X-Container-Read
詳細
コンテナーの読み取りパーミッションを持つユーザー ID。
ユーザー ID のコンマ区切りの文字列値。
必須。
いいえ
X-Container-Write
詳細
コンテナーの書き込みパーミッションを持つユーザー ID。
ユーザー ID のコンマ区切りの文字列値。
必須。
いいえ

4.5.4. Swift 一覧コンテナー

API バージョンを指定し、アカウントは特定のユーザーアカウントのコンテナーの一覧を返す GET リクエスト。リクエストは特定のユーザーのコンテナーを返すため、リクエストには認証トークンが必要です。リクエストは匿名で行われません。

構文

GET /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストパラメーター

limit
詳細
結果の数を指定の値に制限します。
Integer
Valid Values
該当なし
必須。
はい
format
詳細
結果の数を指定の値に制限します。
Integer
Valid Values
json または xml
必須。
いいえ
marker
詳細
マーカー値よりも大きな結果の一覧を返します。
文字列
Valid Values
該当なし
必須。
いいえ

応答にはコンテナーの一覧が含まれるか、または 204 応答コードで返されます。

レスポンスエンティティー

アカウント
詳細
アカウント情報の一覧。
Container
container
詳細
コンテナーの一覧。
Container
name
詳細
コンテナーの名前。
文字列
bytes
詳細
コンテナーのサイズ。
Integer

4.5.5. Swift でコンテナーオブジェクトの一覧表示

コンテナー内のオブジェクトを一覧表示するには、API バージョン、アカウント、およびコンテナーの名前を使用して GET リクエストを行います。クエリーパラメーターを指定して完全なリストをフィルターリングしたり、パラメーターを除外してコンテナーに保存されている最初の 10,000 オブジェクト名の一覧を返すこともできます。

構文

GET /API_VERSION/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストパラメーター

format
詳細
結果の数を指定の値に制限します。
Integer
Valid Values
json または xml
必須。
いいえ
prefix
詳細
結果を、指定した接頭辞で始まるオブジェクトに制限します。
文字列
Valid Values
該当なし
必須。
いいえ
marker
詳細
マーカー値よりも大きな結果の一覧を返します。
文字列
Valid Values
該当なし
必須。
いいえ
limit
詳細
結果の数を指定の値に制限します。
Integer
Valid Values
0 - 10,000
必須。
いいえ
delimiter
詳細
接頭辞と他のオブジェクト名の間に挿入される区切り文字。
文字列
Valid Values
該当なし
必須。
いいえ
path
詳細
オブジェクトの擬似階層パス。
文字列
Valid Values
該当なし
必須。
いいえ

レスポンスエンティティー

container
詳細
コンテナー
Container
オブジェクト
詳細
コンテナー内のオブジェクト。
Container
name
詳細
コンテナー内のオブジェクトの名前。
文字列
ハッシュ
詳細
オブジェクトのコンテンツのハッシュコード。
文字列
last_modified
詳細
オブジェクトの内容を最後に変更した時間。
Date
content_type
詳細
オブジェクト内のコンテンツのタイプ。
文字列

4.5.6. Swift でコンテナーの作成

新規コンテナーを作成するには、API バージョン、アカウント、および新規コンテナーの名前で PUT 要求を行います。コンテナー名は一意である必要があります。スラッシュ ( /) を含めることはできず、256 バイト未満でなければなりません。リクエストには、アクセス制御ヘッダーおよびメタデータヘッダーを含めることができます。一連の配置プールのキーを特定するストレージポリシーを含めることもできます。たとえば、radosgw-admin zone get を実行すると、placement_pools で利用可能なキーの一覧を確認します。ストレージポリシーを使用すると、SSD ベースのストレージなど、コンテナーの特別なプールセットを指定できます。操作には、べき等性があります。既存のコンテナーを作成するように要求すると、HTTP 202 戻りコードが返されますが、別のコンテナーは作成されません。

構文

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: COMMA_SEPARATED_UIDS
X-Container-Write: COMMA_SEPARATED_UIDS
X-Container-Meta-KEY:VALUE
X-Storage-Policy: PLACEMENT_POOLS_KEY

ヘッダー

X-Container-Read
詳細
コンテナーの読み取りパーミッションを持つユーザー ID。
ユーザー ID のコンマ区切りの文字列値。
必須。
いいえ
X-Container-Write
詳細
コンテナーの書き込みパーミッションを持つユーザー ID。
ユーザー ID のコンマ区切りの文字列値。
必須。
いいえ
X-Container-Meta-KEY
詳細
任意の文字列の値を取得するユーザー定義のメタデータキー。
文字列
必須
いいえ
X-Storage-Policy
詳細
Ceph Object Gateway の placement_pools 下にあるストレージポリシーを識別するキー。radosgw-admin zone get を実行し、利用可能なキーを取得します。
文字列
必須
いいえ

同じ名前のコンテナーがすでに存在し、ユーザーがコンテナー所有者である場合、操作は成功します。そうでないと、操作は失敗します。

HTTP レスポンス

409
ステータスコード
BucketAlreadyExists
詳細
コンテナーは、別のユーザーの所有権にすでに存在します。

4.5.7. Swift コンテナーの削除

コンテナーを削除するには、API バージョン、アカウント、およびコンテナーの名前を使用して DELETE 要求を行います。コンテナーは空である必要があります。コンテナーが空であるかを確認する場合は、コンテナーに対して HEAD リクエストを実行します。コンテナーが正常に削除されると、コンテナー名を再利用できます。

構文

DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

HTTP レスポンス

204
ステータスコード
NoContent
詳細
コンテナーが削除されました。

4.5.8. Swift がコンテナーのメタデータを追加または更新

コンテナーにメタデータを追加するには、API バージョン、アカウント、およびコンテナー名で POST 要求を行います。メタデータを追加または更新するには、コンテナーに対する書き込み権限が必要です。

構文

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Meta-Color: red
X-Container-Meta-Taste: salty

リクエストヘッダー

X-Container-Meta-KEY
詳細
任意の文字列の値を取得するユーザー定義のメタデータキー。
文字列
必須
いいえ

4.6. Swift オブジェクト操作

開発者は、Ceph Object Gateway 経由で Swift アプリケーションのプログラミングインターフェイス (API) を使用してオブジェクト操作を行うことができます。オブジェクトを一覧表示、作成、更新、および削除することができます。オブジェクトのメタデータを追加または更新することもできます。

4.6.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

4.6.2. Swift オブジェクト操作

オブジェクトは、データおよびメタデータを保存するコンテナーです。コンテナーには多くのオブジェクトがありますが、オブジェクト名は一意である必要があります。この API により、クライアントはオブジェクトの作成、アクセス制御およびメタデータの設定、オブジェクトのデータおよびメタデータの取得、およびオブジェクトの削除を行うことができます。この API は特定のユーザーのアカウントの情報に関連するリクエストを行うため、この API のすべてのリクエストを認証する必要があります。コンテナーまたはオブジェクトのアクセス制御が意図的に公開されていない限り、つまり匿名の要求を許可している場合を除きます。

4.6.3. Swift がオブジェクトを取得

オブジェクトを取得するには、API バージョン、アカウント、コンテナー、およびオブジェクト名を使用して GET リクエストを行います。コンテナー内のオブジェクトを取得するには、コンテナーの読み取り権限が必要です。

構文

GET /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストヘッダー

range
詳細
オブジェクトの内容のサブセットを取得するには、バイト範囲を指定します。
Date
必須。
いいえ
If-Modified-Since
詳細
ソースオブジェクトの last_modified 属性の日時以降に変更された場合のみコピーします。
Date
必須。
いいえ
If-Unmodified-Since
詳細
ソースオブジェクトの last_modified 属性の日時以降に変更した場合のみコピーします。
Date
必須。
いいえ
Copy-If-Match
詳細
リクエストの ETag がソースオブジェクトの ETag と一致する場合にのみコピーします。
ETag
必須。
いいえ
Copy-If-None-Match
詳細
リクエストの ETag がソースオブジェクトの ETag と一致しない場合にのみコピーします。
ETag
必須。
いいえ

レスポンスヘッダー

Content-Range
詳細
オブジェクトコンテンツのサブセットの範囲。range ヘッダーフィールドがリクエストで指定されている場合にのみ返されます。

4.6.4. Swift でオブジェクトの作成または更新

新規オブジェクトを作成するには、API バージョン、アカウント、コンテナー名、および新規オブジェクトの名前を使用して PUT 要求を行います。オブジェクトを作成または更新するには、コンテナーに書き込みパーミッションが必要です。オブジェクト名は、コンテナー内で一意である必要があります。PUT リクエストはべき等ではないため、一意の名前を使用しないと、リクエストによりオブジェクトが更新されます。ただし、オブジェクト名に疑似階層構文を使用して、別の疑似階層ディレクトリーにある場合は、同じ名前の別のオブジェクトと区別することができます。リクエストには、アクセス制御ヘッダーおよびメタデータヘッダーを含めることができます。

構文

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストヘッダー

ETag
詳細
オブジェクトの内容の MD5 ハッシュ。推奨。
文字列
Valid Values
該当なし
必須。
いいえ
Content-Type
詳細
オブジェクトの内容の MD5 ハッシュ。
文字列
Valid Values
該当なし
必須。
いいえ
Transfer-Encoding
説明
オブジェクトが大規模な集約オブジェクトの一部であるかどうかを示します。
文字列
Valid Values
chunked
必須。
いいえ

4.6.5. Swift でオブジェクトの削除

オブジェクトを削除するには、API バージョン、アカウント、コンテナー、およびオブジェクト名を使用して DELETE リクエストを行います。コンテナー内のオブジェクトを削除するには、コンテナーに対する書き込み権限が必要です。オブジェクトが正常に削除されると、オブジェクト名を再利用できます。

構文

DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

4.6.6. Swift でオブジェクトのコピー

オブジェクトのコピーを使用すると、オブジェクトをダウンロードしたり、別のコンテナーにアップロードしたりしなくてもよいように、オブジェクトのサーバー側のコピーを作成できます。あるオブジェクトのコンテンツを別のオブジェクトにコピーするには、API バージョン、アカウント、およびコンテナー名で PUT 要求または COPY 要求を行います。

PUT 要求の場合は、要求で宛先コンテナーおよびオブジェクト名、および要求ヘッダーのソースコンテナーおよびオブジェクトを使用します。

Copy リクエストには、要求でソースコンテナーおよびオブジェクト、および要求ヘッダーの宛先コンテナーおよびオブジェクトを使用します。オブジェクトをコピーするには、コンテナーに書き込みパーミッションが必要です。宛先オブジェクト名は、コンテナー内で一意である必要があります。リクエストはべき等ではないため、一意の名前を使用しないと、リクエストにより宛先オブジェクトが更新されます。宛先オブジェクトが別の疑似階層ディレクトリーにある場合は、オブジェクト名に疑似階層構文を使用して、同じ名前のソースオブジェクトと区別できます。リクエストには、アクセス制御ヘッダーおよびメタデータヘッダーを含めることができます。

構文

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
X-Copy-From: TENANT:SOURCE_CONTAINER/SOURCE_OBJECT
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

または、次のようになります。

構文

COPY /API_VERSION/ACCOUNT/TENANT:SOURCE_CONTAINER/SOURCE_OBJECT HTTP/1.1
Destination: TENANT:DEST_CONTAINER/DEST_OBJECT

リクエストヘッダー

X-Copy-From
詳細
ソースコンテナー/オブジェクトパスを定義するために PUT リクエストで使用されます。
文字列
必須。
はい (PUT を使用している場合)
送信先
詳細
宛先コンテナー/オブジェクトパスを定義するために COPY 要求で使用されます。
文字列
必須。
はい (COPY を使用している場合)
If-Modified-Since
詳細
ソースオブジェクトの last_modified 属性の日時以降に変更された場合のみコピーします。
Date
必須。
いいえ
If-Unmodified-Since
詳細
ソースオブジェクトの last_modified 属性の日時以降に変更した場合のみコピーします。
Date
必須。
いいえ
Copy-If-Match
詳細
リクエストの ETag がソースオブジェクトの ETag と一致する場合にのみコピーします。
ETag
必須。
いいえ
Copy-If-None-Match
詳細
リクエストの ETag がソースオブジェクトの ETag と一致しない場合にのみコピーします。
ETag
必須。
いいえ

4.6.7. Swift でオブジェクトメタデータの取得

オブジェクトのメタデータを取得するには、API バージョン、アカウント、コンテナー、およびオブジェクト名を使用して HEAD リクエストを行います。コンテナー内のオブジェクトからメタデータを取得するには、コンテナーの読み取り権限が必要です。このリクエストは、オブジェクト自体の要求と同じヘッダー情報を返しますが、オブジェクトのデータを返しません。

構文

HEAD /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

4.6.8. Swift によるオブジェクトメタデータの追加または更新

オブジェクトにメタデータを追加するには、API バージョン、アカウント、コンテナー、およびオブジェクト名で POST リクエストを行います。メタデータを追加または更新するには、親コンテナーに対する書き込み権限が必要です。

構文

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストヘッダー

X-Object-Meta-KEY
詳細
任意の文字列の値を取得するユーザー定義のメタデータキー。
文字列
必須
いいえ

4.7. Swift の一時 URL 操作

一時的なアクセスを可能にするため、radosgw の swift エンドポイントによりサポートされます。たとえば、GET リクエストは、認証情報を共有せずにオブジェクトに送信されます。

この機能には、最初に X-Account-Meta-Temp-URL-Key の値を設定し、必要に応じて X-Account-Meta-Temp-URL-Key-2 を設定する必要があります。Temp URL 機能は、これらの秘密鍵に対する HMAC-SHA1 署名に依存します。

4.7.1. Swift が一時 URL オブジェクトを取得

一時 URL は、以下の要素を含む暗号化 HMAC-SHA1 署名を使用します。

  • Request メソッドの値 (例:GET)
  • エポックからの経過時間 (秒単位)。つまり Unix 時間です。
  • v1 以降のリクエストパス

上記の項目は、それらの間に新しい行が追加されて正規化され、HMAC は前述の Temp URL キーのいずれかに対して SHA-1 ハッシュアルゴリズムを使用して生成されます。

上記を示すサンプルの Python スクリプトを以下に示します。

import hmac
from hashlib import sha1
from time import time

method = 'GET'
host = 'https://objectstore.example.com'
duration_in_seconds = 300  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
path = '/v1/your-bucket/your-object'
key = 'secret'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
     host=host, path=path, sig=sig, expires=expires)
print rest_uri

出力例

https://objectstore.example.com/v1/your-bucket/your-object?temp_url_sig=ff4657876227fc6025f04fcf1e82818266d022c6&temp_url_expires=1423200992

4.7.2. Swift POST 一時 URL キー

必要なキーを持つ swift アカウントへの POST リクエストは、一時 URL アクセスをアカウントに提供できるアカウントのシークレット一時 URL キーを設定します。最大 2 つのキーがサポートされ、一時 URL を無効化せずに鍵をローテーションできるように、両方のキーに対して署名がチェックされます。

構文

POST /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

リクエストヘッダー

X-Account-Meta-Temp-URL-Key
詳細
任意の文字列値を取るユーザー定義のキー。
文字列
必須
はい
X-Account-Meta-Temp-URL-Key-2
詳細
任意の文字列値を取るユーザー定義のキー。
文字列
必須
いいえ

4.8. Swift マルチテナンシーコンテナーの操作

クライアントアプリケーションがコンテナーにアクセスする場合は、常に特定ユーザーの認証情報で動作します。Red Hat Ceph Storage クラスターでは、すべてのユーザーがテナントに属します。そのため、テナントが明示的に指定されていない場合、すべてのコンテナー操作のコンテキストに暗黙的なテナントがあります。したがって、マルチテナンシーは、参照されるコンテナーと、参照しているユーザーが同じテナントに属する限り、以前のリリースと完全に後方互換性があります。

明示的なテナントの指定に使用される拡張機能は、使用されるプロトコルおよび認証システムによって異なります。

テナントとコンテナーはコロンで区切ります。したがって、URL は以下のようになります。

https://rgw.domain.com/tenant:container

一方、create_container() メソッドでは、コンテナーメソッド自体でテナントとコンテナーを分離します。

create_container("tenant:container")

4.9. 関連情報

付録A Ceph RESTful API 仕様

ストレージ管理者は、Ceph RESTful API エンドポイントを通じてさまざまな Ceph サブシステムにアクセスできます。これは、利用可能な Ceph RESTful API メソッドの参照ガイドです。

利用可能な Ceph API エンドポイント:

A.1. 前提条件

  • RESTful API の使用方法を理解します。
  • 正常かつ実行中の Red Hat Ceph Storage クラスター
  • Ceph Manager の dashboard モジュールが有効化されている。

A.2. Ceph の概要

Ceph RESTful API summary エンドポイントを使用するためのメソッド参照。Ceph のサマリーの詳細を表示することができます。

GET /api/summary
詳細
Ceph の詳細の概要を表示します。
GET /api/summary HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.3. 認証

Ceph RESTful API auth エンドポイントを使用するメソッド参照。Red Hat Ceph Storage でセッションを開始します。

POST /api/auth
Curl の例
curl -i -k --location -X POST 'https://192.168.0.44:8443/api/auth' -H 'Accept: application/vnd.ceph.api.v1.0+json' -H 'Content-Type: application/json' --data '{"password": "admin@123", "username": "admin"}'
 POST /api/auth HTTP/1.1
 Host: example.com
 Content-Type: application/json

 {
     "password": "STRING",
     "username": "STRING"
 }
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/auth/check
詳細
認証トークンの要件を確認します。
POST /api/auth/check?token=STRING HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "token": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/auth/logout
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.4. Ceph ファイルシステム

Ceph RESTful API cephfs エンドポイントを使用して Ceph File Systems (CephFS) を管理するためのメソッド参照。

GET /api/cephfs
GET /api/cephfs HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
GET /api/cephfs/FS_ID HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/cephfs/FS_ID/client/CLIENT_ID
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • CLIENT_ID は、Ceph クライアント識別子の文字列に置き換えます。
ステータスコード
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID/clients
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
GET /api/cephfs/FS_ID/clients HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID/get_root_directory
詳細
ls_dir API 呼び出しを使用して取得できない root ディレクトリー。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
GET /api/cephfs/FS_ID/get_root_directory HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID/ls_dir
詳細
指定のパスのディレクトリーを一覧表示します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • クエリー:

    • path: リストを開始する文字列の値。デフォルトのパスは、指定されていない場合は / になります。
    • depth: ディレクトリーツリーを下るステップ数を指定する整数値。
GET /api/cephfs/FS_ID/ls_dir HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID/mds_counters
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • クエリー:

    • カウンター: 整数値。
GET /api/cephfs/FS_ID/mds_counters HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cephfs/FS_ID/quota
詳細
指定されたパスの CephFS クォータを表示します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • クエリー:

    • path: ディレクトリーパスを指定する必須文字列の値。
GET /api/cephfs/FS_ID/quota?path=STRING HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/cephfs/FS_ID/quota
詳細
指定されたパスのクォータを設定します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • max_bytes: バイト制限を定義する文字列の値。
  • max_files: ファイル制限を定義する文字列の値。
  • path: ディレクトリーまたはファイルへのパスを定義する文字列値。
PUT /api/cephfs/FS_ID/quota HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "max_bytes": "STRING",
    "max_files": "STRING",
    "path": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/cephfs/FS_ID/snapshot
詳細
スナップショットを削除します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • クエリー:

    • name: スナップショット名を指定する必須文字列の値。
    • path: ディレクトリーへのパスを定義する必須の文字列値。
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/cephfs/FS_ID/snapshot
詳細
スナップショットを作成します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • name: スナップショット名を指定する文字列の値。名前が指定されていない場合は、RFC3339 UTC 形式の現在の時間を使用して名前が生成されます。
  • path: ディレクトリーへのパスを定義する文字列の値です。
POST /api/cephfs/FS_ID/snapshot HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING",
    "path": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/cephfs/FS_ID/tree
詳細
ディレクトリーを削除します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • クエリー:

    • path: ディレクトリーへのパスを定義する必須の文字列値。
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/cephfs/FS_ID/tree
詳細
ディレクトリーを作成します。
パラメーター
  • FS_ID は、Ceph File System の ID 文字列に置き換えます。
  • path: ディレクトリーへのパスを定義する文字列の値です。
POST /api/cephfs/FS_ID/tree HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "path": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.5. ストレージクラスターの設定

Ceph RESTful API cluster_conf エンドポイントを使用して Red Hat Ceph Storage クラスターを管理するためのメソッド参照。

GET /api/cluster_conf
GET /api/cluster_conf HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/cluster_conf
POST /api/cluster_conf HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING",
    "value": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/cluster_conf
PUT /api/cluster_conf HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "options": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cluster_conf/filter
詳細
名前でストレージクラスター設定を表示します。
パラメーター
  • クエリー:

    • names: 設定オプション名の文字列値。
GET /api/cluster_conf/filter HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/cluster_conf/NAME
パラメーター
  • NAME をストレージクラスター設定名に置き換えます。
  • クエリー:

    • section: 必要な文字列値。
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/cluster_conf/NAME
パラメーター
  • NAME をストレージクラスター設定名に置き換えます。
GET /api/cluster_conf/NAME HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.6. CRUSH ルール

Ceph RESTful API crush_rule エンドポイントを使用して CRUSH ルールを管理するメソッド参照。

GET /api/crush_rule
詳細
CRUSH ルール設定を一覧表示します。
GET /api/crush_rule HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/crush_rule
POST /api/crush_rule HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device_class": "STRING",
    "failure_domain": "STRING",
    "name": "STRING",
    "root": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/crush_rule/NAME
パラメーター
  • NAME は、ルール名に置き換えます。
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/crush_rule/NAME
パラメーター
  • NAME は、ルール名に置き換えます。
GET /api/crush_rule/NAME HTTP/1.1
Host: example.com
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.7. イレイジャーコードプロファイル

Ceph RESTful API の erasure_code_profile エンドポイントを使用するメソッド参照を使用して、イレイジャーコーディングのプロファイルを管理します。

GET /api/erasure_code_profile
詳細
イレイジャーコーディングされたプロファイル情報を一覧表示します。
GET /api/erasure_code_profile HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/erasure_code_profile
POST /api/erasure_code_profile HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing, check the task queue.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/erasure_code_profile/NAME
パラメーター
  • NAME は、プロファイル名に置き換えます。
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/erasure_code_profile/NAME
パラメーター
  • NAME は、プロファイル名に置き換えます。
GET /api/erasure_code_profile/NAME HTTP/1.1
Host: example.com
ステータスコード
  • 202 Accepted – Operation is still executing, check the task queue.
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.8. 機能トグル

CRUSH ルールを管理する Ceph RESTful API feature_toggles エンドポイントを使用するメソッド参照。

GET /api/feature_toggles
詳細
Red Hat Ceph Storage の機能を一覧表示します。
GET /api/feature_toggles HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.9. Grafana

Ceph RESTful API grafana エンドポイントを使用して Grafana を管理するためのメソッド参照。

POST /api/grafana/dashboards
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/grafana/url
詳細
Grafana URL インスタンスを一覧表示します。
GET /api/grafana/url HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/grafana/validation/PARAMS
パラメーター
  • PARAMS を文字列値に置き換えます。
GET /api/grafana/validation/PARAMS HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.10. ストレージクラスターの正常性

Ceph RESTful API の health エンドポイントを使用するメソッド参照。ストレージクラスターの正常性の詳細およびステータスを表示します。

GET /api/health/full
GET /api/health/full HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/health/minimal
詳細
ストレージクラスターの最小限の正常性レポートを表示します。
GET /api/health/minimal HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.11. ホスト

Ceph RESTful API host エンドポイントを使用して、ノードとも呼ばれるホストの情報を表示するためのメソッド参照。

GET /api/host
詳細
ホストの仕様を一覧表示します。
パラメーター
  • クエリー:

    • sources: ホストソースの文字列値。
GET /api/host HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/host
POST /api/host HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "hostname": "STRING",
    "status": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/host/HOST_NAME
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
ステータスコード
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/host/HOST_NAME
詳細
指定したホストの情報を表示します。
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
GET /api/host/HOST_NAME HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/host/HOST_NAME
詳細
指定したホストの情報を更新します。この方法は、Ceph Orchestrator が有効な場合にのみサポートされます。
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
  • force: ホストがメンテナーンスモードに強制します。
  • labels: ラベルのリスト。
  • maintenance: メンテナーンスモードを入力するか、または終了します。
  • update_labels: ラベルを更新します。
PUT /api/host/HOST_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "force": true,
    "labels": [
        "STRING"
    ],
    "maintenance": true,
    "update_labels": true
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/host/HOST_NAME/daemons
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
GET /api/host/HOST_NAME/daemons HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/host/HOST_NAME/devices
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
GET /api/host/HOST_NAME/devices HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/host/HOST_NAME/identify_device
詳細
指定された秒数の間デバイスのライトをオンにして、デバイスを識別します。
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
  • device: /dev/dm-0ABC1234DEF567-1R1234_ABC8DE0Q などのデバイス ID。
  • 期間 - デバイスの LED がフラッシュする秒数。
POST /api/host/HOST_NAME/identify_device HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device": "STRING",
    "duration": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/host/HOST_NAME/inventory
詳細
ホストのインベントリーを表示します。
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
  • クエリー:

    • refresh: 非同期の更新をトリガーする文字列の値。
GET /api/host/HOST_NAME/inventory HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/host/HOST_NAME/smart
パラメーター
  • HOST_NAME は、ノード名に置き換えます。
GET /api/host/HOST_NAME/smart HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.12. iSCSI

Ceph RESTful API の iscsi エンドポイントを使用して iSCSI を管理するメソッド参照。

GET /api/iscsi/discoveryauth
詳細
iSCSI 検出認証の詳細を表示します。
GET /api/iscsi/discoveryauth HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/iscsi/discoveryauth
詳細
iSCSI 検出認証を設定します。
パラメーター
  • クエリー:

    • user: 必要なユーザー名の文字列。
    • password: 必要なパスワード文字列。
    • mutual_user: 必要な相互ユーザー名の文字列。
    • mutual_password: 必要な相互パスワード文字列。
PUT /api/iscsi/discoveryauth?user=STRING&password=STRING&mutual_user=STRING&mutual_password=STRING HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "mutual_password": "STRING",
    "mutual_user": "STRING",
    "password": "STRING",
    "user": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/iscsi/target
GET /api/iscsi/target HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/iscsi/target
POST /api/iscsi/target HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "acl_enabled": "STRING",
    "auth": "STRING",
    "clients": "STRING",
    "disks": "STRING",
    "groups": "STRING",
    "portals": "STRING",
    "target_controls": "STRING",
    "target_iqn": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/iscsi/target/TARGET_IQN
パラメーター
  • TARGET_IQN をパス文字列に置き換えます。
ステータスコード
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/iscsi/target/TARGET_IQN
パラメーター
  • TARGET_IQN をパス文字列に置き換えます。
GET /api/iscsi/target/TARGET_IQN HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/iscsi/target/TARGET_IQN
パラメーター
  • TARGET_IQN をパス文字列に置き換えます。
PUT /api/iscsi/target/TARGET_IQN HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "acl_enabled": "STRING",
    "auth": "STRING",
    "clients": "STRING",
    "disks": "STRING",
    "groups": "STRING",
    "new_target_iqn": "STRING",
    "portals": "STRING",
    "target_controls": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.13. ログ

Ceph RESTful API の logs エンドポイントを使用してログ情報を表示するメソッド参照。

GET /api/logs/all
詳細
すべてのログ設定を表示します。
GET /api/logs/all HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.14. Ceph Manager モジュール

Ceph RESTful API の mgr/module エンドポイントを使用して Ceph Manager モジュールを管理するメソッド参照。

GET /api/mgr/module
詳細
管理モジュールの一覧を表示します。
GET /api/mgr/module HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/mgr/module/MODULE_NAME
詳細
永続設定の値を取得します。
パラメーター
  • MODULE_NAME は Ceph Manager モジュール名に置き換えます。
GET /api/mgr/module/MODULE_NAME HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/mgr/module/MODULE_NAME
詳細
永続設定の値を設定します。
パラメーター
  • MODULE_NAME は Ceph Manager モジュール名に置き換えます。
  • config: モジュールオプションの値。
PUT /api/mgr/module/MODULE_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "config": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/mgr/module/MODULE_NAME/disable
詳細
指定の Ceph Manager モジュールを無効にします。
パラメーター
  • MODULE_NAME は Ceph Manager モジュール名に置き換えます。
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/mgr/module/MODULE_NAME/enable
詳細
指定の Ceph Manager モジュールを有効にします。
パラメーター
  • MODULE_NAME は Ceph Manager モジュール名に置き換えます。
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/mgr/module/MODULE_NAME/options
詳細
指定の Ceph Manager モジュールのオプションを表示します。
パラメーター
  • MODULE_NAME は Ceph Manager モジュール名に置き換えます。
GET /api/mgr/module/MODULE_NAME/options HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.15. Ceph Monitor

Ceph Monitor の情報を表示する Ceph RESTful API の monitor エンドポイントを使用するメソッド参照。

GET /api/monitor
詳細
Ceph Monitor の詳細を表示します。
GET /api/monitor HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。

関連情報

  • 詳細は、Red Hat Ceph Storage 開発者ガイドCeph RESTful API の章を参照してください。

A.16. Ceph OSD

Ceph RESTful API の osd エンドポイントを使用して Ceph OSD を管理するメソッド参照。

GET /api/osd
GET /api/osd HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/osd
POST /api/osd HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "data": "STRING",
    "method": "STRING",
    "tracking_id": "STRING"
}
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/flags
詳細
Ceph OSD フラグを表示します。
GET /api/osd/flags HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/osd/flags
詳細
ストレージクラスター全体の Ceph OSD フラグを設定します。
パラメーター
  • recovery_deletessortbitwise、および pglog_hardlimit フラグの設定を解除することはできません。
  • purged_snapshots フラグを設定できません。

    重要

    正常な操作には、以下の 4 つのフラグを追加する必要があります。

PUT /api/osd/flags HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "flags": [
        "STRING"
    ]
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/flags/individual
詳細
個別の Ceph OSD フラグを表示します。
GET /api/osd/flags/individual HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/osd/flags/individual
詳細
Ceph OSD の個別サブセットの nooutnoinnodown、および noup フラグを更新します。
PUT /api/osd/flags/individual HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "flags": {
        "nodown": true,
        "noin": true,
        "noout": true,
        "noup": true
    },
    "ids": [
        1
    ]
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/safe_to_delete
パラメーター
  • クエリー:

    • svc_ids: Ceph OSD サービス識別子で必要な文字列。
GET /api/osd/safe_to_delete?svc_ids=STRING HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/safe_to_destroy
詳細
Ceph OSD が破棄しても安全かどうかを確認します。
パラメーター
  • クエリー:

    • ID: Ceph OSD サービス識別子の必要な文字列。
GET /api/osd/safe_to_destroy?ids=STRING HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
DELETE /api/osd/SVC_ID
パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
  • クエリー:

    • preserve_id: 文字列の値。
    • force: 文字列の値。
ステータスコード
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 204 No Content – Resource deleted.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/SVC_ID
詳細
Ceph OSD に関する収集したデータを返します。
パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
GET /api/osd/SVC_ID HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/osd/SVC_ID
パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
PUT /api/osd/SVC_ID HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device_class": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/osd/SVC_ID/destroy
詳細

Ceph OSD に破棄されているとマークします。Ceph OSD は、破棄される前にダウンとマークする必要があります。この操作は Ceph OSD 識別子をそのまま保持しますが、Cephx キー、設定キーデータ、および lockbox キーを削除します。

警告

この操作により、データが永続的に読み取り不能になります。

パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/SVC_ID/devices
パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
GET /api/osd/SVC_ID/devices HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
GET /api/osd/SVC_ID/histogram
詳細
Ceph OSD のヒストグラムデータを返します。
パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
GET /api/osd/SVC_ID/histogram HTTP/1.1
Host: example.com
ステータスコード
  • 200 OK – Okay.
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
PUT /api/osd/SVC_ID/mark
詳細

Ceph OSD を outindown、および lost にマークします。

注記

Ceph OSD は、lost にする前に down とマークする必要があります。

パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
PUT /api/osd/SVC_ID/mark HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "action": "STRING"
}
ステータスコード
  • 200 OK – Okay.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/osd/SVC_ID/purge
説明

CRUSH マップから Ceph OSD を削除します。

注記

Ceph OSD は、削除前に down とマークする必要があります。

パラメーター
  • SVC_ID は、Ceph OSD サービス識別子の文字列値に置き換えます。
ステータスコード
  • 201 Created – Resource created.
  • 202 Accepted – Operation is still executing.タスクキューを確認してください。
  • 400 Bad Request – Operation exception.詳細は、レスポンスボディーを確認してください。
  • 401 Unauthorized – Unauthenticated access.最初にログインしてください。
  • 403 Forbidden – Unauthorized access.パーミッションを確認してください。
  • 500 Internal Server Error – Unexpected error.スタックトレースのレスポンスボディーを確認してください。
POST /api/osd/SVC_ID/reweight
詳細
Ceph OSD の重みを一時的に変更します。Ceph OSD に out とマークが付けられると、OSD の重みは 0 に設定されます。Ceph OSD のマークが