IBM Cloud CLI loginでユーザーIDとパスワードでログインできなくなった場合の簡単な対処方法

IBM Cloudは2023年5月3日よりデフォルトのIDおよびパスワードのみでのログインを無効化する予定です。くわしくはこちらの[ブログ記事](https://www.ibm.com/blogs/solutions/jp-ja/change-cli-idpassword-login/)やIBM Cloudの[通知](https://cloud.ibm.com/status/announcement?query=Identity+and+Access+Management+-+upcoming+changes+to+multifactor+authentication+%28MFA%29+settings)をご覧ください。
CLIを使ってIBM Cloudを操作する場合、ユーザーIDとパスワードでログインする方法は以前より多く使われていますが、この方法が利用できなくなるので、5月3日以降は別の方法を使ってログインできる必要があります。

この記事ではアカウント所有者もしくはアカウントの管理権限をもつユーザーに頼らず、簡単に利用できる方法を示します。


<h2> 何がおきるのか? </h2>


今回のCLIログインに関するデフォルトのセキュリティ設定が強化された後に、CLIログインを行うとおそらく以下のようなエラーメッセージが表示されるようになります。応答コード 403 なので認可されずログインできなかったことを意味します。
最近になってアカウント設定に追加された CLI でユーザー ID とパスワードを使ったログインを禁止する設定を有効にした後に CLI でログインを行った結果なので、 5 月 3 日以降得られるエラーとは少し異なるかもしれません。



```
% ibmcloud login
API endpoint: https://cloud.ibm.com
Region: jp-tok

Email> <IBMidに設定しているe-mailアドレスを入力>

Password>  <パスワードを入力>
Authenticating...
Remote server error. Status code: 403, error code: BXNIM0528E, message: The settings in at least one of your accounts disables you from logging in with username and password. You can log in with user 'ma6ma6@gmail.com' either with an API key or the option --sso.
```
<i>また、`-u`,`-p`といったオプションを使ってユーザーIDとパスワードを使って定期的に何らかのジョブなどを実行することはそもそも推奨されていませんが、そのような使い方をされていた方もジョブが権限のエラーで実行できなくなります。この場合にはapikeyを使う方法に切り替えると良いですが、apikeyをユーザーが作成できない設定になっている場合には権限を持った方による対応が必要です。</i>


<h2> 回避策: GUI コンソールからパスコードを取得してログインを行う </h2>

実はIBM CloudのコンソールにはCLIにログインするためのメニューがあり、それを使ってみます。
IBM Cloudコンソールにログインして、右上のアバターアイコンをクリックして、「CLIとAPIにログイン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83689/5e0ab5fa-11a4-fe13-10a1-d9eb9990f62a.png)


ダイアログに表示されるIBM Cloud CLI用のコマンドをコピーします。
この例に示したパスコードは既に有効期限が切れて無効化されていますので、そのまま掲載していますが、本来は他人と共有してはいけないものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83689/0d1a8ad8-b6eb-d6b5-6371-8f81bbefe61d.png)


コピーしたコマンドに加えてログインしたいリージョンのオプション (東京リージョンの場合 `-r jp-tok`、大阪リージョンの場合 `-r jp-osa`) を付加して実行します。すると今回はエラーにならずログインできたようです。

```
% ibmcloud login -a https://cloud.ibm.com -u passcode -p 8foGQDYJTk -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...
OK

Targeted account ******** ********'s Account (********************************)

Targeted region jp-tok

                   
API endpoint:      https://cloud.ibm.com
Region:            jp-tok
User:              *****************@*****************
Account:           ******** ********'s Account (********************************)
Resource group:    No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
CF API endpoint:   
Org:               
Space:             

```

ログインできていることを確認するためアカウントの情報を表示してみます。ログインしているユーザーがアカウント所有者となっているアカウントの情報について表示しました。ご利用形態によってこのコマンドの結果は異なります。付与されている権限によってエラーで表示できないケースもあります。
```
% ibmcloud account show
Retrieving account ******** ********'s Account of *****************@*****************...
OK
                                    
Account Name:                       ******** ********'s Account
Account ID:                         ********************************
Account Owner:                      *****************@*****************
Account Type:                       STANDARD
Account Status:                     ACTIVE
Linked Softlayer Account:           No linked Softlayer account found
VRF Enabled:                        false
Service Endpoint Enabled:           false
EU Supported                        false
PoC (Commercial Proof of Concept)   false
HIPAA Supported                     false


```

以上になります。

他にもIBM Cloud Shellを使う方法やご自身のapikeyを作成する方法など、IBM Cloud CLIにアクセスする手段はあります。それらはアクセスポリシーの設定によっては利用できないものです。今回はログインできなくてお困りの方がその場で問題を解決できるよう、ポリシーの変更を必要としない違う方法をお示ししました。