Amazon Web Services ブログ

Okta のユーザーとグループを Amazon QuickSight と同期する

本記事は、2024/03/28 に公開された Sync users and groups from Okta with Amazon QuickSight を翻訳したものです。

注:2023年8月現在、Amazon QuickSight は AWS IAM Identity Center 対応アプリケーションとなっています。この機能により、QuickSight をサブスクライブしている管理者は、IAM Identity Center を使用して、ユーザーがOkta やその他の外部 ID プロバイダでログインできるようになります。詳細については、QuickSight ドキュメントの「Simplify business intelligence identity management with Amazon QuickSight and IAM Identity Center(AWS blog post)」および「Configure your Amazon QuickSight account with IAM Identity Center」を参照してください。この新しいインテグレーションを使用することをお勧めします。このブログ投稿は、既存のアカウント構成の参考として提供されています。


Amazon QuickSight は、クラウドベースでサーバーレスかつ組み込み可能なビジネスインテリジェンス(BI)サービスです。QuickSight は完全に管理されたサービスとして、インタラクティブなダッシュボードを作成、公開することができ、あらゆるデバイスからアクセスしたり、アプリケーション、ポータルおよびウェブサイトに埋め込むことができます。

QuickSight は、Standard Edition と Enterprise Edition の両方で、Security Assertion Markup Language 2.0 (SAML 2.0) による ID フェデレーションをサポートしています。フェデレーションを使用すると、企業の ID プロバイダー(IdP)を使用してユーザーを管理し、ログイン時にそのユーザーを QuickSight に渡すことができます。IdP には、Microsoft Active Directory Federation Services、Ping One Federation Server、Okta などがあります。

本稿執筆時点では、QuickSight はエンタープライズグレードの認証メカニズムとして、フェデレーテッド・シングル・サインオン(SSO)と Active Directory(AD)のインテグレーションをサポートしています。後者では、役割の割り当てとコンテンツの認可のために、ネイティブの AD グループをシームレスに同期することができます。しかし、SAML を使用して連携 SSO を行う場合、適切なロールでユーザを自動的にプロビジョニングすることもできます。現在、このインテグレーションは、IdP と QuickSight 間のグループとユーザーまたはグループのメンバーシップを自動的に同期させてはいますが、その同期を遅延させています。これは、自動的にプロビジョニングされたユーザーに対して、アセットへの適切なアクセスを許可し、権限を付与するために重要です。

主な課題は以下の 3 つです。

  1. サードパーティ IdP からのユーザーとグループの自動同期
  2. ユーザーのグループへの自動割り当て
  3. ユーザーとグループが IdP から削除された場合の QuickSight からのデプロビジョニング

この投稿では、スケーラブルな方法でこれらの課題を克服するための手順とコードサンプルを提供します。Okta を使用したソリューションを示しますが、他の IdP を使用することもできます。これは実績のあるソリューションで、QuickSight の複数のお客様で使用され、実装されています。

ソリューション概要

このソリューションでは、QuickSight と以下の AWS サービスを使用して、ユーザー、グループ、およびそれらのメンバーシップを IdP から自動的に同期します。この場合、IdP は唯一の信頼できるソースとして機能します。

  • AWS Lambda はサーバーレス、イベント駆動型のコンピュートサービスで、サーバーのプロビジョニングや管理を行うことなく、事実上あらゆるタイプのアプリケーションやバックエンド・サービスのコードを実行できます。200 以上の AWS サービスや SaaS(Software as a Service)アプリケーションから Lambda をトリガーすることができ、使用した分だけ料金を支払うようになっています。
  • AWS Step Functions は、開発者が AWS サービスを使用して分散アプリケーションを構築し、プロセスを自動化し、マイクロサービスをオーケストレーションし、データと機械学習(ML)パイプラインを作成するのを支援するビジュアルワークフローサービスです。
  • Amazon EventBridge は、イベントを使用してアプリケーション・コンポーネントを接続するサーバーレス・サービスで、スケーラブルなイベント駆動型アプリケーションを簡単に構築できる。イベントにマッチするルールを作成し、1 つまたは複数のターゲット関数またはストリームにルーティングできます。
  • AWS Identity and Access Management(IAM)は、ユーザーの AWS リソースへのアクセスを安全に制御するのに役立ちます。IAM を使用して、誰が AWS リソースを使用できるか(認証)、どのリソースを使用できるか、どのように使用できるか(認可)を制御できます。詳細については、IAM ユーザーガイドを参照してください。

次の図は、サードパーティの IdP からユーザーとグループの同期を実行するワークフローを示しています。

このソリューションは、オンデマンド・モードでもスケジュール・モードでも実装できます。どちらの場合でも、このソリューションが最初に行うのは、一連の Lambda 関数の実行をオーケストレーションする Step Functions ワークフロー(Okta-QuickSight-Sync)のトリガーです。

  • QuickSight-Okta-Group-Sync – QuickSight 間でグループを同期します。
  • QuickSight-Okta-User-Sync – ユーザーとそのグループ・メンバーシップを作成します。
  • QuickSight-Okta-User-Deprovisioning – QuickSight ユーザーを削除し、行き場のなくなったアセットを QuickSight の専用管理ユーザーに転送します。

以下のセクションでは、AWS CloudFormation を使用してソリューションリソースを構成する手順を説明します。まず、CloudFormation スタックに必要なパラメータを取得する必要があります。

  • OKTAAPIToken
  • OKTADomain
  • OKTAQuickSighAPPId
  • QuickSightAdminUserName
  • QuickSightAdminIAMRole
  • QuickSightAuthorIAMRole
  • QuickSightReaderIAMRole

前提条件

以下の前提条件が必要です。

  • QuickSight アカウントのサブスクリプション
  • QuickSight へのフェデレーションが有効な Okta サブスクリプション
  • AWS アカウントの管理者権限
  • (訳者注)本ソリューションを手順に従って試す場合、QuickSight アカウント作成および CloudFormation の実行は バージニア北部(us-east-1)リージョンで行ってください。

IdP から OKTAAPIToken を取得し、Lambda から API コールを行う

まず、CloudFormation スタックのパラメーターとして使う API トークンを作成します。
以下のステップを完了します。

  1. 管理者アカウントでOktaドメインにログインします。
  2. ナビゲーションペインの SecurityAPI を選択します。

  1. Tokens タブで、Create token を選択します。

  1. トークン名(例:Okta API token for QuickSight user and group Sync)を入力し、Create token を選択します。

Okta がトークン値を生成します。

  1. トークン値をコピーし、後のステップで使用するために保存します。
  2. OK, got it を選択し、モーダルウィンドウを閉じます。
  3. Okta は以下のように Token Value を生成します。

トークンの詳細は API ページに記載されています。詳細には、トークンの作成日、有効期限、最終使用日のタイムスタンプが含まれます。

API トークンの有効期限は Okta のアカウント構成によって異なります。トークンの有効期限切れにより Lambda コードが失敗した場合は、新しいトークンを生成し、Lambda 設定で更新してください。

IdP の OKTADomain を取得する

Oktaドメイン名を検索するには、次の手順を実行します。

  1. 管理者アカウントで Okta 組織にサインインします。
  2. ダッシュボードの右上にあるグローバルヘッダで Okta ドメインを探します。
  3. ドメイン URL 全体をコピーし、後のステップで使用するためにこれを保存します。

Okta に設定されている QuickSight アプリケーションの OKTAQuickSighAPPId を取得する

アプリケーションIDを取得するには、以下の手順に従ってください。

  1. 管理者アカウントで Okta 組織にサインインします。
  2. ナビゲーションペインの ApplicationsApplications を選択します。
  3. QuickSight アプリケーションを選択します。
  4. ブラウザの URL に表示されているアプリケーション ID をコピーし、後の手順で使用するために保存します。

QuickSightAdminUserName を取得し、アセットを管理ユーザーに転送する

admin または author ロールを持つユーザをデプロビジョニングする際、アセットの所有権を移行するために、この admin ユーザを使用します。以下の手順を実行してください。

  1. 管理者権限で QuickSight アカウントにサインインします。
  2. ユーザ・プロファイル・アイコンを選択し、QuickSightを管理を選択します。

  1. ユーザーを管理にある管理者ユーザー名(この記事では OktaSSOUser を使用)をコピーし、後のステップで使用するために、これをメモします。

QuickSight IAM ロールを作成する

Amazon QuickSightへのアクセスをOktaでフェデレートする日本語訳)ブログポストの手順に従って、IAMロールを設定します。

  • 管理者: QuickSightOktaAdminRole
  • 作成者: QuickSightOktaAuthorRole
  • リーダー: QuickSightOktaReaderRole

(訳者注ここから)

各ロールには以下のようなポリシーを設定してください。ポリシーの内容は適宜変更してもかまいません。
管理者(ポリシー名は、必ず QuickSightOktaCreateAdminPolicy とし、QuickSightOktaAdminRole にアタッチしてください。)

{
    "Version": "2012-10-17",
    "Statement": [
        { 
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "quicksight:CreateAdmin",
            "Resource": "*"
        }
    ]
}

作成者(ポリシー名は、必ず QuickSightOktaCreateAuthorPolicy とし、QuickSightOktaAuthorRole にアタッチしてください。)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "quicksight:CreateUser",
            "Resource": "*"
        }
    ]
}

リーダー(ポリシー名は、必ず QuickSightOktaCreateReaderPolicy とし、QuickSightOktaReaderRole にアタッチしてください。)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "quicksight:CreateReader",
            "Resource": "*"
        }
    ]
}

(訳者注ここまで)

このソリューションでは、ユーザー登録のための AWS Lambda コードは上記の IAM ロールを使用します。IAM ロールの命名は正確に保つようにしてください。デプロイしたら、IAM ロールをカスタムロールで更新してください。

これで CloudFormation テンプレートに必要なパラメータが揃いました。

AWS CloudFormation でリソースを作成する

  1. Launch Stack を選択してリソースをプロビジョニングします

(訳者注)CloudFormation を実行するリージョンは バージニア北部 (us-east-1) に設定してください。

  1. スタックの作成のページで、次へを選択します。

  1. 前のステップで取得したパラメータを入力し、次へ選択します。

  1. 入力項目を確認し、送信を選択します。

CloudFormation が正常にデプロイされると、すべてのリソースがそれぞれのアカウントにデプロイされます。

EventBridgeルールを有効にする

デプロイされたリソースの一部として、EventBridge ルールが作成されます。スクリプトの偶発的な実行を避けるため、デフォルトでは無効になっています。このルールは、毎日 12:00 UTC にトリガされるように設定されています。

次の手順を実行して、ルールを有効にします。

  1. EventBridge コンソールで、ナビゲーション ペインのバスの下にあるルールを選択します。

  1. ルールリストで、CloudFormation テンプレートで作成したルール(OktaQSSyncEventsRule)を選択します。

  1. UTC 12:00 からの既存のルール設定を編集して独自のスケジュールを設定するには、イベントパターンセクションで編集を選択します。
  2. ルールを有効にするには、有効化を選択します。

ルールを有効にすると、Step Functions ワークフローの実行がトリガーされ、Okta から QuickSight へのユーザーとグループの自動同期が開始されます。

留意点

Okta ドメイン、Okta アプリケーション ID、API キー、および Okta の QuickSight アプリケーションに割り当てられた QuickSight 専用の管理者、ユーザー、グループは、QuickSight で同期される唯一のグループです。Okta のすべてのユーザーとグループが同期されるわけではありません。

QuickSight からユーザーをデプロビジョニングまたは削除する場合、行き場のなくなったアセットの所有権は、QuickSight-Okta-User-Deprovisioning Lambda 関数の環境変数で設定された専用管理ユーザーに移行されます。

クリーンアップ

クリーンアップするには、CloudFormation スタックを削除して、作成したすべてのリソースをデプロビジョニングします。これにより、3 つの Lambda 関数と関連するロールとポリシー、Step Functions ワークフローと関連するロール、EventBridge ルールと関連するロールが削除されます。

まとめ

この投稿では、Okta と QuickSight 間のユーザーとグループの自動同期を設定する手順を説明しました。このソリューションにより、QuickSight からグループとそのメンバーシップを手動で管理する必要がなくなり、Okta からユーザが削除された際にQuickSight からユーザをデプロビジョニングする必要がなくなります。

ご質問やご意見がございましたら、コメントをお寄せください。

その他のディスカッションや質問への回答については、QuickSight Community をご覧ください。