IBM Cloud Docs
IBM Cloudant のアクセス権限の管理

IBM Cloudant のアクセス権限の管理

IBM Cloud® Identity and Access Management を使用すると、統一された方法で ユーザー ID、サービス、およびアクセス制御を管理できます。

以下のテキストは、 IBM® Cloudant® for IBM Cloud® と IBM Cloud Identity and Access Managementとの統合について説明しています。 以下のトピックについて説明します。

  • IBM Cloudant のレガシー・アクセス制御と IBM Cloud の IAM アクセス制御の違い。
  • どちらを使用するかを決定するために役立つ、それぞれのアクセス制御の長所と短所。
  • IBM Cloudant のクライアント・ライブラリー内で HTTP 呼び出しを使用して IAM を使用する方法。
  • IBM Cloudant 内で使用できる IAM のアクションと役割についての説明。

詳細については、以下のトピックを含む IAM の概要をご覧ください

  • ユーザーおよびサービス ID を管理する。
  • 使用可能な資格情報を管理する。
  • IBM Cloudant サービス・インスタンスへのアクセスを許可および取り消す IAM アクセス・ポリシーを使用する。

IBM Cloudant の従来のアクセス制御と IAM のアクセス制御の違い

次のセクションでは、 IBM Cloudant 間の相違点について簡単に説明します。 レガシー・アクセス制御と IBM Cloud IAM のアクセス制御メカニズム。

IBM Cloud Identity and Access Management

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

IBM Cloudant レガシー・アクセス制御

  • IBM Cloudant に固有。
  • 各サービス・インスタンスにアクセスする場合、独自の一連の資格情報が必要です。
  • 個別のユーザーまたはサービスにバインドされない資格情報による HTTP 基本認証を使用します。
  • IBM Cloudant API キーにはデータベース・レベルでのみ許可を付与できます。

API キーに関する注意事項

この資料では、API キーという記述は、すべて IAM API キーを示します。 IBM Cloudant の従来のアクセス制御にも API キーという概念があり、従来の IBM Cloudant の資格情報またはユーザー名とパスワードの組み合わせの記述にも、すべて IBM Cloudant API キーが含まれます。

IBM Cloudant を備えた IAM の有効化

2018 年 7 月以降にプロビジョンされたすべての IBM Cloudant サービス・インスタンスは、リソース・グループにプロビジョンされ、IBM Cloud IAM と共に有効にされます。 オプションで、従来の IBM Cloudant 認証メカニズムも有効にすることを選択できます。 IBM Cloudant カタログから新しい IBM Cloud インスタンスをプロビジョンする場合、次の認証方式のいずれかを選択します。

従来の資格情報と IAM の両方を使用
このモードは、アカウントへのアクセスに IAM 資格情報とレガシー資格情報の両方を使用できることを意味します。 特に、IAM と従来の一連の資格情報の両方が、生成されたアカウントおよびサービス資格情報にバインドされているすべてのアプリケーションに提供されます。
IAM のみを使用
このモードでは、サービスバインドとクレデンシャル生成を使用することで、IAMクレデンシャルのみが提供されることを意味します。

Manager 以外の IAM 役割 (例えば、ReaderWriterMonitorCheckpointer など) を使用する場合、従来の資格情報を使用するユーザーに過度のアクセス許可を与えるのを避けるため、IAM のみ使用 を使用する必要があります

ポリシーの適用

IAMポリシーは、最大レベルのアクセスから最も制限されたアクセスへと階層的に適用され、より寛容なポリシーがより寛容でないポリシーを上書きする。 例えば、データベース上でユーザーが WriterReader の両方のサービスアクセス権限を持っている場合、 Reader の権限を付与するポリシーは無視されます。

これは、サービスインスタンスおよびデータベースレベルのポリシーにも適用されます。

  • ユーザーがサービスインスタンスで Writer のロールを付与するポリシーを持ち、単一のデータベースで Reader のロールを付与するポリシーを持つ場合、データベースレベルのポリシーは無視されます。
  • ユーザーに、サービスインスタンスで Reader のロールを付与するポリシーと、単一のデータベースで Writer のロールを付与するポリシーがある場合、両方のポリシーが適用され、より緩やかな Writer のロールが個々のデータベースに対して優先されます。

単一のデータベース(またはデータベースのセット)へのアクセスを制限する必要がある場合は、コンソールまたは CLI を使用して、ユーザーまたはサービス ID が他のインスタンスレベルのポリシーを持たないようにしてください。

詳しくは、リソースの整理とアクセス権の割り当てのベストプラクティス をご覧ください。

IBM Cloudant API キーと IAM のみを使用

IAM とともに IBM Cloudant API キーを使用できますが、推奨されていません。 この推奨は、 IBM Cloudant API キーと許可は、IAM ポリシー・インターフェースを使用して表示したり管理したりすることができないため、全体的なアクセス管理は不可能になります。

Use only IAMUse both legacy credentials and IAM のどちらを選択するのかは、以下のことに影響します。

  1. データベースとその他のアカウント・レベルのアクションを管理するために、従来の IBM Cloudant のアカウント・レベルの資格情報を使用できるかどうか。
  2. サービス資格情報の生成時に送信される資格情報のスタイル。

特に、データベース・アクセスを管理するために、IBM Cloudant API キーを使用できます。 HTTP API を使用して、これらの資格情報を生成し、 構成する必要があります。

コマンド・ラインを使用したプロビジョン

コマンド・ラインから新しい IBM Cloudant インスタンスをプロビジョンする場合、アカウントの従来の資格情報を有効または無効にする ibmcloud パラメーターを使用することで、 -p ツールに対してオプションを指定します。 このオプションは、 JSON 形式で渡され、legacyCredentials という名前です。

IAM のみ使用 (推奨) モードでインスタンスをプロビジョンするには、次のコマンドを実行します。

ibmcloud resource service-instance-create  "Instance Name" \
    cloudantnosqldb Standard us-south \
    -p {"legacyCredentials": false}

Manager 以外の IAM 役割 (例えば、ReaderWriterMonitorCheckpointer など) を使用する場合、従来の資格情報を使用するユーザーに過度のアクセス許可を与えるのを避けるため、IAM のみ使用 を使用する必要があります

従来の資格情報と IAM の両方を使用 モードでインスタンスをプロビジョンするには、次のコマンドを実行します。

ibmcloud resource service-instance-create  "Instance Name" \
    cloudantnosqldb Standard us-south \
    -p {"legacyCredentials": true}

各オプションのサービス資格情報 JSON の例

Use only IAMUse both legacy credentials and IAM のどちらのアクセス制御を選択するのかは、サービス資格情報をバインドおよび生成するときに資格情報がアプリケーションにどのように送信されるのかに影響します。 1 次 IBM Cloud 内で資格情報を生成する場合 IAM インターフェースでは、 API キーは生成時にそのインターフェースに表示されます。

サービス・インスタンスの「サービス資格情報」セクションから資格情報を 生成することもできます。 この方法でサービス資格情報を生成すると、サービス資格情報の JSON Blob が作成されます。この JSON Blob は、サービス・インスタンスにアクセスするために必要なすべての詳細とともにアプリケーションに貼り付けることができます。

次に、サービス資格情報の JSON の内容と各値の意味について説明します。

IAM のみ使用 を選択した場合、生成されるサービス資格情報には IAM 値のみ含まれ、 サービス資格情報は次の例のようになります。

{
  "apikey": "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz",
  "iam_apikey_description": "Auto generated apikey during resource-key [...]",
  "iam_apikey_name": "auto-generated-apikey-050d21b5-5f[...]",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager",
  "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::[...]",
  "url": "https://76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "username": "76838001-b883-444d-90d0-46f89e942a15-bluemix"
}

前述の JSON 例のそれぞれの値は、次の定義を使用して解釈する必要があります。

apikey
IAM API キー。
iam_apikey_description
IAM API キーの説明。
iam_apikey_name
IAM API キーの ID。
iam_role_crn
IAM API キーの IAM 役割。
iam_serviceid_crn
サービス ID の CRN。
url
IBM Cloudant サービスの URL。
username
内部の IBM Cloudant アカウント名。

従来の資格情報と IAM の両方を使用 を選択した場合、生成されるサービス資格情報には IAM と従来の資格情報の両方が含まれ、次の例の値のようになります。

{
  "apikey": "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz",
  "host": "76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "iam_apikey_description": "Auto generated apikey during resource-key [...]",
  "iam_apikey_name": "auto-generated-apikey-050d21b5-5f[...]",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager",
  "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::[...]",
  "password": "8fb6a16b48903e87b769e7f4968521e85c2394ed8f0e69b2769e56dcb27d2e76",
  "port": 443,
  "url": "https://<username>:<password>@76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "username": "apikey-v2-58B528DF5397465BB6673E1B79482A8C"
}

前述の JSON 例のそれぞれの値は、次の定義を使用して解釈する必要があります。

apikey
IAM API キー。
host
IBM Cloudant サービスのホスト名。
iam_apikey_description
IAM API キーの説明。
iam_apikey_name
IAM API キーの ID。
iam_role_crn
IAM API キーの IAM 役割。
iam_serviceid_crn
サービス ID の CRN。
password
IBM Cloudant の既存の資格情報パスワード。
port
IBM Cloudant サービス・ポート。
url
IBM Cloudant サービス URL(組み込み IBM Cloudant レガシー資格情報を含む)。
username
IBM Cloudant の従来の資格情報ユーザー名。

含まれている usernamepassword は常に、IAM の管理者資格情報と等価であることに注意してください。 したがって、Reader、またはWriter IAM 役割と共に使用する場合のMonitor「従来の資格情報と IAM の両方を使用」Checkpointerの使用は安全ではありません。

IAM のみ使用従来の資格情報と IAM の両方を使用 のどちらを使用したらよいですか?

可能な場合は、IAM のみ使用 を優先してください。 使用する主な利点 IBM Cloud IAM を以下のリストに示します。

  • IBM Cloudant へのアクセスを、IBM Cloud と IBM Cloud 固有の資格情報管理機能を組み合わせて管理するのではなく、IBM Cloudant の標準ツールを使用して管理します。
  • IBM Cloud IAM を使用した場合、資格情報を簡単に取り消すことやローテーションすることができます。

各方法の長所と短所について以下で詳しく説明します。

Manager 以外の IAM 役割 (例えば、ReaderWriterMonitorCheckpointer など) を使用する場合、従来の資格情報を使用するユーザーに過度のアクセス許可を与えるのを避けるため、IAM のみ使用 を使用する必要があります

2 つのアクセス制御メカニズムの長所と短所

一般的に、認証モデルとして IBM Cloud IAM が推奨されています。 ただし、既存のアプリケーションがある場合、または IBM Cloudant がサポートしているクライアント・ライブラリーを使用できない場合、この方法には基本的な欠点があります。

IAM モードの利点

  • 1 つのインターフェースを使用して多くのサービスへのアクセスを管理できます。
  • ユーザーのアクセス権をグローバルに取り消すことができます。
  • サービス ID を使用するアカウント・レベルの API キー。
  • 資格情報を簡単にローテーションできます。
  • アクティビティー・トラッカー・ログにより、個人および個々のサービスがキャプチャーされます。
  • エンタープライズ LDAP リポジトリーなど、他の ID システムと IAM を統合できます。
  • 微細化された許可 (例えば、ReaderWriterMonitorCheckpointer)。

IAM モードの欠点

  • IBM Cloudant のサポートされているライブラリーを使用しない場合、IAM の API キーおよびアクセス・トークンを使用するには、アプリケーションの変更が必要になる可能性があります。
  • 一部のエンドポイントは使用できません。 詳しくは、使用不可のエンドポイントを参照してください。
  • 「公開」として (つまり、アクセスするユーザーへの許可が不要) データベースを指定する方法がありません。

従来モードの利点

  • 既存のアプリケーションまたはクライアント・ライブラリーの依存関係を変更する必要がありません。

従来モードの欠点

  • IBM Cloudant の資格情報を個別に管理します。このため、集中インターフェース内ですべてのアクセスを全体的に確認できません。

データベースレベルのIAMポリシー

IAMポリシーは、個々のデータベースまたはワイルドカードパターンに一致するデータベースへのアクセスを制限するために定義することができる。

データベースをターゲットにするには、属性 Resource Type を'database に設定する。 利用可能なオペレーターは2つ あります。

データベースレベルのIAMオペレータ
オペレーター 説明
string equals URLデータベース名に完全に一致します。
string matches マルチキャラクターワイルドカード(*)を使用して一致させる。これは、0文字以上の任意の文字列に一致する。また、シングルキャラクターワイルドカード(?)は、任意の1文字に一致する。または、両方を使用して一致させる。

データベース名は、ポリシー のリソースIDフィールド URLする必要があります。ただし、スラッシュは例外です。 /。 これはポリシー内のワイルドカード文字には適用されない

リソースタイプまたはリソースID のフィールドを空白のままにすると、インスタンスレベルのポリシーが作成されますのでご注意ください。

データベースレベルのIAMオペレータの例
説明 属性 オペレーター
movies 名前のデータベース リソース・タイプ string equals database
リソース ID string equals movies
movies で始まるデータベース リソース・タイプ string equals database
リソース ID string matches movies*
movies+new 名前のデータベース リソース・タイプ string equals database
リソース ID string equals movies%2Bnew
movies+* で始まるデータベース リソース・タイプ string equals database
リソース ID string matches movies%2B*
movies/new 名前のデータベース リソース・タイプ string equals database
リソース ID string equals movies/new

IAM 資格情報のみを使用した複製ジョブの作成

以下の指示に従って、IAM API キーを生成し、ベアラー・トークンを生成し、_replicator データベースを作成し、複製ジョブを作成します。

ソースおよびターゲット用と IBM Cloudant API アクセス用の IAM API キーの作成

この演習では、最初の 2 つの API キーを作成して、複製プロセス中に 2 つのインスタンスが対話できるようにします。 3 番目の API キーは、ユーザーが IBM Cloudant API にアクセスし、_replicator データベースを作成し、それに複製文書を追加するためのものです。

以下のステップに従って、IBM Cloudant の IAM API キーおよび API アクセスを生成します。 この例を続行するためには、以下のステップで要求される資格情報をメモする必要があります。

指定されたインスタンス (ソースまたはターゲットのいずれか) を選択していることを確認してください。

  1. cloud.ibm.com にログインします。

  2. リソース・リストから**「サービス」**を選択し、ソース・インスタンスを選択します。

    1. **「サービス資格情報」をクリックし、「新規資格情報」**をクリックします。

    2. 新規資格情報に replicator-source という名前を付け、管理者役割を選択します。

    3. **「追加」**をクリックし、アクション列の「資格情報の表示」の下にある apikey をメモします。

  3. ターゲット・インスタンスについてステップ 2 から 2.c を繰り返します。

    1. 管理者役割を持つ replicator-target という名前の資格情報を作成します。

    2. アクション列の「資格情報の表示」の下にある IAM API キーをメモします。

  4. ソース・インスタンスを選択し、**「サービス資格情報」および「新規資格情報」**をクリックします。

    1. 新規資格情報に apiaccess という名前を付け、管理者役割を選択します。

    2. アクション列の「資格情報の表示」の下にある実際の IAM API キーをメモします。

  5. ソース・インスタンスおよびターゲット・インスタンスの URL をメモします。

お客様のワークフローによっては、サービスレベルの認証情報を作成する代わりに(ステップ4)、「APIキーの作成」 で説明されているように、個人用IAM APIキーを使用することができます。

IBM Cloud CLI ツールチェーンを使用して、コマンドラインでこれらの手順を完了することもできます。

IBM Cloudant API に対する認証のためのベアラー・トークンの生成

ステップ 4.bでは、 apiaccess キーを書き留めました。 ここでそのキーを使用します。

curl -k -X POST \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --header "Accept: application/json" \
  --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
  --data-urlencode "apikey=aSCsx4...2lN97h_2Ts" \
  "https://iam.cloud.ibm.com/identity/token"

apiaccess キーは、以下の情報を返します (一部省略されています)。

{
   "access_token": "eyJraWQiOiIyMDE5MD...tIwkCO9A",
   "refresh_token": "ReVbNrHo3UA38...mq67g",
   "token_type": "Bearer",
   "expires_in": 3600,
   "expiration": 1566313064,
   "scope": "ibm openid"
}

応答データの access_token キーの値を使用して、入力を保存するための環境変数を作成します。

export TOK="Bearer eyJraWQiOiIyMDE5MD...tIwkCO9A"

ソース・サイドでの _replicator データベースの作成

URL は、ステップ 4.b で前にメモしたソース・インスタンス URL です。

curl -k -X PUT \
     -H"Content-type: application/json" \
     -H'Authorization: '"$TOK"'' \
     'https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/_replicator'

結果は以下の例のようになります。

{"ok": "true"}

複製ジョブの作成

以下の情報を含む data.json という名前のファイルを作成します。 2 つのキーは、最初に作成されたソースおよびターゲットの API キーであり、データベース名が追加された、ソース・インスタンスおよびターゲット・インスタンスの URL です。

{
  "source": {
    "url": "https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/source",
    "auth": {
      "iam": {
        "api_key": "xju1...TxuS"
      }
    }
  },
  "target": {
    "url": "https://dbc68dd8-f69f-4083-97dd-bf0a3e1a467a-bluemix.cloudant.com/target",
    "auth": {
      "iam": {
        "api_key": "UElc7...QIaL01Bjn"
      }
    }
  },
  "create_target": true,
  "continuous": true
}

次に、source_dest という名前の複製文書をソース・インスタンスの _replicator データベースに書き込みます。

curl -k -X PUT \
     -H"Content-type: application/json" \
     -H'Authorization: '"$TOK"'' \
     'https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/_replicator/source_dest' -d@data.json

結果は以下の例のようになります。

{"ok":true,"id":"source_dest","rev":"1-89b01e42968acd5944ed657b87c49f0c"}

インスタンスからの IBM Cloudant の従来の資格情報の削除

認証モデルとして IBM Cloud IAM が推奨されています。 セキュリティー目的のため、インスタンスに対して IAM 認証のみが使用されるように、IBM Cloudant の従来の資格情報を削除するように要求できます。 従来の資格情報を削除するための正しいプロセスを、以下のステップに示します。

  1. IBM Cloudant インスタンスで IAM 認証が有効になっていることを確認します。

  2. IBM Cloudant の従来の認証の代わりに IAM 認証を使用するようにアプリケーションを更新します。

  3. 必要に応じて、新しいサービス資格情報を生成します。

  4. インスタンス用の IBM Cloud の従来の資格情報を削除するように要請する新しい IBM Cloudant サポート Case をオープンします。 サービス資格情報に示されている、インスタンスのユーザー名を含めてください。 詳しくは、サービス資格情報の検索を参照してください。

  5. 従来の資格情報が削除されたという応答をサポートから受け取った後、削除前に作成されたサービス資格情報には、もう機能しない古いユーザー名とパスワード詳細が含まれています。 これらのサービス資格情報エントリーをすべて削除することをお勧めします。

IAM 資格情報を使用したインスタンスへの要求の実行

次は、サービス・インスタンスで IAM 認証を使用して IBM Cloudant を使用する方法について、以下のセクションで説明します。 各オプションのサービス資格情報 JSON の例からの詳細を使用します。

IBM Cloud IAM では、リソースまたはサービスに対して要求を実行する前に、IAM API キーを時間制限アクセス・トークンに交換する必要があります。 その後、アクセス・トークンは、サービスに対する Authorization HTTP ヘッダーに組み込まれます。 アクセス・トークンが期限切れになった場合、取り込んでいるアプリケーションは、IAM トークン・サービスからの新しいアクセス・トークンの取得を処理する必要があります。 詳細については 、 IBM Cloud IAM トークンを API キーを使用して取得するドキュメントを参照してください。

IBM Cloudant の公式クライアント・ライブラリーは、API キーからのトークンの取得を処理します。 IBM Cloudant には、IBM Cloudant クライアント・ライブラリーではなく、HTTP クライアントを使用して直接アクセスできます。 ただし、IAM トークン・サービスで IAM API キーを使用して、時間制限付きアクセス・トークンの交換とリフレッシュを処理する必要があります。 トークンが期限切れになると、IBM Cloudant は HTTP 401 状況コードを返します。

必要なクライアント・ライブラリーのバージョン

IAM 接続は、サポートされるすべてのクライアント・ライブラリーの最新リリースで使用可能です。 詳しくは、『クライアント・ライブラリー』を参照してください。

Java

次のリンクは、 IBM Cloudant Java™ ライブラリの最新サポートバージョンを提供しています

IBM Cloudant SDK for Java を使用した例については 、API および SDK のドキュメントを参照してください。

Node.js

次のリンクは、IBM Cloudant Node.js ライブラリーの最新のサポート対象バージョンを提供します。

IBM Cloudant SDK for Node を使用した例については 、API および SDK のドキュメントを参照してください。

Python

次のリンクは、IBM Cloudant Python ライブラリーの最新のサポート対象バージョンを提供します。

IBM Cloudant SDK for Python を使用した例については 、API および SDK のドキュメントを参照してください。

Go

次のリンクは、IBM Cloudant Go ライブラリーの最新のサポート対象バージョンを提供します。

IBM Cloudant SDK for Go を使用した例については 、API および SDK のドキュメントを参照してください。

HTTP クライアントを使用したアクセス

IBM Cloud IAM では、リソースまたはサービスに対して要求を実行する前に、IAM API キーを時間制限アクセス・トークンに交換する必要があります。 その後、アクセス・トークンは、サービスに対する Authorization HTTP ヘッダーに組み込まれます。 アクセス・トークンが期限切れになった場合、クライアントは、IAM トークン・サービスからの新しいアクセス・トークンの取得を処理する必要があります。

前述したように、IBM Cloud IAM を使用する場合、最初に IBM API キーを時間制限アクセス・トークンに交換する必要があります。 その後、そのトークンを使用して、 IBM Cloudant APIに対する認証を行います。

Python では、例は以下のようになります。

import time

import requests

API_KEY = "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz"
ACCOUNT = "76838001-b883-444d-90d0-46f89e942a15-bluemix"

def get_access_token(api_key):
    """Retrieve an access token from the IAM token service."""
    token_response = requests.post(
        "https://iam.cloud.ibm.com/identity/token",
        data={
            "grant_type": "urn:ibm:params:oauth:grant-type:apikey",
            "response_type": "cloud_iam",
            "apikey": api_key
        },
        headers={
            "Accept": "application/json"
        }
    )
    if token_response.status_code == 200:
        print "Got access token from IAM"
        return token_response.json()['access_token']
    else:
        print token_response.status_code, token_response.json()
        return None

def main(api_key, account):
    access_token = None
    while True:
        if not access_token:
            access_token = get_access_token(api_key)

        if access_token:
            response = requests.get(
                "https://{0}.cloudant.com/_all_dbs".format(account),
                headers={
                    "Accept": "application/json",
                    "Authorization": "Bearer {0}".format(access_token)
                }
            )
            print "Got Cloudant response, status code", response.status_code
            if response.status_code == 401:
                print "Token has expired."
                access_token = None

        time.sleep(1)

if __name__ == "__main__":
    main(API_KEY, ACCOUNT)

Cloudant での IAM IP 許可リスティングの使用

IBM Cloudant を使用している場合は、IAM IPアドレスアクセス制限を有効にすることができます。

IAM IP アドレス・アクセス制限を有効にするには、 IBM Cloudant サービスが引き続き機能するように Cloud Identity and Access Management (IAM) IP 許可リスト が構成されていることを確認する必要があります。 IAM は、 IBM Cloudant が、IAM 資格情報を渡す IBM Cloudant API に対する要求を認証するとき、および IAM を使用して認証するように構成された 複製 ときに使用されます。

IAM トークンは、 最大 60 分まで有効です。 これは、IAM IP 許可リスティングに対する変更が、この検証期間が満了するまで完全には有効にならない可能性があることを意味します。これは、許可リスティングが強制されるのはトークンの作成時のみであるためです。

ネットワーク・ゾーンの作成

IBM Cloudant を IAM アクセス・リストに追加するには、まず IBM Cloudant サービスを含む ネットワーク・ゾーン を作成する必要があります。

ネットワーク・ゾーンを作成するには、以下の手順を実行します。

  1. IBM Cloud コンソールで**「管理」** > **「コンテキスト・ベースの制限 (Context-based restrictions)」をクリックし、「ネットワーク・ゾーン」**を選択します。
  2. 「作成」 をクリックします。
  3. 固有の名前 (例: cloudant-network) を入力し、オプションで説明を入力します。
  4. Reference a service の下で、サービス・タイプ IAM Services およびサービス IBM Cloudant を選択します。 「追加」 をクリックして、 IBM Cloudant IP アドレスをネットワーク・ゾーンに関連付けます。
  5. **「次へ」**をクリックしてネットワーク・ゾーンを確認します。
  6. 「作成」 をクリックします。

IAM IP 許可リストでのネットワーク・ゾーンの参照

上記で作成した ネットワーク・ゾーン ( cloudant-network) を IAM IP 許可リストで使用できるようになりました。

  1. IBM Cloud コンソールで**「管理」** > **「アクセス (IAM)」をクリックし、「設定」**を選択します。
  2. アカウントセクションから、 IPアドレスアクセス設定を有効にします。
  3. Allowed IP addresses フィールドに、上で作成したネットワーク・ゾーンの名前 ( cloudant-network など) を追加します。
  4. 保存 をクリックします。

役割とアクション

以下の表には、IBM Cloudant の IAM 役割およびアクションの完全なリストと、どのアクションが各 IAM システム役割に許可されるのかを示すマッピングが含まれています。

IBM Cloudant の役割

次の表は、IBM Cloudant に使用可能な IAM サービス役割と、それぞれの簡単な説明を示しています。

IBM CloudantのIAMサービスロール。
ロール 説明
Manager すべてのエンドポイントにアクセスし、インスタンスに関するすべての管理機能 (データベースの作成、容量の変更、データおよび索引の読み取りと書き込み、ダッシュボードへのアクセスなど) を実行できます。
Writer すべてのデータベースおよび文書の読み取りと書き込みを行うことができますが、索引を作成することはできません。
Reader すべてのデータベースおよび文書を読み取ることができますが、新規文書の書き込みおよび索引の作成を行うことはできません。
Monitor モニタリング・エンドポイント (_active_tasks エンドポイントや複製 _scheduler エンドポイントなど) を読み取ることができます。
Checkpointer 複製checkpointer _local 文書を書き込むことができます。 複製中にソース・データベースで必要です。

なお、管理者はリーダーとライターのすべてのアクションを含んでおり、ライターはリーダーのすべてのアクションを含んでいます。

IBM Cloudant アクション

次の表では、使用可能な IAM アクションおよび役割について説明します。 微細化された許可のため、ManagerReaderWriterMonitor、またはCheckpointerという役割を使用できます。

Manager 以外の IAM 役割 (例えば、ReaderWriterMonitorCheckpointer など) を使用する場合、従来の資格情報を使用するユーザーに過度のアクセス許可を与えるのを避けるため、IAM のみ使用 を使用する必要があります

マネージャー・ロールのアクションとマッピング
メソッド エンドポイント アクション名
GET/PUT /_api/v2/db/<path:db>/_security cloudantnosqldb.sapi.db-security
GET /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.read
PUT /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.write
GET /_api/v2/user/current/throughput cloudantnosqldb.current-throughput.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
POST /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.write
POST /_api/v2/api_keys cloudantnosqldb.sapi.apikeys
GET/POST /_api/v2/user/config/cors/ cloudantnosqldb.sapi.usercors
GET/PUT /_api/v2/user/plan cloudantnosqldb.sapi.userplan
GET /_api/v2/user/ccm_diagnostics cloudantnosqldb.sapi.userccmdiagnostics
GET /_api/v2/user/last_activity cloudantnosqldb.sapi.lastactivity
GET /_api/v2/support/tickets/$CASEID/files/$ATTACHMENTID cloudantnosqldb.sapi.supportattachments
GET/POST /_api/v2/support/tickets cloudantnosqldb.sapi.supporttickets
GET/PUT/DELETE /_api/v2/support/tickets/$CASEID cloudantnosqldb.sapi.supporttickets
GET /_api/v2/user cloudantnosqldb.sapi.userinfo
GET /_api/v2/usage/data_volume および /_api/v2/usage/$YEAR/$MONTH cloudantnosqldb.sapi.usage-data-volume
GET/HEAD / cloudantnosqldb.account-meta-info.read
GET/HEAD /_active_tasks cloudantnosqldb.account-active-tasks.read
GET/HEAD /_replicator cloudantnosqldb.replicator-database-info.read
GET/HEAD /_replicator/$DOCUMENT cloudantnosqldb.replication.read
GET/HEAD /_scheduler/jobs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_scheduler/docs cloudantnosqldb.replication-scheduler.read
POST /_replicate cloudantnosqldb.replication.write
POST /_replicator cloudantnosqldb.replication.write
PUT/DELETE /_replicator cloudantnosqldb.replicator-database.create
PUT/DELETE /_replicator/$DOCUMENT cloudantnosqldb.replication.write
GET/HEAD /_up cloudantnosqldb.account-up.read
PUT /$DATABASE/ cloudantnosqldb.database.create
DELETE /$DATABASE cloudantnosqldb.database.delete
POST /$DATABASE/_design_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo_info cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_info/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID/_search_disk_size/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID/_search_info/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_index/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design_docs cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
PUT /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
COPY /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
DELETE /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
PUT /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.design-document.write
DELETE /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.design-document.write
POST/DELETE /$DATABASE/_index/$FURTHER_PATH_PARTS cloudantnosqldb.design-document.write
GET/HEAD /$DATABASE/_security cloudantnosqldb.database-security.read
PUT /$DATABASE/_security cloudantnosqldb.database-security.write
GET/HEAD /$DATABASE/_shards cloudantnosqldb.database-shards.read
COPY (書き込み文書タイプによって異なる) /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read + cloudantnosqldb.design-document.write および/または cloudantnosqldb.local-document.write および/または cloudantnosqldb.data-document.write
GET /_membership cloudantnosqldb.cluster-membership.read
POST /$DATABASE/_ensure_full_commit cloudantnosqldb.database-ensure-full-commit.execute
PUT /_users cloudantnosqldb.users-database.create
GET/HEAD /_users cloudantnosqldb.users-database-info.read
DELETE /_users cloudantnosqldb.users-database.delete
GET/HEAD /_users/$DOCUMENT cloudantnosqldb.users.read
GET/POST /_users/_all_docs cloudantnosqldb.users.read
GET/POST /_users/_changes cloudantnosqldb.users.read
POST /_users/_missing_revs cloudantnosqldb.users.read
POST /_users/_revs_diff cloudantnosqldb.users.read
POST /_users/_bulk_get cloudantnosqldb.users.read
PUT/DELETE /_users/$DOCUMENT cloudantnosqldb.users.write
POST /_users/_bulk_docs cloudantnosqldb.users.write
POST /_users/ cloudantnosqldb.users.write
GET/HEAD /_uuids cloudantnosqldb.cluster-uuids.execute
POST /$DATABASE/ cloudantnosqldb.data-document.write または cloudantnosqldb.design-document.write または cloudantnosqldb.local-document.write
POST /$DATABASE/_bulk_docs cloudantnosqldb.data-document.write および/または cloudantnosqldb.design-document.write および/または cloudantnosqldb.local-document.write
PUT /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
PUT /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
COPY (書き込み文書タイプによって異なる) /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read + cloudantnosqldb.design-document.write および/または cloudantnosqldb.local-document.write および/または cloudantnosqldb.data-document.write
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
ライターロールのアクションとマッピング
メソッド エンドポイント アクション名
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD /_uuids cloudantnosqldb.cluster-uuids.execute
POST /$DATABASE/ cloudantnosqldb.data-document.write または cloudantnosqldb.design-document.write または cloudantnosqldb.local-document.write
POST /$DATABASE/_bulk_docs cloudantnosqldb.data-document.write および/または cloudantnosqldb.design-document.write および/または cloudantnosqldb.local-document.write
PUT /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
PUT /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
POST /$DATABASE/_ensure_full_commit cloudantnosqldb.database-ensure-full-commit.execute
読者役のアクションとマッピング
メソッド エンドポイント アクション名
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
モニターの役割のアクションとマッピング
メソッド エンドポイント アクション名
GET /_api/v2/usage/data_volume および /_api/v2/usage/$YEAR/$MONTH cloudantnosqldb.sapi.usage-data-volume
GET /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.read
GET /_api/v2/user/current/throughput cloudantnosqldb.current-throughput.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
GET/HEAD /_active_tasks cloudantnosqldb.account-active-tasks.read
GET/HEAD /_scheduler/jobs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_scheduler/docs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_up cloudantnosqldb.account-up.read
GET/HEAD /$DATABASE/_shards cloudantnosqldb.database-shards.read
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
チェックポインターロールのアクションとマッピング
メソッド エンドポイント アクション名
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write

使用不可のエンドポイント

次のエンドポイントは、IAM で許可される要求には使用できません。

  • HTTP 再書き込みハンドラー - /db/_design/design-doc/_rewrite/path

設計文書に再書き込みハンドラーを含めることはできますが、ユーザーがそれらのハンドラーを呼び出すことはできません。

  • 更新ハンドラー - POST /db/_design/ddoc/_update/func

設計文書に更新関数を含めることはできますが、ユーザーがそれらを呼び出すことはできません。

トラブルシューティング

IBM Cloudant サービス・インスタンスに対して要求を行うときに IAM を使用して認証できない場合は、次のセクションで示されているようにアカウントを確認してください。

アカウントが IAM 対応であるか確認する

IBM Cloudant ダッシュボードの「概要」部分で、デプロイメント詳細の下に「認証方式」がリストされます。 ここに、使用可能な認証方式がリストされます。