Amazon QuickSight(以下QuickSight)向けにシングルサインオン環境を構築する機会があったのでメモ。
なお、歴史的経緯から現在のAWS SSOあらためAWS IAM Identity Center(以下Identity Center)がそれなりに複雑な構成になっていたので、そのあたりについても簡単にまとめておく。
やりたいこと
QuickSightとActive Directory(以下AD)でシングルサインオンを行えるようにする。
シングルサインオンは、いわゆるIdP-Initiatedで構成する。
参考:
IdP-Initiated SSO(IdPでログインしてからQuickSightに遷移)
SP-Initiated SSO(QuickSightログイン画面からIdPにリダイレクト)
構成図
シングルサインオンを設定する前のIdentity Centerの構成が既にいい加減複雑だったが、まとめると最終構成図は以下のようになる。
なお、Identity Center、QuickSightともホームリージョンはバージニア北部。
ステップバイステップ
以下、設定方法を記載していく。
なお、EC2にADを構成し、AD Connectorからリージョン跨ぎでEC2を参照して、Identity CenterからAD Connector経由でADをIDソースとして使用するまでの設定の詳細は省略し、ポイントのみ列挙する。
- AD on EC2はそれほど複雑な手順は必要ない。昔ながらのdcpromo。
- AD ConnectorはAD on EC2のIPアドレスを参照するだけだが、インターリージョンVPCピアリングと、しかるべきルーティング設定が必要。なお、新規にIdentity Centerを作成する場合、東京リージョンに立てることも現在はできるので、この場合はインターリージョンVPCピアリングは必要ない(以前はバージニア北部にしか作れなかった)。
- Identity CenterとAD Connectorの接続については、こちらを参照。なお2022年4月以降、同期対象のユーザー/グループを選択・有効化することが必須になった。詳しくはこちら。
1. Identity CenterでQuickSightアプリケーションを作成
Identity Centerのコンソールから設定を開始する。最初はQuickSightへのエントリーポイントとなるアプリケーションの作成から。
AWSサービスやサードパーティー製品に交じってQuickSightのテンプレートが用意されているので、これを使用する。
今回は、名前もデフォルトのAmazon QuickSightとした。
いずれの項目もデフォルトで構わない。
重要なのはリレーステートで、SAML認証が成功したのち、SAMLアサーションを転送する先(つまり、ログインする先)を指定するのだが、ここをhttps://quicksight.aws.amazon.com
(デフォルト)とすることでQuickSightにリダイレクトされるようになる。
ちなみに、以下のようにアプリケーション開始URLにダッシュボードのURLを入れておくと、QuickSightのホーム画面ではなく、ダッシュボードが直接開くように設定することもできる。
後続の設定のため、以下からSAMLメタデータファイルをダウンロードしておく。
2. IAMでSAMLプロバイダーを作成
Identity CenterとQuickSightを繋ぐSAMLプロバイダーを、IAMコンソールで作成する。SAMLメタデータファイルは、先程ダウンロードしたものをそのままアップロードすればOK。
作成後の状態は以下の通り。
ちなみに下にあるのはIdentity CenterがSSOの頃に作成した、Identity Center用のSAMLプロバイダーである。今回の構成とは直接関係しないが、ADFSを使う場合もここで構成する。
3. IAMポリシー/IAMロールを作成
フェデレーション時に使用されるIAMロールと、それにアタッチするためのIAMポリシーを作成する。
ロールの作成時に、SAML2.0フェデレーションを選択することがポイント。また、プログラムと AWS マネジメントコンソールへのアクセスを許可するを選択し、属性と値が自動入力されていることも確認する。
今回は一般的なベストプラクティスに従い、quicksight:CreateReader
権限を持つポリシーをアタッチしたqs-reader
ロールを作成する(つまり、セルフプロビジョニングされるユーザーはまずReaderとして作成される。必要な場合は後で管理者がAuthorやAdminに変更する運用モデルを想定する)。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "quicksight:CreateReader",
"Resource": "arn:aws:quicksight:*:012345678901:user/${aws:userid}"
}
]
}
ロールARNは次のステップでSAML属性に入力するので、クリップボードにコピーしておく。
4. SAML属性を追加
Identity Centerに戻り、作成済みのアプリケーションAmazon QuickSightから属性マッピングを編集を選択する。
これを忘れると、テストの際にinvalid SAML assersion.
などと文句を言われるので注意。
以下のフォーマットで入力する。
アプリケーションのユーザー属性 | この文字列値または IAM Identity Center のユーザー属性にマッピング | 形式 |
---|---|---|
https://aws.amazon.com/SAML/Attributes/Role |
arn:aws:iam::<アカウントID>:saml-provider/<SAMLプロバイダー名>,arn:aws:iam::<アカウントID>:role/<ロール名> |
undefined |
SAMLプロバイダー名、ロール名は、前のステップで作成したものを使用する。カンマ区切りであれば、SAMLプロバイダー名とロール名の順番は逆でも構わない。
ちなみに、異なるポリシーを持つ複数のロール(例えばquicksight:CreateAdmin
を持つqs-admin
、quicksight:CreateUser
を持つqs-author
)を作成することもできるが、現状、Identity Centerでは、QuickSightアカウントあたり一つしかSAML/Attributes/Role
に設定できない制約がある(Identity Centerを介さず、Azure ADやOktaを直接IdPとして構成する場合は、複数設定ができるようだ)。
You can only map one IAM role per Amazon QuickSight account and one IAM role attribute mapping per IAM Identity Center application instance.
5. ユーザー/グループの割り当て
最後に、QuickSightを利用するユーザーまたはグループをアプリケーションに割り当てる。運用上、通常はグループになると思われる。
なお、ここではAD内のユーザー/グループを検索して割り当てるのだが、最近のUIでは、一致の有無は表示してくれるが候補表示はしてくれないので、AD側の画面も開きながら設定する必要がありそう。
6. テスト
Identity Center→ダッシュボードから、AWSアクセスポータルのURLを探す。
上記URLを別のブラウザやシークレットモードに貼り付けて、開いてみる。
自分の環境ではAWSマネコンも割り当ててあるので、ログインに成功するとこんな感じでIdPポータルが開く。
Amazon QuickSightをクリックすると、QuickSightコンソールに遷移し、先程設定したダッシュボード画面に直接リダイレクトされる。ホームに遷移するか、ダッシュボードに直接遷移するかは、要件次第というところ。
まとめ
Ad→Identity Center→QuickSight、の組み合わせでシングルサインオンを構成した。
シングルサインオンはそれ自体がややこしいが、ただ、一度理解してしまえば応用が利く。Azure ADやOktaも基本は同様の設定で行けるはず。
なお、今回はIdP-Initiated SSOということでIdentity Centerへのログインを契機に遷移していく構成を検証したが、QuickSightのログイン画面から入ってIdPにリダイレクトしたいケース(SP-Initiated SSO)も需要が多いと思われる。参考情報に参照先ドキュメントを記載したので、必要に応じて試してみて欲しい。
参考情報
AWS QuickSightへのアクセスにAWS SSOをつかう
Set up SSO for Amazon QuickSight by using IAM Identity Center and identity federation
Setting up IdP federation using IAM and QuickSight
Configuring SAML assertions for the authentication response
Amazon QuickSight のアクセスに Okta をフェデレーションする
Enabling Amazon QuickSight federation with Azure AD
チュートリアル: Azure AD SSO と AWS Single-Account Access の統合