【IBM Cloud・CP4DaaS】ログイン・セッション期限、トークン有効期限のデフォルト設定を変更する

# はじめに
本記事では、2023年12月に新機能リリースされたIBM Cloud「ログイン・セッション」のデフォルト時間変更について、その設定手順と留意事項をまとめています。

ここで取り上げるIBM Cloud新機能はCP4Dとも連動しており、その影響で予期せぬセッション・タイムアウトが起こることがあります。そのため、設定内容や変更手順、留意事項をtipsとして整理しています。

併せて、「トークン有効期限」の設定反映状況の確認結果もまとめています。

※いずれの設定も、特定の権限を持ったユーザーのみが設定変更可能です。
設定変更画面にて、以下のような表示が出ている場合は対象外のユーザーであることを意味しています。

:::note warn
権限を持たないユーザーの画面表示
「この設定を表示するためのアクセス権限がありません。 アカウント所有者、または IAM Identity サービスのビューアー以上の役割を割り当てられたユーザーのみが表示できます。」
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/9e74c88d-e21b-dea7-45bd-b785c17a70f8.png)


# ログイン・セッション
本項目では、ログイン・セッションで変更可能な項目とその変更手順、留意事項をまとめています。

ログイン・セッションとは、アカウントのセキュリティー強化を目的に、アカウント・ユーザーにカスタマイズ設定した間隔でログイン資格情報の入力を求めるよう設定します。

セッション期限を変更できる権限ユーザーは以下です。
- アカウント所有者
- すべてのアカウント管理サービスに対するエディター役割または管理者役割
- IAM Identity サービスに対するエディター役割または管理者役割

## 設定項目

「ログイン・セッション」では、以下3項目を設定できます。

### アクティブ・セッション
- ユーザーが資格情報を再入力する必要が生じるまでにアクティブ・セッションを維持できる時間を設定します。
- この設定時間を過ぎると、ユーザーは再びログイン資格情報を入力する必要があります。

| デフォルト | 最小時間 | 最大時間 | 設定単位 |
|:-:|:-:|:-:|:-:|
|  24時間 | 15分  | 720時間  | hh:mm  |


### 非アクティブの継続によるサインアウト
- ユーザーがセッションからサインアウトされて資格情報の再入力を求められるようになるまでのユーザーの非アクティブ時間を設定します。
- この設定時間を過ぎると、ユーザーは再びログイン資格情報を入力する必要があります。

| デフォルト | 最小時間 | 最大時間 | 設定単位 |
|:-:|:-:|:-:|:-:|
|  2時間 | 15分  | 24時間  | hh:mm  |


### 並行セッション数
- アカウント・ユーザーがアクティブにできるログイン・セッションの数を設定します。
- 設定したセッション数を超えると新規セッション立ち上げに失敗し、再試行を促すようなメッセージ等が表示されます。

| デフォルト | 最小数 | 最大数 | 設定単位 |
|:-:|:-:|:-:|:-:|
| 無制限 | 1個  | 無制限  | 無制限、またはN個（N=整数）  |

なお、最大数は「無制限」に変わりありませんが、実数では最大「21億4748万3647個」まで指定できるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/890b0bc2-9b8b-f013-03fd-b0b0c7148a63.png)


## 設定方法
IBM CloudのIAM画面の「設定」からGUIで変更できます。

【IBM Cloud画面】
1. IBM Cloudにログインし、ダッシュボードを開く（https://cloud.ibm.com/）
1. ダッシュボード右上「管理」 > 「アクセス（IAM）」をクリックする
1. 左サイドメニューから「設定」をクリックする
1. 設定画面のうち、「ログイン・セッション」タブを開く
1. 変更した項目横の編集ボタン（ペンマーク、有効期限の編集）をクリックする
1. 入力欄をクリックする
1. 変更したい時間数を入力する
1. 右上の「保存」ボタンをクリックし、設定変更が完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/df71e5a5-d661-1ff1-4e6b-0553542b8635.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/c21c10c2-4b23-30b3-4ab2-4cb7f9465516.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/cfcfe652-94cd-2acb-d5db-d1dd47ff51c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/ab91cfb2-2a11-8ba0-4e9a-7d3d34ae7d25.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/5131f382-e2a9-2cff-3c31-1fd77213644b.png)

【CP4D画面】
CP4D画面からは、以下の手順でIAMページにアクセスできます。（IAMからは上記手順３から同様です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/92f38235-91d4-3680-92c2-af969b454ac2.png)

1. CP4Dのトップページにアクセスし、画面左上のメニューアイコンをクリックする
1. メニューから管理 > アクセス（IAM）をクリックし、IAMページを開く
1. 以下、IBM Cloud画面と同手順

## その他通知・表示画面

### セッション切れ前の事前通知

セッション残り時間5分前に、以下のような通知が表示されます。
「**まもなくセッションの有効期限が切れます** セッションは約5分で終了します。」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/bbc24fca-15e0-e587-a9a3-bb0be5d25503.png)

### セッション切れ後の表示画面
アクティブ・セッションを15分に設定し、時間経過後の画面は以下です。（設定直後15分きっかり、というよりも16分後くらいに自動でログアウトされるイメージです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/c83a522f-b2ad-7478-dec1-b4f2e0e13bbd.png)


### セッション残時間の確認方法

セッション残時間は以下の手順で確認できます。
1. IBM Cloudにログインし、ダッシュボードを開く（https://cloud.ibm.com/）
1. 右上の人型アイコン（アバターアイコン） > プロファイルをクリックする
1. 左サイドメニューからログイン・セッションをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/b06f2a4c-925b-7011-004a-226743b44aee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/dca66578-0ff4-0ae9-bcb2-064835ef239d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/b8394026-ba79-78bf-4791-04f20e5823b8.png)


例えば、アクティブ・セッションを15分で設定したあと3分経過すると「13分残り」と表示されます。（※留意事項１つ目を併せて参照）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/d39e03cd-a650-422f-7b05-ed6f03391d29.png)



### 並行セッション数超過の画面
並行セッション数を1個に制限し、IBM Cloud Consoleとは別にIBM Cloud CLIを起動してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/8c28af69-bf25-2937-2ffe-034611893a3c.png)


CLIの立ち上げに失敗し、ステータスも「取り消し済み」となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/f3582d33-89d4-19be-8855-a32e0bd10156.png)

この状態で、セッション数を無制限に開放すると、CLIの立ち上げに成功し、ステータスも「アクティブ」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/560ae95b-40b5-d6c6-4dd1-93afed51fa62.png)



## 留意事項


### 変更反映のために再ログインが必要
セッション時間を変更した後、実際に設定時間を反映させるためには一度IBM Cloudアカウントからログアウトし、再度ログインする必要があります。（2024年1月時点）

アクティブ・セッションを15分に変更しても、残時間が更新されていません。（アクティブ・セッションのデフォルト24時間vs非アクティブのデフォルト2時間で、残時間は2時間表示）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/9d3b9856-2f4a-b8e3-68e4-bbc44cc56ee2.png)

この問題は、一度IBM Cloudからログアウトし、再度ログインすると問題が解消されることを確認済みです。

:::note warn
ログイン・セッション変更
設定変更後、必ず一度ログアウトし、再びログインしてください。
:::

### 複数環境にアクセスできる場合、一番厳しい制約に準ずる
同一アカウントで複数のIBM Cloud環境にアクセスできる場合、最も厳しい設定が適用されます。
例えば、アクティブ・セッション時間について、環境Aで初期のデフォルト設定（24時間）、環境Bで15分に設定します。その場合、環境Aまたは環境Bいずれでも15,16分経過後にIBM Cloudから自動ログアウトされます。

試しに、環境A、環境Bを2画面で同時観察したところ、同時に自動ログアウトされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/8c7cdcac-2465-91f3-75ee-47c46d4a5b6b.png)

# トークンの有効期限
本項目では、「トークンの有効期限」で変更可能な項目とその変更手順、確認結果をまとめています。

「トークンの有効期限」では、カスタム有効期限値を設定することで、個別のセキュリティー要件を満たすことができます。 

トークンの有効期限を変更できる権限ユーザーは以下です。
- アカウント所有者
- すべてのアカウント管理サービスに対するオペレーター役割または管理者役割
- IAM Identity サービスに対するオペレーター役割または管理者役割

## 設定項目

「トークンの有効期限」では、以下2項目を設定できます。

### アクセス・トークン
- アクセス・トークンの有効期間を設定します。

| デフォルト | 最小時間 | 最大時間 | 設定単位 |
|:-:|:-:|:-:|:-:|
|  60分 | 15分  | 60分 | mm  |


### リフレッシュ・トークン

- リフレッシュ・トークンの有効期間を設定します。

| デフォルト | 最小時間 | 最大時間 | 設定単位 |
|:-:|:-:|:-:|:-:|
|  72時間 | 15分  | 72時間 | hh:mm  |

## 設定方法
ログイン・セッションと同様に、IAMの設定 > ログイン・セッションタブから変更できます。
※ログイン・セッションの設定手順項目を参照してください。

## トークン切れ確認
アクセス・トークンを15分に設定し、API実行でトークン切れになるか、以下シナリオで確認しました。
- Watson StudioのJupyter Notebookでジョブを作成し、API実行する
    - 参考Qiita：[Watson Studio CloudのJupyter NotebookジョブをAPIで外部から起動](https://qiita.com/kawada2017/items/e728d7b318066cef5a93)
- Pythonコードに、bearer_token発行直後に15分間のスリープ処理を挟む

```python:コード例（一部）
params = {}
params['apikey'] = 'your_api_key'
params['project_id'] = "your_project_id"
params['token_url'] = "https://iam.cloud.ibm.com/oidc/token"
params['token_data'] = "apikey=" + params['apikey'] + "&grant_type=urn:ibm:params:oauth:grant-type:apikey"
params['token_headers'] = { "Content-Type" : "application/x-www-form-urlencoded" }
params['url'] = "https://api.jp-tok.dataplatform.cloud.ibm.com" #set your region url

import requests
import time


# IAMのトークン取得
iam_response  = requests.post( params['token_url'], headers=params['token_headers'], data=params['token_data'] )
bearer_token = "Bearer " + iam_response.json()["access_token"]

# スリープ15分
print("15分後に処理を開始します。")
time.sleep(900) 
print("処理が再開されました。")

# 後ろにジョブ実行処理を続けて記述（以下略）
```
実行すると「Invalid Token」、つまりトークン無効のため失敗することが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/81fe9507-174f-fdb6-b0c1-a58b2fe88419.png)

WSジョブ画面を見ると、ジョブがキックされていない状態であることも確認できます。（テスト用に事前に2回ジョブ実行しています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/a3d27635-c97a-6ef6-4e4c-140a1da2e676.png)



ここで、スリープ時間を1分間に変更してみます。
すると、API実行は成功し、WS画面でもジョブキックされ、成功していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/9bd7ee61-c914-03a6-8949-b4ca1f1bd20b.png)

その他、スリープ時間を以下パターンで試したところ、それぞれ次のような結果になりました。

スリープ時間
- 14分00秒（```time.sleep(840)``` ）-> トークン有効
- 14分01秒（```time.sleep(841)``` ）-> トークン有効
- 14分59秒（```time.sleep(899)``` ）-> **トークン切れ**
- 15分00秒（```time.sleep(900)``` ）-> **トークン切れ**
- 16分00秒（```time.sleep(960)``` ）-> **トークン切れ**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638050/41d08421-9e8d-e6ab-3d69-66bdc4ce0fa5.png)

アクセス・トークンの設定時間に応じた 何らかのプログラムを実装する際には、期待する経過時間で無効になるか事前に十分確認されることを推奨します。

# お断り
:::note warn
このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。
:::

# 参考リンク

- [IBM Cloud資料](https://cloud.ibm.com/docs)
- [IBM Cloud 資料/アカウント、リソース、およびアクセス権限の管理/ログイン・セッションの制限の設定](https://cloud.ibm.com/docs/account?topic=account-iam-work-sessions&locale=ja&interface=ui)
- [IBM Cloud 資料/アカウント、リソース、およびアクセス権限の管理/IAM トークンの制限の設定](https://cloud.ibm.com/docs/account?topic=account-token-limit&locale=ja)
- [IBM Cloud Pak for Data/Docs/概説/新機能/新規ログイン・セッションの有効期限が切れ、非アクティブのためにサインアウトする](
https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/whats-new.html?context=cpdaas&audience=wdp#new-login-session-expiration-and-sign-out-due-to-inactivity)
- [IBM Cloud Pak for Data/Docs/管理/プラットフォームの管理/アカウント設定の管理/ログイン・セッションの有効期限の設定](https://dataplatform.cloud.ibm.com/docs/content/wsj/admin/account-settings.html?context=cpdaas&audience=wdp#set-expiration)