1. はじめに
IBM Cloudにログインするためには一般的にはIBMidを利用するが、IBM Cloud: SAM Federation方式の比較(IBMid Federation v.s. IBM Cloud App ID)にも記載した通り、IBMidを利用せずに外部IdPを使うことも可能である(つまりIBMidのようにメールアドレスをIDとして利用する必要もない)。今回は、そのための連携ツールであるIBM Cloud App IDと、そのApp IDに内包されているユーザー管理ツールのCloud Directoryを使って、ユーザーの作成、ログイン、CLIやClient-to-Site VPNが利用できることまでを確認してみた。
P.S. App IDのユーザーでIBM Cloudのポータルを利用するを参考にさせてもらいました。
2. App IDの注文
https://cloud.ibm.com/catalog/services/app-id
から注文可能。
3. App ID: 利用可能なIdPを選択。
今回は、外部IdPとしてApp IDに付随するCloud Directoryを利用する。よって、Cloud Directory以外は利用できないように構成する。(デフォルトでは、Facebook, Google, Anonymousが有効になっている)。
外部SNSで認証されたユーザーが誰でもIBM Cloudアカウントにログインできてしまうようなことを避けるため、必ずCloud Directory以外は無効にする。IBM Cloud docsにも同様の注意が記載されている。
4. App ID: Cloud Directoryの設定
- ログイン方式は(せっかくIBMidを使わないのだから)、
Email and password
ではなくUsername and password
を今回は選択してみる。 - URLを知っている人が勝手にユーザーを追加できてしまうことを避けるため、
Allow users to sign-up to your app
はNoにする(これは必ずNoにすることをお勧めします)。 - 今回は、勝手にアプリから勝手にパスワードを変更したり、ユーザー情報を編集させたくないので、今回は
Allow users to manage their account from your app
もNoにする。
5. Default IDP URLの構成
IBM Cloud Portalの Manage -> Access(IAM)-> Identity providers
もしくはhttps://cloud.ibm.com/iam/identity-providers
にて構成。
IBM Cloud Portalにて、このApp IDを登録する。まず、最初にDefault IDP URLを構成する。App IDで認証する際には、https://cloud.ibm.com
ではなく、このhttps://cloud.ibm.com/authorize/xxxx
というURLを使って認証する。よって、このxxxx
はアカウント固有の識別子となる。
6. IBM CloudのIdentity Providerとして上記で作成したIBM Cloud App IDを登録
IBM Cloud Portalの Manage -> Access(IAM)-> Identity providers
もしくはhttps://cloud.ibm.com/iam/identity-providers
にて構成。
Create
を選択して、今回注文したApp IDインスタンスを登録する。
7. App ID: Cloud Directoryでのユーザーの作成
8. ユーザーへの動的な権限の追加
今回はClient-to-site VPNのための権限を動的に追加する構成を追加した。ユーザーが初回ログインするまで、アカウントにユーザーは追加されないのであらかじめ静的に権限を付与しておくことはできない。App IDで連携されたユーザーに動的に権限を付与しておくために、IBM Cloud: App IDのユーザーに動的に権限を設定するを参考にして動的ruleを追加する。
(運用的には手間になるが、ユーザーが初回ログインした後に、IAMで権限を付与しても良い。テスト・検証目的ならこのやり方でもいいかもしれない)
9. App ID ログイン画面のカスタマイズ
タブ名やフッターノートは簡単に変更できるが、ロゴはUIから変更できなかった。IBM Cloud: App IDのログイン画面にロゴをアップロードする方法を参考に、お好みでやってください。分かりやすくするため、私は変更しておきました。
10. Customer Portalへのログインテスト
App ID連携したIDPにアクセスする際には、https://cloud.ibm.com
ではなく、以下のいずれかを利用する。
-
セクション6で
Set as the default
にチェックが入れているならばhttps://cloud.ibm.com/authorize/xxxxx
でアクセス可能。 -
セクション6で
Set as the default
にチェックが入れていない場合には、https://cloud.ibm.com/authorize/xxxxx
にアクセスした際に、
のような選択肢が出るので、ここで該当のApp IDを選択しても良い。 -
もしくは直接
https://cloud.ibm.com/authorize/xxxxx/<Realm ID>
でアクセスしても良い。
いずれにしても、上記のいずれかを選択することで、以下のようにApp IDで構成されるログイン画面に転送される。
認証が完了すると、IBM Cloudポータルにログインできる。
11. CLIでのログインテスト
IBM Cloud: 認証用passcodeの取得方法で紹介した通り、App ID連携されたユーザーでもログイン可能。
12. Client-to-Site VPNユーザーの検証
今回は、Client-to-Server VPNにて、「ユーザーIDとパスワード」を選択している際の検証である(クライアント証明書方式であれば、そもそもApp ID連携しているかどうかに関係なく成功できてしまうに決まっているので)。
- passcodeを取得するIBM Cloud: 認証用passcodeの取得方法にて取得可能。
- 認証時に今回Cloud Directoryで作成したユーザーのユーザー名を入れる(IBMidではないためメールアドレスではない!)。パスワード欄には上記で取得したpasscodeを入力。
- 無事ログインできた。Client-to-Server VPNの接続履歴からも確認可能。
VPC上のサーバーにもPC端末から接続できる。
syasuda@MacBook ~ % ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: icmp_seq=0 ttl=63 time=82.822 ms
64 bytes from 10.0.0.4: icmp_seq=1 ttl=63 time=125.507 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=63 time=170.078 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=63 time=216.251 ms
^C
--- 10.0.0.4 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 82.822/148.665/216.251/49.744 ms