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 キーを付与できます。
認証
認証とは自分が誰であるかを証明することです。 ユーザー資格情報を提供して検証を受けることで、自分の身元を証明します。
基本認証は、入室するたびにドアの前で ID を提示して検査を受けることに似ています。 Cookie 認証は、いつでも自分で入室できるようにドアの鍵を所持していることに似ています。 IBM Cloudant では、AuthSession
という名前の Cookie が、この鍵に相当します。
パフォーマンスが重要な IBM Cloudant アプリケーションを作成または使用する場合は、基本認証よりも Cookie 認証のほうが多くのメリットがあります。 可能な限り Cookie 認証を使用することをお勧めします。
基本認証
基本認証を使用するには、各要求の一部として資格情報を渡します。 要求に Authorization
ヘッダーを追加して資格情報を渡します。
ヘッダーには認証スキーム Basic
)が含まれる、 の後に、連結して作成された文字列の BASE64エンコーディングが続く:
- ユーザー名
:
文字- パスワード
実際には、HTTP 要求の作成に使用されるアプリケーション・ライブラリーの多くが、このエンコードを自動で実行します。
詳細については、基本認証に関する セキュリティ・スキームを参照のこと。
役割
以下のセクションは、レガシークレデンシャルにのみ適用される。 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つの方法がある:
- ダッシュボードを使用する。
- IBM Cloudant API を使用して、 権限を変更します。
どちらの方法を選択する場合でも、 キーの名前とパスワードを必ず記録してください。 これらの値は両方ともランダムに生成される値であり、失ったり忘れたりした場合に再表示することはできません。
API キーの使用
通常、API キーは、データベースを 1 つ以上所有するアカウントを使用して生成されます。 その API キーは他のデータベースでも使用できます。他のアカウントでも使用できます。
デフォルトでは APIキーには何の権限もない。 明示的に許可を付与する必要があります。
APIキーを生成したら にリクエストを送ることで、そのキーに特定のデータベースへのアクセス権限を付与することができます PUT
https://$ACCOUNT.cloudant.com/_api/v2/db/$DATABASE/_security
.
データベースは、APIキーの初期生成に使用したアカウントと同じアカウントである必要はない。
既存のAPIキーに、別のアカウントのデータベースへのアクセス許可を与えるには、以下の手順に従います:
このプロセスの例については、ブログ記事を参照してください。 複数の IBM Cloudant データベースおよびアカウントでの IBM Cloudant API キーの使用。
API キーの削除
API キーを削除することはできません。 API キーは、キーとそのパスワードがわかればいつでも使用可能です。 ただし、API キーが役に立つのは、API キーをデータベースに割り当て、データベースを操作するための許可を割り当てる場合のみです。
API キーを「削除」するには、データベースから API キーを削除します。 すると、そのデータベースを操作できるように API キーにこれまで割り当てられていたすべての許可が削除されます。
ダッシュボードを使用して API キーを削除する
Databases
>Permissions
をクリックします。- 削除したいAPIキーにカーソルを合わせます。
- 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
}