QuickSightモバイルアプリからAWS SSOを使ってログインする

# はじめに

QuickSightのモバイルアプリをSP Initiatedな感じでAWS SSO(現IAM アイデンティティセンター)のアイデンティティでSSOログインする手順を記載します。

なお、公式の以下の情報をみると、いっけんQuickSightモバイルアプリからのシングルサインオンができないような印象を受けますが、**実際にはできます**。
https://aws.amazon.com/jp/iam/identity-center/faqs/

> Q: IAM アイデンティティセンターはネイティブなモバイル、デスクトップアプリケーションへのシングルサインオンをサポートしていますか?
> いいえ。IAM アイデンティティセンターはウェブブラウザを通したビジネスアプリケーションへのシングルサインオンのみをサポートしています。

- 上記の「ネイティブなモバイル」という部分が曲者です。一言でいえば「QuickSightモバイルアプリ」のSSO利用は「ネイティブなモバイル」でのSSOではないため、AWS SSOの利用が可能という解釈になります。どういうことかというと、以下の通りです。
    - まず、QuickSightの管理画面で、後述するSP InitiatedのSSOの有効化を行います。
    - するとQuickSightモバイルアプリでは、アプリ起動後のログイン処理時に（多くのスマホアプリのSSOがそうであるように）スマホのブラウザに遷移します。つまりアプリケーションから離れる（「ネイティブなモバイル」ではなくなる）ことになり、「ウェブブラウザを通した」SSOに切り替わるという処理になります。
    - つまり公式が記載していることをQuickSightモバイルアプリ視点で意訳すると、「現在の仕様ではモバイルアプリ内でSSOを完結させることはできない。ブラウザ遷移させれば可能」ということになります。
    - [英語版のFAQ](https://aws.amazon.com/iam/identity-center/faqs/)を見ると、より直感的に理解できます。
        - > IAM Identity Center supports single sign-on to business applications through web browsers only.

- なお、本記事は手順メモです。気が向いたらディティールを付け足して行こうと思います。
    - また、本記事は執筆時点(2023/9/19)の情報です。参考にする際は最新情報をご確認ください。

# 検証環境
- QuickSightはEnterpriseEdtionを東京リージョンで利用しています。
    - SSO自体はStandardEditionでもできるようですが、その他の細かい機能の利用可否については調べていません。
        - https://aws.amazon.com/jp/quicksight/pricing/?nc=sn&loc=4
        - SP InitiatedはEnterPriseEditionのみかもしれないです。(裏取りしてない)
            - https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/setup-quicksight-to-idp.html
                - > Amazon QuickSight Enterprise Edition を通じてサービスプロバイダーが開始するサインインを設定できます

- QuickSightモバイルアプリ
    - スマホはGoogle Pixel系で、OSはAndroid Ver.13 で検証しています。
    - QuickSightモバイルアプリのバージョンは 2.1.22 で検証しています。

- AWS SSO(現IAM アイデンティティセンター)
    - 本検証におけるIdPはAWS SSOです。(SP は QuickSight)
    - AWS SSOはバージニア北部にデプロイしています。

# 事前準備

- 予め AWS SSOにQuickSightをアプリケーションとして登録しておく必要があります。
    - こちらの手順はとりあえず割愛します。参考までの以下の記事などがよいかと思います。
        - https://qiita.com/itsuki3/items/3c9ddf27c4dfb7f0f9f7
        - https://dev.classmethod.jp/articles/iam-identity-center-integration-quicksight/#toc-12
    - 登録済みの場合、AWS SSOログイン後のポータル画面にて、以下のようにQuickSightのアイコンが表示されます。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/74444669-d981-91f3-9ac8-f5c4b1151ff7.png)

- QuickSightモバイルアプリをスマホなどにインストールしてください。
    - https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/using-quicksight-mobile.html



# 設定

## PCのブラウザ

- QuickSightに管理者権限でログインし、管理画面を開きます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/9aa8da08-71b2-774e-316e-906df500ecd8.png)

- 左メニューの「SPがSSOを開始」を選択し、以下の項目を入力した上で、「設定を保存」をクリックします。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/b7fc055f-e6e6-ad74-f3ac-ece510c78430.png)
    - SSO URL
        - ご自身の環境の「AWS アクセスポータルの URL」を入力してください。
            - 例）https://d-xxxxxxxxxx.awsapps.com/start
    - URL パラメータ名
        - RelayState
            - この値で指定したい内容としては、記載されているとおり「認証後にリダイレクトする場所」を指しているので、QuickSightモバイルアプリのURLを伝えたいわけです。
            - 「RealayState」を指定することで、SPつまりQuickSightモバイルアプリが、IdPつまりAWS SSOに、HTTPパラメータとして自身の場所を伝えてくれます。
                - https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/setup-quicksight-to-idp.html
                - https://docs.aws.amazon.com/singlesignon/latest/userguide/howtopermrelaystate.html
            - IdPによってさまざまな設定ができます。以下資料のp.53 - p.60あたりに注意点なども記載されています。
                - https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AmazonQuickSight-SSO_0228_v1.pdf

    - その他、操作上の注意点として、ステータスの「オン」を選択する前に「設定を保存」しておく必要があります。(操作上かなり紛らわしいです)

- 「設定を保存」後、「サービスプロバイダーがシングルサインオン(SSO)を開始しました」のステータスを「オン」に変更します。
    - ダイアログにも記載されていますが、オンに変更したあとはQuickSightモバイルアプリのログインがAWS SSOにリダイレクトされる形になります。
        - つまりこれまでモバイルで「QuickSight管理ユーザ」や「IAMユーザ」でログインしていた人は、それができなくなり(※)、 **AWS SSOのユーザ(実体としてはIAM Role)のみに切り替りますので注意してください。** 
            - ※後述しますがモバイルアプリからのログインにこれらの影響を受けます。ブラウザでのログインへの影響は限定的です。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/2cb51655-2f5a-91fd-de6c-0dbaf3acdbd4.png)
    - 以下はAWS公式資料[Amazon QuickSight におけるシングルサインオンの設計と実装](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AmazonQuickSight-SSO_0228_v1.pdf)からの引用になりますが、3番目の「IAM Role」のみに切り替ります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/35351652-a411-dbfb-d294-711f95f9086e.png)

- 以下のように画面右上に「SSO設定が正常に保存されました」と表示されていればOKです。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/dabfe4af-9338-49d2-032c-1fc01a07b9ff.png)


# ログインテスト

いくつかのパターンでログインを試してみます。

## スマホのQuickSightモバイルアプリからのログイン

まず、スマホのQuickSightモバイルアプリを使用して、AWS SSOでログインできるか試していきます。

### SSO初回ログイン、もしくはQuickSightセッション切れからのログイン

- スマホでQuickSightアプリを起動します。
    - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/d27bd223-b8b6-afd9-b579-6c71a75e286f.png">

- QuickSightアカウント名を入力します。
    - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/36414b43-ec6b-1815-db60-d2c531749dcf.png">

- アプリからブラウザに遷移しました。
    - 「サービスプロバイダーがシングルサインオン(SSO)を開始しました」のステータスが「オフ」の場合は、QuickSightのユーザー名の入力画面に遷移しますが、今回は「オン」となっているためAWS SSOにリダイレクトされています。
    - ユーザー名を入力します(AWS SSOのユーザ名)
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/bc502aba-35c7-f8df-c8bd-53d9e0459fba.png">

- パスワードを入力します(AWS SSOのパスワード)
    - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/222e8283-1b8c-df2d-9709-9e86412a9fa1.png">

- MFAコードを入力します(AWS SSOに設定済みの場合)
    - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/cf2d03d8-aa38-0d8e-f12f-55688f490ecf.png">

- AWS SSOのポータル画面に遷移しました。QuickSightアイコンを選択します。
    - <img width="300" alt="[image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/82c068c2-bb89-a92e-b355-3429ac8bb122.png">
    - すでにAWSのIAMロールを使って、e-mailアドレスを指定したログインを済ませている場合は、QuickSight側にプロファイルができていますので、以下の画面のあと、QuickSightアプリに遷移できます。
    - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/d80bef2e-7e89-54ed-39e8-e50debe4ea1b.png">
    - 初回ログインの場合は、セルフサインアップの画面が表示されますので、e-mailアドレスを入力して該当のIAMロールでのログインをセットアップしてください。
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/a21fdc39-a5a6-ff26-a55f-0b5880bad584.png">



### AWS SSOセッション継続中のログイン

 - AWS SSOのセッションは設定によりけりですが、最大で12時間に設定できます。
     - QuickSightモバイルアプリで一度SSOセッションのログインまで実施しておけば、セッションが続くかぎりはSSOのログインをスキップできます。
 
    - １. QuickSightモバイルアプリの起動
    - ２. QuickSightアカウント名を入力します。
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/36414b43-ec6b-1815-db60-d2c531749dcf.png">
    - ３. アプリからブラウザ画面に遷移します。SSOの情報入力がスキップできるので、自動でサインインが成功します。「QuickSightアプリを起動」をクリックします。
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/d80bef2e-7e89-54ed-39e8-e50debe4ea1b.png">
    - ４. QuickSightログイン画面が表示される
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/a145ac04-33a1-da67-7829-22275a485860.png">

### バイオメトリクス認証が設定済みの場合のログイン

 - また、QuickSightの認証としてスマホ機能のバイオメトリクス認証(指紋タッチなど)を予め設定しておくことができます。設定済みの場合、初回にQuickSightの「QuickSightアカウント名」を入力することにより、次回以降はバイオメトリクス認証で「QuickSightアカウント名」の入力や「SSOのユーザ・パスワード・MFA」をスキップすることができます。

- 上記の条件下においては、2アクションでQuickSightログイン画面まで遷移できます。
    - １. QuickSightモバイルアプリの起動
    - ２. バイオメトリクス認証
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/9a228bb0-0715-4e55-7e7b-a57f3eb31dd7.png">

    - ３. QuickSightログイン画面が表示される
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/a145ac04-33a1-da67-7829-22275a485860.png">

- 追記(2023/9/19)
    - 上記の2ステップ認証は、SSOセッションが切れたであろう12時間後(私の設定)でも可能でしたし、スマホのOS再起動後でも可能でした。かなり長い期間継続できるようです。
    - 追記(2023/9/20)
        - スマホのセッション有効期間については、QuickSight側で設定できるようです（つまりAWS SSOのセッション時間に依存しない)。以下はデフォルト値です。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/b92dc0c8-3e79-ae5a-7899-b9f17ded9076.png)



### [おまけ] モバイルアプリからのダッシュボードの見栄え

- あらかじめダッシュボードを作成または共有しておくことで、モバイルアプリから各データを閲覧することができます。
    - スマホなので操作性には限界がありますが、スマホでも意義のあるビジュアルを選ぶことで、それなりにキレイに表示してくれます。
    - ダッシュボード選択画面
        -  <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/a24c5a71-e2e6-566f-ccde-d1d311c2e143.png">
    - 円グラフ
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/82c52af3-d68b-ad0d-0089-5e4703249e4d.png">
    - ピボットテーブル
        - <img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/fd8e6a10-1baf-b84e-7ed0-201791c95e1d.png">


## PCのブラウザからのログイン
### QuickSight専用ポータル(通常)

上記のようにSP InitiatedなAWS SSOログインが設定されている状態で、PCのブラウザからQuickSight専用ポータルを開くとどうなるのでしょうか？

- ブラウザでQuickSight専用ポータルを開きます。
    - https://quicksight.aws.amazon.com/sn/auth/signin
- QuickSightアカウント名を入力します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/cfaf7666-57f2-7ee2-31bd-dcd7873d8ed3.png)
- 一瞬、AWS SSOポータルにリダイレクトされます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/7fd8e9ac-40cb-cb46-35b8-522a27e73020.png)
- AWS SSOのログイン画面に遷移します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/dd1faffe-9669-b1ab-b0c0-5f354c679bc7.png)

上記をみるとおり、QuickSight専用ポータルはブラウザにおいても強制的にAWS SSOにリダイレクトされます。
これによりQuickSight管理ユーザでのログインの道が絶たれたようにみえますが、ブラウザの場合以下の回避方法があります。

### QuickSight専用ポータル（AWS SSOバイパス)

- QuickSight管理画面には以下のとおり、バイパス用URLが記載されています。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/2c9a2c20-bea0-3238-202d-3833a670aeb8.png)
    - 東京リージョンの場合、以下のURLになります。
        - https://ap-northeast-1.quicksight.aws.amazon.com/sn/auth/signin?enable-sso=0
- PCのブラウザから上記URLを叩いてみます。
- QuickSightアカウント名を入力します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/9b10e748-ef47-f37e-b2d2-e5bb8adb1319.png)
- QuickSightユーザ名入力画面に遷移します。QuickSight管理ユーザ名を入力します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/5759b76e-2d3a-f300-f8a6-27cc31f4e8c8.png)
- QuickSight管理ユーザのパスワードを入力します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/ca29632b-96d1-9cc2-d406-cb3883daad0b.png)
- QuickSight管理ユーザでログインできました。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/d9514e83-a886-424f-2c96-2ceed72e476b.png)

上記のとおり、バイパス用URLを使えば、QuickSight管理ユーザでもログインができます。
(とはいえ、当然AWS SSOのIAM Roleとは別ユーザ扱いではありますが)

### IAMユーザによるQuickSightへのログイン

なお、IAMユーザによるQuickSightへのログインを行う場合は、従来どおり以下の流れで利用することができます。
- ブラウザからAWSマネジメントコンソールにログイン
- サービスとしてQuickSightを選択する



# 自動プロビジョニングの簡易化

- そのほかQuickSightには「Email Syncing for Federated Users」という設定もあります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/2abe7a76-8733-3c40-277c-0a6e88e79f9b.png)

- 上記はAWS SSOでログインする際の自動プロビジョニングにおいて、AWS SSO側で登録しているe-mailアドレスを自動で入力してくれる機能のようです。
    - https://docs.aws.amazon.com/quicksight/latest/user/jit-email-syncing.html
    - https://dev.classmethod.jp/articles/quicksight-sso-id-f/
    - こちらは、気が向いたら検証し追記しようと思います。

# おわりに

- 本記事では「QuickSightモバイルアプリからAWS SSOを使ってログインを簡素化する」ことを目的とした書き方にしています。
    - しかしながら上記を目的とした場合、下表のとおり、SP InitiatedなSSOをQuickSightで有効化することによる、モバイルアプリにおけるデメリットが生じます。
        - 下表内「マネコン」とは「AWSマネジメントコンソール」を指します。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538058/3f69c8f1-26a6-9c88-9d62-9f70a2592c51.png)
        - メリット
            - 「QuickSightモバイルアプリ」からAWS SSOのQuickSightに紐づいたIAM Roleでのログインが可能になる
        - デメリット
            - 「QuickSightモバイルアプリ」から「IAMユーザ」や「QuickSight管理ユーザ」を利用したログインが不可能になる
                - ログインの一本化という観点ではデメリットではなくメリットかもしれませんが、アプリの実装上、選択可能としてほしいです。
                    - なぜなら現状では各認証タイプ間でのQuickSightリソース移植は大変ハードルが高いため、各認証タイプを併用していくことが現実的だからです。


以上です。