search
LoginSignup
8

posted at

updated at

Organization

IBM CloudにおけるIAMトークンの取得方法

1. はじめに

IBM CloudのサービスをAPIで呼び出す際には、IAMトークンが必要になります。よくAPI referenceやIBM Cloud docsにBearer $ACCESS_TOKENとか記載がある箇所です。頻繁に出てくる割には、効率よくIAMトークンを取得する方法がすぐには見つからなかったのでまとめました。

2. ユーザー or Service ID ?

IBM Cloudでは、IAMトークンはユーザーもしくはService IDのどちらかのものを利用することになります。

  • ユーザーは、Customer Portalにログインする際に利用し、IBMidに紐づいています。気をつけなければいけないのは、もしこのユーザーが(チームから抜けたりして)このアカウントからいなくなった場合には、このIDは利用できなくなってしまうということです。もちろん、そういう事態を避けるために特定の人に紐づかない運用用途のユーザーを作成することで代替することも可能ですが、本来ユーザ-はCustomer Portalにログインして使うエンドユーザーを想定しているため、その度にIBMidを取得・管理したり適切な権限を与えて行くのは大変かもしれません。ただし、十分な権限を持っているユーザーが、自身のIAMトークンを使って、開発・検証目的でAPIを実行するのには十分だと思います。
  • Service IDは上記の問題を回避することができます。Service IDとは、サービスを呼び出すことに特化した一種のシステムユーザーのことです。Functional IDとかService IDの作成にはIBMidは不要です。このService IDに対して、様々なアクセスポリシーを設定することで、「あるサービスに対しては読み書きができるが、こちらのサービスに対しては読み取りしかできない」などの操作のみを許可したID管理が可能になります。

3. IAMトークン取得方法

3.1 ibmcloudコマンドを使う

この方法は、自分のユーザーのIAMトークンが取得できます。

$ ibmcloud iam oauth-tokens

実際は、以下のようにしておくと楽だと思います。

改良版
$ iam_token=`ibmcloud iam oauth-tokens | awk '{printf $4}'`
$ echo ${iam_token}

3.2 APIで呼び出す(API Keyが必要)

こちらはより汎用的な方法のため、ユーザーに対してもService IDに対しても利用可能です。

一般的な方法
$ APIKEY=xxxxxx
$ curl -sX POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${APIKEY}" \
  https://iam.cloud.ibm.com/identity/token

ただ、上記だとjsonファイルのままなので読みづらいです。jqコマンドでフォーマットしてあげると使い勝手が上がります。
(CentOS7では、epelを入れればyumで導入できます)

改良版
$ APIKEY=xxxxxx
$ iam_token=`curl -sX POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${APIKEY}" \
  https://iam.cloud.ibm.com/identity/token | jq -r '.access_token' `
$ echo ${iam_token}
private endpointアクセス版
$ APIKEY=xxxxxx
$ iam_token=`curl -sX POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${APIKEY}" \
  https://private.iam.cloud.ibm.com/identity/token | jq -r '.access_token' `
$ echo ${iam_token}

(参考)
https://cloud.ibm.com/docs/account?topic=account-iamtoken_from_apikey
https://cloud.ibm.com/docs/account?topic=account-iamapikeysforservices
https://cloud.ibm.com/docs/account?topic=account-serviceidapikeys

3.3 APIで呼び出す(API Keyを使わずにTrusted Profileを使用)

IBM Cloud: Trusted Profileを使ったVSI for VPCからの安全なAPI/CLI呼び出し方法を参照。

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
What you can do with signing up
8