AWS IAM Identity Center で IBM Cloudポータルにシングルサインオンする

# はじめに
IBM CloudのApp IDは、IBM CloudポータルのIdPになることが可能であり、かつSAMLのSPになることができます。本記事ではAWS IAM Identity CenterのIdPを用いてIBM Cloudのポータルの認証を行います。

※Azureの連携についてはこちら
Qiita：[Azure ADで IBM Cloudポータルにシングルサインオンする](https://qiita.com/takason/items/b23929781d5ef5eef6db)

# 事前準備
以下を用意しておきます。
- [AWS] AWSアカウント
- [IBM Cloud] App ID インスタンス

# 手順
## AWS上での手順 
### IAM Identity Center を管理アカウントで有効化
IAM Identity Centerで検索し、「**Enable**」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/609f3911-9551-ade7-f56f-f074a0a8949b.png)

ダッシュボードが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/388d2382-044e-b666-528a-4d24093ac4b3.png)

:::note warn
IAM Identity Centerは一度に1つのリージョンでのみ有効化することができます。
別のリージョンで有効にするには、まず現在の IAM Identity Center 設定を削除する必要があります。別の地域に切り替えると、AWSアクセスポータルの URL も変わるため、すべての権限セットと割り当てを再設定する必要があります。
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/regions.html#region-data
:::

### アプリケーションの追加
ページ左の「**Application**」タブ→「**Customer managed**」を選択し、「**Add Application**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/4e2478a3-9890-e8b1-117a-a66ea73ff1b2.png)

「**I have an application I want to set up**」、「**SAML2.0**」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/759666bb-0d4e-1c44-beae-653e09865c96.png)

(後述)[「App IDのメタデータの取得」](https://qiita.com/takason/items/1edff3eddeaf9a632613#app-id%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%96%E5%BE%97)で取得したAppIDのメタデータをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/d290fb1f-1eb6-403e-4714-12aadfc0f407.png)

### IdPの情報を取得
「**Action**」→「**Edit Configuration**」にて、以下の３点を保管します。
- IAM Identity Center sign-in URL
- IAM Identity Center SAML issuer URL
- IAM Identity Center Certificate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/3a2712d1-a1f6-3031-c362-d772c927e8ce.png)

### 属性マッピング
「Action」→「Edit Attribute mappings」をクリックし、以下の項目を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/922200ec-8dd7-e19a-25ec-0b9c1734662c.png)

|User attribute in the application	|Maps to this string value or user attribute in IAM Identity Center	|Format	|意味|
|---|---|---|---|
|Subject	|${user:email}	|emailAddress	|App IDのユーザープロファイルの識別に使用（必須）|
|familyName	|${user:familyName}	|basic	|IBM Cloudのユーザープロファイルで名前の表示に使用（姓部分）|
|givenName	|${user:givenName}	|basic	|IBM Cloudのユーザープロファイルで名前の表示に使用（名部分）|
|name	|${user:preferredUsername}	|basic	|App IDのユーザープロファイルで名前の表示に使用|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/35232ef8-87f4-807b-e2b7-61e4d2d86496.png)




### IAM Identity Center にユーザーを作成
「**User**」タブよりユーザーを追加し、「**Next**」をクリックするとグループ設定画面に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/5c2c2652-31fb-77ab-1901-9eaabedafd05.png)

### IAM Identity Center にグループを作成
今回はグループを作成せず進みます。「**Next**」をクリックします。

### 許可セットを作成
「**Permission sets**」→「**Create Permission sets**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/2814e441-978d-c737-f736-f67b1884b5d1.png)

今回は事前定義された許可セットから `AdministratorAccess` を選び作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/64ab26b4-5840-cbac-31e4-9ba763f0b354.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/a388c790-2875-5630-049c-3f84a4962c4f.png)


### AWS アカウントへの許可セットの割り当て
「**Multi-account permissions**」内の「**AWS accounts**」をクリックし、組織のツリービューリストを表示します。次に、`AdministratorAccess` を割り当てる AWS アカウント の横にあるチェックボックスをオンにし、「**Assign users or groups**」をクリックします。組織内に複数のアカウントがある場合は、管理アカウントの横にあるチェックボックスをオンにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/1d3b78da-cec0-cd25-3a75-311945742b69.png)

作成したユーザーを選択し「**Next**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/582b0842-50a0-8fbe-3325-c6a006300e23.png)


許可セットを選択し「**Next**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/4103bba0-e652-ceb9-2d34-eeb42b6bccdd.png)
「**Submit**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/479416f5-d051-166e-b658-9d485473411d.png)

### 作成したユーザーをアプリケーションに割り当て
作成したアプリケーション名をクリックし、詳細を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/55543555-41c9-d9eb-85ef-a62985420554.png)

「**Assign users and groups**」をクリックし、対象ユーザーをアサインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/402e6f9a-b9ea-33b2-d6f5-fec1514b008b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/99cdd86a-5cf2-d861-1b76-7f09cf9ff98c.png)



## IBM Cloudでの手順
### SAML2.0の有効化
作成したApp ID詳細画面の「**Manage Authentication**」をクリックし、「**SAML2.0 Federation**」のスイッチを有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/7a2ac0ff-85f7-d254-28a0-96275c589ba3.png)

### App IDのメタデータの取得
作成したApp ID詳細画面の「**Identity Providers**」→「**SAML2.0 Federation**」をクリック、「**Download SAMLmetadata file**」をクリックしてxmlファイルを取得します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/f60307e8-2feb-2c8a-0a27-cbc95167dd75.png width= 70%>


### App IDにIAM Identity Center SAML IdPを設定
(前述)[「IdPの情報を取得」](https://qiita.com/takason/items/1edff3eddeaf9a632613#idp%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97)で取得したIdPの情報を以下のように入力し、「**Save**」をクリックします。
- Entity ID：IAM Identity Center SAML metadata fileをコピー
- Sign in URL：IAM Identity Center sign-in URL をコピー
- Primary certificate：IAM Identity Center Certificateのpemファイルの中身をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/c9005162-fdfb-2796-8f29-67ff02360dbc.png)


以上の手順が完了していると、App IDの「**テスト**」から、以下のように成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/ce99be51-57af-85d7-09a9-74f17b622bc9.png)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/dee622b8-f495-efa4-2b61-4fbbef005766.png width=60%>

### IdPを設定
「**Default IdP URL**」はログイン時に使用するURLです。必要に応じて編集します。
「**Manage**」→「**Access(IAM)**」→「**Identity Providers**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/7a9e6e5e-f918-f3e5-bfef-74244d9a1e81.png)

未作成の場合は「**Create**」、作成済の場合は右の「**︙**」より以下のように編集し「**Update**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/9caca8ff-413b-dafe-c49a-d4cbac1e5f1f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/210ed240-4b38-6b13-4d7c-79a82088d9e5.png)

以上で設定が完了です。


# テスト
Identity Providersの画面に記載されている「**Default IdP URL**」をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/7ebb164a-39f6-5d3d-c12d-c15ae48d06cc.png)

ブラウザで開き、App IDインスタンスを選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/e5e7a944-d1c1-4c53-24db-e68b0eaaa2c7.png width=50%>

「**Login with aws**」をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/a641021a-0b73-4332-da15-506fc419aec1.png width=50%>

:::note
App IDのログイン画面カスタムについては以下を参照ください。
Qiita: [IBM Cloud: App IDのログイン画面にロゴをアップロードする方法](https://qiita.com/testnin2/items/81b971b60fe33f347089)
:::

AWSのログイン画面が出てくるので、作成したユーザーの `Username/Password` を入力します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/da32b5d2-94d7-d6d1-40c3-a2472bb1b871.jpeg width=70%>



無事IBM Cloudポータルにログインできました！
![Screenshot 2024-02-09 at 15.15.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/0f64ca76-c4ee-37b0-ac0d-2cc84e0bc132.jpeg)