TrustLoginでAlibaba Cloud (ロールベースSSO) のSAML認証を使ってみる

# ゴール
複数のAlibaba Cloudアカウントがありまして、それぞれのアカウントで個別にRAM userを作成し利用するという方法もありますが、アカウント数とRAM user数が増えると、idとパスワードの管理は非常にややこしいので、RAM userを作成せずに、SSOが使えないかを検証してみる。

:::note info
Alibaba Cloudでは`AWS SSO`みたいなサービス`CloudSSO`という複数のAlibaba CloudアカウントとアプリケーションへのSingle Sign-Onアクセスの一元管理を行うサービスがありますが、現在は東京regionがまだ使えません。
ということで、今回はGMO社のTrustLoginでやってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/436bd6a3-e397-1839-6d91-36b0eb5ecc9c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d26bbcda-dfce-3b6f-44ac-87e7905dbad1.png)
:::

https://trustlogin.com/

# 前提条件
- すでにGMOアカウントを持っている
- すでにAlibaba Cloudのアカウントを持っている

# 関連知識

https://www.alibabacloud.com/help/ja/resource-access-management/latest/sso-overview

- identity provider (IdP)	
アイデンティティ管理サービスを提供します。 一般的に、IdP は次のタイプに分類されます。
    - Microsoft Active Directory フェデレーションサービス (AD FS) や Shibboleth など、ローカルにデプロイされた IDP
    - AWS Azure AD、Google G Suite、Okta、OneLogin などクラウドベースの IDP

- service provider (SP)	
 SP は IdP が提供するユーザー情報を使用します。今回のケースではAlibaba CloudはSPになります。

- ロールベースSSO
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ecf25d00-8a5e-1234-71e4-3c9b89db2624.png)
Alibaba Cloud がサービスプロバイダー (SP) であり、企業システムが ID プロバイダー (IdP) です。 ロールベース SSO により、企業は IdP から Alibaba Cloud へユーザーを同期させることなく、IdP でユーザーを管理でき、従業員は RAM ロールを使用して Alibaba Cloud にログインできます。


- ユーザーベースSSO
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/689baba7-52ed-b22a-992c-14ca7eb302e6.png)
Alibaba Cloud がサービスプロバイダー (SP) であり、企業システムが ID プロバイダー (IdP) です。 ユーザーベースSSO により、従業員は Alibaba Cloud に RAM ユーザーとしてアクセスできます。

ロールベースSSOはAlibaba Cloud側で該当のRAM userの作成＆管理が不要です。
ユーザーベースSSOはIdPからのユーザー情報をRAMに同期(つまりRAM userが自動的に作られる)ようです。
基本的にロールベールSSOのほうがよいでしょう。


# 手順
## 1. TrustLogin側の設定
- TrustLoginにログインし、`管理ページ` > アプリ」メニューを開き、画面右上の`SAMLアプリ登録`ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/de3b2dbc-7517-b409-4741-4d2b51390be7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/31c9cc97-0eed-dbb0-15c1-19a62d37ad2d.png)

- `アプリケーション名`、`アイコン`(任意)を登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6eb948b1-f1c8-0f46-0f48-d10c6416b840.png)

- `IDプロバイダーの情報`のメタデータをダウンロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d5d006da-6220-59fd-66ac-f607e248e2ed.png)
ここでAlibaba Cloud 側の設定に移ります。別ウィンドウでAlibaba Cloudのコンソールに管理者アカウントでログインしてください。

## 2. Alibaba Cloud の設定
### 1. RAMでSSO新規作成
- Alibaba CloudのRAMコンソールで`SSO` > `ロールベースのSSOログイン方式`を開き、`SAML`タブの`IdPの作成`ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a181f7ac-5c22-3980-550e-2a61632a52bf.png)
- `IdP 名`に任意の名称、メタデータファイルの`アップロード`ボタンによりTrustLoginからダウンロードしたメタデータファイルをアップロードし、`OK`ボタンで保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/88f6b961-e46c-d7e7-dbf6-c23d7d253f75.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c5414b22-1732-6f2e-5019-634df0d76a7e.png)

- 作成したIdP名をクリックし、`ARN`の値を控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6dbc2e9a-30d6-f32e-204e-cec682ddb714.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/84a80de7-4433-bca3-b1e5-85295401d6e2.png)

### 2. 新規RAM Roleの作成
- `アイデンティティ` > `ロール`を開き、`ロールの作成`ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/777aefeb-3af6-a26f-27f2-abc7c8a974b5.png)
- TrustLoginという外部のIdPを利用するため`IdP`を選択し、`次へ`で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c3d3481f-3784-14a6-8416-637834e07527.png)
- `RAMロール名`に任意の名称、`IdPタイプ`は`SAML`を選択、`IdPの選択`で先程作成したIdPの`TrustLoginSSO` を選択 し、`完了`ボタンで保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a1691f40-d815-6138-b6bb-8587f184654d.png)
- `RAMロールの権限付与`を押下し、RAMロールに権限付与するポリシーを選択し、`OK`ボタンを押下します。
:::note info
セキュリティ面を考える場合は必要最小限の権限のあるポリシーを付与したほうがよいですが、今回は管理権限のある`AdministratorAccess`という`システムポリシー`を利用します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/83e60a84-41b7-da3e-b55c-39dd2f73ea6a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/acf5875e-bf41-763e-cce3-9a36b50cf17a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/cbc129d5-2ea2-b9d8-b974-059d10de0c54.png)
- 作成したロール名をクリックし、`ARN`の値を控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/762f8aba-bc79-2af0-3e6f-3d00ce368b62.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/5eb4d113-dc91-3a85-442c-d117459f967e.png)

## 3. 再度TrustLogin側の設定に戻ります
### 1. トラスト・ログインの管理ページの設定 (続き)
1. `サービスプロバイダーの設定`の各項目を以下の通り設定します。

| 項目 | 内容 |
|---|---|
|ネームID用値  |`メンバー`>`email`を選択  |
|エンティティID  |urn:alibaba:cloudcomputing:international  |
|ネームIDフォーマット  |`emailAddress`を選択  |
|サービスへのACS URL  |https://signin.alibabacloud.com/saml-role/sso |

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d10d349f-2a4a-2a13-b091-44b4a4ac0d17.png)

- `SAML属性の設定`の`カスタム属性を指定`ボタン押下し、`SAML属性を追加`ボタンで行(属性) を追加し、以下の通り設定した上で、 `登録`ボタンで保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/2ff73935-6236-8b56-8919-f42774b45103.png)
①:`https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName`
②:`https://www.aliyun.com/SAML-Role/Attributes/Role`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/e9d3315c-9f3b-61e6-24ad-8db29f27dd02.png)

### 2. TrustLoginのユーザーの設定
#### 1. ユーザー自分がマイページで追加する場合
-  `マイページ`で`アプリ追加`ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ec5132f8-01c5-9a30-6864-55b95c4bdba3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/e341416d-39ae-5fd1-df8c-362c958f0eea.png)
- `アプリ登録`画面で`alibaba`で検索し、作成した独自SAMLアプリを選択し、画面右上の`次へ`ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/bde1b300-e0bb-8ce3-f0bb-28a5ba901a12.png)
- `表示名`を変更する場合は入力し、`登録`ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1732d0f7-495a-2dda-ecdf-055286d0e4da.png)
- `マイページ`アプリをクリックし、ログインが成功するかご確認ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/f2fba284-b604-f4c2-c977-7b7f0fb23e08.png)
- Alibaba Cloudのwebコンソール画面が無事理表示できたら、OKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c9bae67f-9f24-4b21-e26c-ca65049706bc.png)

#### 2. 管理者がSSO利用できるメンバーを追加する場合
- `管理ページ` > `アプリ`メニューで作成した独自SAMLアプリを検索しクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/3c7cc083-d0ad-224a-be2b-6f2f18009344.png)
- `メンバー追加`をクリックし、メンバー一覧から追加するユーザーを選択し`登録`ボタンを押して追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/5c29f742-6142-f016-a0ab-c4d9c8ba3d87.png)