9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IBM Cloud IAM対応のためのtips

Last updated at Posted at 2018-08-14

はじめに

現在IBM Cloud上のWatson APIは認証方式が順次IAM方式に移行されつつあります。
しかし、その場合どうすればいいかの情報が少ないです。。。
その対策としての自分用の備忘録を投稿しておきます。
中身はFAQ形式で書いていきたいと思います。

(2018-09-06 FAQ追記)

コマンドラインが使えないけれどどうすればいいの

従来のCFコマンドの代替となるのは ibmcloud コマンドです。
ダウンロードはibm cloud downloadから行って下さい。

ibmcloudコマンドのオプションは

ログインは

$ ibmcloud login

で行います。
この他のオプションは

$ ibmcloud help

で確認して下さい。

(2018-08-17追記)
CFコマンドとの対応表を作ってみました。
チートシート ibmcloud vs CF コマンド対応表

IAM方式で作ったWatsonサービスをCloud Foundryのアプリケーションとバインドできない

何を隠そう、私が一番悩んだのがこのことです。
これが最善の方法かどうかは不明ですが、とりあえず見つかった対応策がこちら。

まず、次のコマンドで、Watsonサービスの名称を確認します。

$ ibmcloud resource service-instances
名前                            場所       状態     タイプ             タグ   
Cloud Object Storage-gj         global     active   service_instance      
COS-20180322-1                  global     active   service_instance      
watson-vision-combined-sh       us-south   active   service_instance      
Watson Studio-ng                us-south   active   service_instance      
ibmanalyticsengine-tz           us-south   active   service_instance      
pm-20-fs                        us-south   active   service_instance      
language-translator-if          us-south   active   service_instance      

例えばこの中のpm-20-fsをCloud Foundryアプリから利用したい場合、以下のエイリアス定義を行います。

$ ibmcloud resource service-alias-create  pm-20-fs --instance-name pm-20-fs

これで、例えば次のような cf servicesコマンドで作ったサービスがちゃんと見えるようになります。

$ cf services
名前                             サービス                         プラン                           バインド済みアプリ                                  最後の操作
(途中略)
pm-20-dm                         pm-20                            lite
pm-20-fs                         pm-20                            lite 

あとは、いつものように cf bind-serviceコマンドで、Cloud Foundry アプリと作ったサービス(pm-20-fs)のバインドを行うことが可能です。

APIを呼び出すときのCredentailsはどうなるの

アプリケーションからWatson APIを呼び出すときは、developers-cloudのライブラリを利用することをお勧めします。そうすることで、認証に関する実装のややこしいところは隠蔽されて、次のように簡単な変更で済むようになります。

インスタンスを生成する際、従来の引数はversion, username, passwordだったのですが、IAM方式の場合、これがversion, iam_apikeyに変わります。
(後者は通常エンドポイントURLもデフォルトから変更になるので、これもセットと考えていい)

Node.jsの場合

従来

var DiscoveryV1 = require('watson-developer-cloud/discovery/v1');

var discovery = new DiscoveryV1({
    version: '<version_date>',
    username: '<username>',
    password: '<password>'
  });

IAM対応版

var DiscoveryV1 = require('watson-developer-cloud/discovery/v1');

const discovery = new DiscoveryV1({
    version: '<version-date>',
    url: '<service_url>',
    iam_apikey: '<iam_api_key>'
});

Pythonの場合

従来

from watson_developer_cloud import DiscoveryV1

discovery = DiscoveryV1(version='2017-10-16', 
      username='<username>', 
      password='<password>')

IAM対応版

from watson_developer_cloud import DiscoveryV1

discovery = DiscoveryV1(version='2017-10-16',
                        iam_api_key='<iam_api_key>')

Node-REDから使う場合はどうしたらいいか

上で説明した(username, password)から(iam_apikey, endpoint_url)にcredential用パラメータのセットが変わるという考えは同じです。
画面については、別記事 IBM Cloudの基本 -サービスの作成から資格情報の取得まで- に載せましたので、こちらを参照して下さい。

curlコマンドから使う場合はどうしたらいいか

今回の変更に伴い、内部的には

  • APIキーからトークンを発行
  • トークンを引数に本当のAPIを呼び出す
    ということが行われるようになりました。
    上に説明したようにライブラリやNode-RED経由でアクセスすると、この挙動の違いはわからないのですが、curlコマンドの場合はもろに影響してしまいます。
    頑張ればできなくはないのですが、IAMサービスに対してはcurlコマンドは極力使わないことがお勧めです。
    私も、昨年はcurlコマンドでテストということを結構行っていましたが、今はテストはすべてWatson Sudio上のJupyter Notebook + Python3で実行するようにしています。

どのサービスがIAM化されているの?

現在移行中なので、日々変化していきますが、2018-09-06時点での調査結果は以下の通りです。
(Watsonサービスに限定)

米国東部: 全サービスIAM化済みです。
シドニー: NLCを除いてIAM化済みです。

Knowledge Catalog, Knowledge Studio, Machine Learning, VR, Watson Studio
全サイトでIAM化済みです。

Language Translator: 英国を除いてIAM化済みです。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?