IBM Cloud Docs
IBM Cloudant アカウントの使用方法

IBM Cloudant アカウントの使用方法

アカウントが IBM® Cloudant® for IBM Cloud® API のエントリー・ポイントになります。 アドレスプレフィックスを使用してアカウントにアクセスします https://$ACCOUNT.cloudant.com.

IBM Cloudant ダッシュボードには、常に https://$ACCOUNT.cloudant.com/dashboard.html のアドレスを使用します。

アカウントがまだない場合は、 IBM Cloudantにサインインします。

IBM Cloudant アカウントにアクセスできるかどうかを確認するには、GETに対して https://$ACCOUNT.cloudant.com を実行します。 アカウント名のスペルを間違えると 503:サービス利用不可エラーが出るかもしれません。 以下のリストに、使用可能な認証のタイプを示します。

IAM 認証

IAM では以下のタスクを実行できます。

  • IBM Cloud 全体のアクセス管理を集中管理できます。
  • 同じ一連の資格情報 (例えば、同じユーザー名とパスワードまたは IAM API キー) を使用して多種多様なリソースにユーザーまたはサービスがアクセスするのを許可します。
  • 新規データベースの作成など、アカウント管理機能へのアクセスのために、IAM API キーを付与できます。

詳しくは、 アクセス権限の管理 または IAMの概要を参照してください。

認証

認証とは自分が誰であるかを証明することです。 ユーザー資格情報を提供して検証を受けることで、自分の身元を証明します。

基本認証は、入室するたびにドアの前で ID を提示して検査を受けることに似ています。 Cookie 認証は、いつでも自分で入室できるようにドアの鍵を所持していることに似ています。 IBM Cloudant では、AuthSession という名前の Cookie が、この鍵に相当します。

パフォーマンスが重要な IBM Cloudant アプリケーションを作成または使用する場合は、基本認証よりも Cookie 認証のほうが多くのメリットがあります。 可能な限り Cookie 認証を使用することをお勧めします。

基本認証

基本認証を使用するには、各要求の一部として資格情報を渡します。 要求に Authorization ヘッダーを追加して資格情報を渡します。

ヘッダーには認証スキーム Basic)が含まれる、 の後に、連結して作成された文字列の BASE64エンコーディングが続く:

  • ユーザー名
  • : 文字
  • パスワード

実際には、HTTP 要求の作成に使用されるアプリケーション・ライブラリーの多くが、このエンコードを自動で実行します。

詳細については、基本認証に関する セキュリティ・スキームを参照のこと。

許可

認証を受けたら、次の検査として、特定のタスクを実行することを許可されているかどうかが判定されます。 この判定を許可と呼びます。

IBM Cloudant システムでユーザーは認証を受けたので、システムはユーザーが誰であるかを「認識」しています。 次に問題になるのは、そのユーザーに許可されているタスクは何かという点です。

IBM Cloudant システムの側面 (データベースや文書など) ごとに、実行できるタスクをすべて網羅したリストを作成することもできます。 この方式はシンプルですが、非常に長いリストがいくつも必要になるでしょう。 そのようなリストを正確で完全な状態に保つことは、現実的でありません。

「役割」という概念を使用する方式のほうが適切です。 さまざまなタスクをグループに分けて、一般的な役割ごとに代表的なタスクの集合を作成できます。 例えば、データベースを作成/削除するタスクは、管理役割を持つユーザーに特有のタスクです。 同様に 文書を作成したり更新したりする作業は、「書く」役割を持つ人の特徴である。

ユーザーが実行できるすべてのタスクを明示的にリストする代わりに、1 つ以上の役割をユーザーに付与することができます。 役割を 1 つ付与すれば、その役割に関連付けられたすべてのタスクを実行できるようになります。

役割

以下のセクションは、レガシークレデンシャルにのみ適用される。 IAM 資格情報を持つ役割の使用について詳しくは、 IBM Cloudant 役割を参照してください。

IBM Cloudant には、さまざまな役割が用意されています。 役割は、ユーザー・アカウントまたは API キーに割り当てることができます。

以下の表に、中核的な 3 つの役割の定義を示します。

中核的役割
役割 説明
_admin 役割を追加するなど、セキュリティーの設定を変更します。
_reader データベースから文書を読み取ります。
_writer データベースの文書 (設計文書を除く) を作成、更新、および削除します。

_reader 役割と _writer 役割とは排他的です。 _writer 役割を持つユーザーは、* 役割*も_reader 持っていない限り、自分で作成した文書を読み取ることができません。

複数の役割の割り当てが必要になることがあります。 例えば、データベースの文書の読み取り/書き込みを行う必要はあるが、データベースの完全な管理制御を行う必要はないユーザーがいるとします。 この要件を満たすには、そのユーザーのアカウントに _reader 役割と _writer 役割を付与し、_admin 役割は付与しないようにします。

より「焦点を絞った」役割もあります。 そのような役割を使用すると、特定の API エンドポイントに対する許可を与えることができます。 焦点を絞った役割による許可は、中核的な役割による許可と似ていますが、特定の API エンドポイントに対してのみ 適用される点が異なります。

以下の表に、焦点を絞った役割の定義を示します。

重点的な役割
役割 説明 API エンドポイント
_design 設計文書への作成、読み取り、変更、および削除のアクセスを許可します。 _design, _find, _index
_replicator データベースのデータを複製するための読み取りアクセスと、チェックポイントを作成するための書き込みアクセスを許可します。 _local, _replicate, _replicator
_security /$DATABASE/_security エンドポイントへの読み取りアクセスと書き込みアクセスを許可します。 _security

付与されるアクセス権限の性質は、具体的な API エンドポイントに応じて異なります。 例えば、 _design 役割は、ユーザーまたは API キーに、設計文書の作成、読み取り、変更、削除を許可するアクセス権限を付与します。 このようなアクセス権限を付与する利点は、より広範囲に適用される _reader 役割または _writer 役割を割り当てずに済むことです。 この区別は、そうでなければ認証されたアカウントがデータベース内のドキュメントを読み書きする可能性があるため有用です、 設計文書以外の

ダッシュボードへのログインに使用した資格情報に、自分で作成したすべてのデータベースに対する _admin 役割が自動的に付与されます。 明示的に役割を付与しない限り、データベースを共有したユーザーや、自分で作成した API キーも含め、自分以外の誰も何も、対応するタスクを実行することはできません。

nobody という特殊なユーザー名は、システムで認証を受けずに、タスクの実行を試行するユーザーまたはアプリケーションに該当します。 つまり、 nobody ユーザー名は、非認証のすべての接続試行に適用されます。 例えば、データベースのデータを読み取ろうとするアプリケーションが身元を提示しない場合は、 nobody ユーザーに _reader 役割が付与されている場合に限り、そのタスクを続行できます。

非認証 ユーザーに、認証ユーザーよりも強力な役割を付与することが可能です。 例えば、 nobody ユーザー名が意図的に付与されている _admin 場合は、以下のようになります。 _reader ロールおよび _writer ロール。ただし、 alexone などの認証済みユーザー・アカウントには、 _reader ロールのみが付与されます。 この場合は、非認証ユーザーのほうが、認証ユーザー alexone よりも強力な役割を持つことになります。

nobody ユーザー名は、デフォルトの許可セットを設定する手段ではない と理解しておくことが重要です。 そうではなく、nobody ユーザー名は、非認証 ユーザーの許可を指定するために使用するものです。

割り当てる役割の決定

まず、ユーザー・アカウントまたは API キーに割り当てる役割を決めます。 そのアカウントまたは API キーのタスクを実行するために必要な最小限の許可を含む役割を割り当てるのがベストです。

設計文書やセキュリティー設定を操作するなど、特定の側面のためのタスクである場合は、_design_security などの焦点を絞った役割を割り当ててください。

API キー

以下のセクションは、レガシークレデンシャルにのみ適用される。 IAM 認証情報での API キーの使用についての詳細は、IAM API キーを参照。

ユーザーまたはアプリケーションのために新規 IBM Cloudant アカウントを作成せずに、そのユーザーまたはアプリケーションのデータベース・アクセスを有効にするには、API キーを使用します。 API キーとは、ランダムに生成されたユーザー名とパスワードのことです。 このキーには、データベースに対する必要なアクセス許可が付与されます。

キーを生成し、必要なアクセス許可をキーに付与したら、その API キーを通常のユーザー・アカウントと同じように使用できます。

しかし、API キーは通常のユーザー・アカウントと同じではありません。 API キーでは、ダッシュボードにアクセスできません。

API キーの主な用途は、指定したレベルのアクセス制御で、アプリケーションをデータベースにアクセスできるようにすることです。

IBM Cloudant のパブリックのドイツ・リージョンからデプロイされたすべての IBM Cloud® インスタンスは、EU 管理環境でデプロイされます。 任意 EU 管理対象環境の外部で生成された IBM Cloudant アカウントまたは API キーに、EU 管理対象 IBM Cloudant インスタンスへのアクセス権限を付与することはできません。 IBM Cloudant について詳しくは、 EU 管理環境では、ロケーションとテナンシーを参照してください。

API キーの作成

POST エンドポイントに https://cloudant.com/api/generate_api_key コマンドを発行して API キーを生成するという従来の方法は、非推奨になりました。

APIキーを作成するには、以下の2つの方法がある:

  1. ダッシュボードを使用する。
  2. IBM Cloudant API を使用して、 権限を変更します。

どちらの方法を選択する場合でも、 キーの名前とパスワードを必ず記録してください。 これらの値は両方ともランダムに生成される値であり、失ったり忘れたりした場合に再表示することはできません。

API キーの使用

通常、API キーは、データベースを 1 つ以上所有するアカウントを使用して生成されます。 その API キーは他のデータベースでも使用できます。他のアカウントでも使用できます。

デフォルトでは APIキーには何の権限もない。 明示的に許可を付与する必要があります。

APIキーを生成したら にリクエストを送ることで、そのキーに特定のデータベースへのアクセス権限を付与することができます PUT https://$ACCOUNT.cloudant.com/_api/v2/db/$DATABASE/_security.

データベースは、APIキーの初期生成に使用したアカウントと同じアカウントである必要はない。

既存のAPIキーに、別のアカウントのデータベースへのアクセス許可を与えるには、以下の手順に従います:

  1. データベースの既存の セキュリティ権限を取得します。
  2. APIキーの詳細を、必要なロールとともにデータベースのセキュリティ権限に 追加する。

このプロセスの例については、ブログ記事を参照してください。 複数の IBM Cloudant データベースおよびアカウントでの IBM Cloudant API キーの使用

API キーの削除

API キーを削除することはできません。 API キーは、キーとそのパスワードがわかればいつでも使用可能です。 ただし、API キーが役に立つのは、API キーをデータベースに割り当て、データベースを操作するための許可を割り当てる場合のみです。

API キーを「削除」するには、データベースから API キーを削除します。 すると、そのデータベースを操作できるように API キーにこれまで割り当てられていたすべての許可が削除されます。

ダッシュボードを使用して API キーを削除する

  1. Databases>Permissionsをクリックします。
  2. 削除したいAPIキーにカーソルを合わせます。
  3. API キーをマウスオーバーすると表示される「X」をクリックします。

IBM Cloudant API を使用して API キーを削除する

アクセス権限を持つユーザーリストからAPIキーを削除するには、パーミッションの変更テクニックを使用する。

この手法が機能するのは、API キーがユーザーと似ており、アクセス許可を付与されているためです。 アクセス許可を持つユーザーのリストから API キーを削除することで、データベースにアクセスできるユーザーのリストから API キーを削除します。

APIキーを削除するには APIキーを作成する使用したのと同じ API エンドポイントに HTTP PUT リクエストを送信します _security この要求により、アクセス許可を持つユーザーのリストから API キーが削除されます。 アクセス許可を持つユーザー名のリストを更新したものを指定します。 更新したリストに対象の API キーを含めてはいけません。

IBM Cloudant の _users データベースの使用

以下のセクションは、レガシークレデンシャルにのみ適用される。

次のファイルを使用できます: IBM Cloudantでロールを管理するための _users データベース

_users に格納されるユーザードキュメントは、Apache CouchDBの要件に準拠するように構造化され、入力される必要があります。 Apache CouchDBの要件に準拠するように構造化され、ポピュレートされる必要があります。

couchdb_auth_only:true パラメーターを設定して、IBM Cloudant 許可検査を無効にすることができます。 IBM Cloudant セキュリティーを無効にするには、以下のようにします。 PUT a JSON document to the _security endpoint of the database. 例えば、 https://$ACCOUNT.cloudant.com/$DATABASE/_securityです。

HTTP を使用して変更要求を送信する例を以下に示します。

PUT /$DATABASE/_security HTTP/1.1
Content-Type: application/json

変更要求を送信するには、以下の例を参照してください。

curl -H "Authorization: Bearer $API_BEARER_TOKEN" -X PUT "$SERVICE_URL/products/_security" -H "Content-Type: application/json" --data '{"members": {"names": ["user1", "user2"], "roles": ["developers"]}}'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.Ok;
import com.ibm.cloud.cloudant.v1.model.PutSecurityOptions;
import com.ibm.cloud.cloudant.v1.model.SecurityObject;

import java.util.Arrays;

Cloudant service = Cloudant.newInstance();

SecurityObject members = new SecurityObject.Builder()
    .names(Arrays.asList("user1", "user2"))
    .roles(Arrays.asList("developers"))
    .build();

PutSecurityOptions securityOptions =
    new PutSecurityOptions.Builder()
        .db("products")
        .members(members)
        .build();

Ok response =
    service.putSecurity(securityOptions).execute()
        .getResult();

System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');

const service = CloudantV1.newInstance({});

const members: CloudantV1.SecurityObject = {
  names: ['user1', 'user2'],
  roles: ['developers']
};

service.putSecurity({
  db: 'products',
  members: members
}).then(response => {
  console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1, SecurityObject

service = CloudantV1.new_instance()

members = SecurityObject(
  names=['user1', 'user2'],
  roles=['developers']
)

response = service.put_security(
  db='products',
  members=members
).get_result()

print(response)
putSecurityOptions := service.NewPutSecurityOptions(
  "products",
)
putSecurityOptions.SetMembers(&cloudantv1.SecurityObject{
  Names: []string{"user1", "user2"},
  Roles: []string{"developers"},
})

ok, response, err := service.PutSecurity(putSecurityOptions)
if err != nil {
  panic(err)
}

b, _ := json.MarshalIndent(ok, "", "  ")
fmt.Println(string(b))

前の Go の例では、以下のインポート・ブロックが必要です。

import (
   "encoding/json"
   "fmt"
   "github.com/IBM/cloudant-go-sdk/cloudantv1"
)

すべての Go の例では、serviceオブジェクトを初期化する必要があります。 詳しくは、API 資料の認証セクションで例を参照してください。

JSON 形式の変更要求の例を以下に示します。

{
	"couchdb_auth_only": true,
	"members": {
		"names": ["member"],"roles":[]
	},
	"admins": {
		"names": ["admin"],"roles":[]
	}
}

変更要求の応答の例を以下に示します。

{
	"ok" : true
}