IBM cloud: MFAのセットアップ方法とCLIへの影響

（追記事項）

- CLIにおいてID/Password方式がデフォルトで無効にされる日程は、2023年4月30日から2023年5月3日に延期されたようです。
- https://cloud.ibm.com/iam/overview にて、以下のような画面が現れるようになったようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/2ca5be9e-52db-2887-72be-476bc7dbcaa8.png)


# 1. はじめに

以下の内容によると、~~2023年4月30日~~2023年5月3日より、IBM Cloudにおいては

1. 今後は単なるID/Password方式ではなくMFA（二要素認証）の利用が推奨される。
2. 少なくともCLIに関しては単純なID/Password方式でのログインを新規アカウント・既存アカウントに寄らず、デフォルトで無効にする（リスクを受け入れて、変更することも可能）。CLIに関しては、今後はAPI Key/`-sso`オプション/MFAのいずれかの利用が推奨。

というセキュリティー方針のようだ。

参考情報

- [Announcement: Identity and Access Management - upcoming changes to multifactor authentication (MFA) settings](https://cloud.ibm.com/status/announcement?query=Identity+and+Access+Management+-+upcoming+changes+to+multifactor+authentication+%28MFA%29+settings)
- [An extra layer of security for users that don't use MFA](https://cloud.ibm.com/docs/overview?topic=overview-whatsnew#overview-29march23)
- [Disabling CLI logins with only a password](https://cloud.ibm.com/docs/account?topic=account-enablemfa&locale=en#disabling-cli)


本稿では、どうやってMFAを有効にするのか、MFAを有効にした際のCLIでのログインはどうなるのかをまとめてみたい。なお、IBM Cloudのコンソールから、Manage -> Access(IAM) -> Settings -> Authenticationにて、アカウント全体に一括で適用することもできるが、今回は安全を期して、私のユーザーにだけMFAを適用してみた。

# 2. IBM Cloudポータル上の設定

1. Manage -> Access(IAM) -> Users -> 自分のユーザーを選択。MFAは以下のようになっている。Editボタンを選択。
    - Account default: `None - No CLI`
    - This user: `Account default`
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/3ef168db-afcc-e006-8082-7e194b8dab57.png)

2. `MFA for all users`の中にある`Email-based MFA`を選択して保存。私が利用しているIBMidでは、IdPが有効になっているが、`Require all users to authenticate by using a security passcode that is sent by email, or for a higher level of security, use the TOTP or U2F factors. This applies to users with an IBMid and users that are managed by an external identity provider (IdP).`と書かれているので、この方式であれば適用できそうだ。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/51f6fd3f-8b73-56d2-199c-3b9ef7c90e5b.png)

# 3. ユーザーの個別設定

この設定の後、実際にログインをすると、ユーザーの個別設定が始まる。

1. `https://cloud.ibm.com/login`からIBM Cloudにログインを試行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/c8f58b7b-ec00-bb99-7b26-e58b5c6b66b8.png)
2. 私のアカウントはIdPが有効になっているので会社独自のSSOが実行される。（画面省略）
3. 二要素認証のセットアップが始まる。Startを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/72c5d888-f017-8949-b8f2-140e6057a6d3.png)
4. `Create Verification Method`が1/2となっていることからわかるように、このセットアップでは`SMS`/`E-Mail`/`Voice Call`の3つのうち、2つを登録してその本人確認作業が必要になるようだ。まずは、`E-Mail`を選択し、メールアドレスを記入してSendを押下。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/1fb736ff-4540-f2ab-6d72-6f1807d4b1b0.png)
5. メールにOne-time verification codeが届くので、それを入力してComplete. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/7c9b373d-be4a-96fc-ff91-b678e53852b8.png)
6. 次は`SMS`を選択。自分の電話番号を入れる。国際番号になるので、`080-xxxx-xxxx`の場合は、`+8180xxxxxxxx`となる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e2865594-ec9b-2e7e-0288-367600984523.png)
7. SMSにOne-time verification codeが届くので、それを入力してComplete. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/957bfbe5-5aa6-6439-073d-51c1312e9f35.png)
8. 最後にSetup Authenticationのテスト。E-Mailを選択して、Testを実施。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/c0cc6d42-ac23-26a9-a570-0cb7a63cd356.png)
9.  メールにOne-time verification codeが届くので、それを入力してComplete. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/79eddd2d-4ea4-56dc-cfe7-c48dcbbed2b8.png)
10. セットアップが完了したので、Start ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5177ca05-026b-1ec1-a988-d32c76c551ac.png)
11. MFAの実行。`OTP via Email`が選択されていることを確認して、Send ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/762d97dc-9b5c-6e99-92af-d29082157235.png)
12. メールにOne-time verification codeが届くので、それを入力してComplete. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/1cc64cfb-5277-e056-f248-360f3d48b1e7.png)
13. Customer Portalにログインできた。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/03baaea0-7715-636a-95ad-19c6251dc7f9.png)


# 3.  再度ログアウト、ログインしたらどうなるか？

再度IdPによるSSOが実施され（既に認証済みであればスキップされる）、再度以下の画面による認証が必要となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/8e8e706e-63d8-2b8f-fcd2-17256213b659.png)


# 4. MFAユーザーの確認
- Update Report ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/b9338f64-bd1d-a468-2e25-81b1afd6e93d.png)
- また、Manage -> Access(IAM) -> Settings -> Authenticationにて、以下のユーザーのみがユーザー個別のMFAを設定していることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/b564ded5-e378-d51a-31e6-cefb5b20090b.png)


# 5. CLIでのログインについて


- MFAが有効になっている際のAPI Keyでのログイン

MFAが有効になっていても問題なし。

```txt:API Keyでのログイン
[root@new-syasuda-tok1-vpc1 ~]# ibmcloud login -a cloud.ibm.com --apikey @ibmcloud_apikey_1756623 -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...
OK

Targeted account xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx

Targeted region jp-tok


API endpoint:      https://cloud.ibm.com
Region:            jp-tok
User:              xxxxxxx@xx.xxx.xxx
Account:           IBM (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
Resource group:    No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
CF API endpoint:
Org:
Space:
```

- MFAが有効になっている時の`-sso`オプション利用時のログイン

以下で、`https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode`を表示するために、SSOでのログインとMFAのログインの両方を実施する必要がある。

```
[root@new-syasuda-tok1-vpc1 ~]# ibmcloud login -sso
API endpoint: https://cloud.ibm.com
Region: jp-tok

Get a one-time code from https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode to proceed.
Open the URL in the default browser? [Y/n] > n
One-time code >
```