Amazon Quick SightとOktaをSAMLフェデレーションで連携してみた

Amazon Quick SightとOktaをSAMLフェデレーションで連携してみた

2026.04.02

データ事業本部のueharaです。

今回は、Amazon Quick SightとOktaをSAMLフェデレーションで連携してみたいと思います。

はじめに

Amazon QuickのコアコンポーネントであるAmazon Quick Sightは(組織インスタンス/アカウントインスタンス共に)IAM Identity Centerと統合されているため、基本的に外部IdP連携をしたい場合は IAM Identity Center の利用が推奨されます。(参考

※IAM Identity Centerを利用するとSCIM連携をネイティブサポートしているためユーザーの同期設定が容易で、その点でも優位性があります。(ただし、OktaでSCIM連携をしたい場合は契約プランに Lifecycle Management の利用が含まれている必要があります)

一方、従来までの SAMLフェデレーション(IAM経由) についても引き続き利用は可能です。

既存のQuick Sightのサブスクリプションを維持しつつOktaを利用したSSOを実現したい場合や、何らかの理由でIAM Identity Centerの利用を採用できない場合にはそちらが選択肢になるかと思います。

※途中でQuick Sightの認証方法を別の方式からIAM Identity Center方式に変更することはできないので、既存のQuick Sightのサブスクリプションの解除&再登録が必要になります。

今回は、必要なAWSリソースを定義したCloudFormationテンプレートを用意し、SAMLフェデレーション(IAM経由)を比較的簡単に設定する方法をご紹介します。

やってみた

(Okta)アプリケーションの追加

まず、OktaのOIN(Okta Integration Network)からインテグレーションを追加するため、『アプリケーション』から『アプリカタログを参照』を選択します。

20260401_okta_01

検索バーに『aws』と入力し、『AWSアカウントフェデレーション』を選択します。

20260401_okta_02

『統合を追加』を選択します。

20260401_okta_03

アプリケーションラベルは『Amazon Quick Sight』とし、『次へ』に進みます。

20260401_okta_04

サインオンオプションでは『SAML 2.0』を選択し、デフォルトのリレー状態は「 https://quicksight.aws.amazon.com 」を設定します。

20260401_okta_05

ここでメールアドレスをQuick Sight側に連携するための、属性情報の設定も行っておきます。

『属性(任意)』を開き、以下を設定します。

  • 名前: https://aws.amazon.com/SAML/Attributes/PrincipalTag:Email
  • 属性: URI参照
  • 値: user.email

20260401_okta_06

この設定をしておくことで、Okta経由でQuick Sightに初回ログインする際にメールアドレスが自動で連携され、メールアドレスの入力画面をSkipすることができます。

次に『IDプロバイダーのメタデータ』を右クリックして、リンク先を保存します。(中身はxmlファイルになっており、後で使用するので分かり易いところに保存しておいて下さい)

20260401_okta_08

最後に『完了』ボタンを押すと、アプリが追加されます。

20260401_okta_09

(AWS)リソース作成

次に、AWS側のリソースを作成します。

以下のCloudFormationテンプレート QuickSight_Okta_Federation.yaml を用意します。

QuickSight_Okta_Federation.yaml
QuickSight_Okta_Federation.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: >
  CloudFormation template to create IAM resources (SAML provider, policies, roles, and IAM user)
  required for SAML federation between Amazon QuickSight and Okta.

# ============================================================
# Parameters
# ============================================================
Parameters:
  OktaSAMLMetadataDocument:
    Type: String
    Description: >
      Paste the contents of the SAML metadata XML file downloaded when creating the Okta application.
    NoEcho: false

# ============================================================
# Resources
# ============================================================
Resources:

  # ----------------------------------------------------------
  # SAML Identity Provider (Okta)
  # ----------------------------------------------------------
  OktaSAMLProvider:
    Type: AWS::IAM::SAMLProvider
    Properties:
      Name: Okta
      SamlMetadataDocument: !Ref OktaSAMLMetadataDocument

  # ----------------------------------------------------------
  # IAM Managed Policies
  # ----------------------------------------------------------
  QuickSightOktaCreateAdminPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: QuickSightOktaCreateAdminPolicy
      Description: Allows federated Okta users to be provisioned as QuickSight Admin users
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: VisualEditor0
            Effect: Allow
            Action: quicksight:CreateAdmin
            Resource: '*'

  QuickSightOktaCreateAuthorPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: QuickSightOktaCreateAuthorPolicy
      Description: Allows federated Okta users to be provisioned as QuickSight Author users
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: VisualEditor0
            Effect: Allow
            Action: quicksight:CreateUser
            Resource: '*'

  QuickSightOktaCreateReaderPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: QuickSightOktaCreateReaderPolicy
      Description: Allows federated Okta users to be provisioned as QuickSight Reader users
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: VisualEditor0
            Effect: Allow
            Action: quicksight:CreateReader
            Resource: '*'

  # ----------------------------------------------------------
  # IAM resources for Okta API integration
  # Required for Okta to retrieve the list of IAM roles from AWS.
  # Ref: https://docs.aws.amazon.com/quicksight/latest/user/tutorial-okta-quicksight.html
  # ----------------------------------------------------------
  OktaListRolesPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: OktaListRolesPolicy
      Description: 'Allows Okta to list IAM roles and account aliases. Used when configuring API integration on the Provisioning tab of the Okta app.'
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - iam:ListRoles
              - iam:ListAccountAliases
            Resource: '*'

  OktaSSOUser:
    Type: AWS::IAM::User
    Properties:
      UserName: OktaSSOUser
      ManagedPolicyArns:
        - !Ref OktaListRolesPolicy

  # ----------------------------------------------------------
  # IAM Roles (SAML 2.0 Federation)
  # ----------------------------------------------------------
  QuickSightOktaAdminRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: QuickSightOktaAdminRole
      Description: IAM role for Okta-federated QuickSight Admin users
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:AssumeRoleWithSAML
            Condition:
              StringEquals:
                SAML:aud: 'https://signin.aws.amazon.com/saml'
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:TagSession
            Condition:
              StringLike:
                aws:RequestTag/Email: '*'
      ManagedPolicyArns:
        - !Ref QuickSightOktaCreateAdminPolicy

  QuickSightOktaAuthorRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: QuickSightOktaAuthorRole
      Description: IAM role for Okta-federated QuickSight Author users
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:AssumeRoleWithSAML
            Condition:
              StringEquals:
                SAML:aud: 'https://signin.aws.amazon.com/saml'
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:TagSession
            Condition:
              StringLike:
                aws:RequestTag/Email: '*'
      ManagedPolicyArns:
        - !Ref QuickSightOktaCreateAuthorPolicy

  QuickSightOktaReaderRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: QuickSightOktaReaderRole
      Description: IAM role for Okta-federated QuickSight Reader users
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:AssumeRoleWithSAML
            Condition:
              StringEquals:
                SAML:aud: 'https://signin.aws.amazon.com/saml'
          - Effect: Allow
            Principal:
              Federated: !Ref OktaSAMLProvider
            Action: sts:TagSession
            Condition:
              StringLike:
                aws:RequestTag/Email: '*'
      ManagedPolicyArns:
        - !Ref QuickSightOktaCreateReaderPolicy

# ============================================================
# Outputs
# ============================================================
Outputs:
  OktaSAMLProviderArn:
    Description: 'ARN of the Okta SAML provider. Enter this value in the "Identity Provider ARN" field of the Okta application settings.'
    Value: !GetAtt OktaSAMLProvider.Arn
    Export:
      Name: !Sub '${AWS::StackName}-OktaSAMLProviderArn'

  QuickSightOktaAdminRoleArn:
    Description: ARN of the QuickSight Okta Admin role
    Value: !GetAtt QuickSightOktaAdminRole.Arn
    Export:
      Name: !Sub '${AWS::StackName}-AdminRoleArn'

  QuickSightOktaAuthorRoleArn:
    Description: ARN of the QuickSight Okta Author role
    Value: !GetAtt QuickSightOktaAuthorRole.Arn
    Export:
      Name: !Sub '${AWS::StackName}-AuthorRoleArn'

  QuickSightOktaReaderRoleArn:
    Description: ARN of the QuickSight Okta Reader role
    Value: !GetAtt QuickSightOktaReaderRole.Arn
    Export:
      Name: !Sub '${AWS::StackName}-ReaderRoleArn'

上記テンプレートで、以下のリソースが作成されます。

  • Okta(IAM SAMLプロバイダー)
    • OktaをAWSのSAML 2.0 IDプロバイダーとして登録する
    • Quick Sightへのフェデレーションログインの信頼関係の起点となる
  • QuickSightOktaCreateAdminPolicy(IAMポリシー)
    • Okta経由でログインしてきたユーザーをQuick Sightの Admin として自動プロビジョニングする権限
  • QuickSightOktaCreateAuthorPolicy(IAMポリシー)
    • Okta経由でログインしてきたユーザーをQuick Sightの Author として自動プロビジョニングする権限
  • QuickSightOktaCreateReaderPolicy(IAMポリシー)
    • Okta経由でログインしてきたユーザーをQuick Sightの Reader として自動プロビジョニングする権限
  • OktaListRolesPolicy(IAMポリシー)
    • Oktaがプロビジョニング設定時に対象のAWSアカウントのIAMロールの一覧・アカウントエイリアスを取得するための権限
  • OktaSSOUser(IAMユーザー)
    • OktaのAPI連携に使用する専用ユーザー
    • このユーザーのアクセスキーを後にOktaアプリのプロビジョニングタブで設定する
    • (※アクセスキーは後の手順で発行する)
  • QuickSightOktaAdminRole(IAMロール)
    • Admin権限でQuick SightにアクセスするOktaユーザー向けのロール
    • OktaからのSAMLアサーションを信頼し、 QuickSightOktaCreateAdminPolicy がアタッチされている
  • QuickSightOktaAuthorRole(IAMロール)
    • Author権限でQuick SightにアクセスするOktaユーザー向けのロール
    • OktaからのSAML アサーションを信頼し、 QuickSightOktaCreateAuthorPolicy がアタッチされている
  • QuickSightOktaReaderRole(IAMロール)
    • Reader権限でQuick SightにアクセスするOktaユーザー向けのロール
    • OktaからのSAMLアサーションを信頼し、 QuickSightOktaCreateReaderPolicy がアタッチされている

テンプレート適用のため、AWSマネジメントコンソールのCloudFormationのサービスページからスタックの作成を行います。

20260401_okta_10

パラメーターとして先ほどOktaアプリの設定時に保存したメタデータ(xmlファイル)の値を入力できるようにしているので、そこにxmlの中身をコピー&ペーストします。

20260401_okta_11

確認画面ではIAM関連リソースの作成を承認して、『次へ』に進みます。

20260401_okta_12

最後の画面で『送信』ボタンを押すとスタックが作成され、以下のようにリソースが作成されるかと思います。

20260401_okta_13

(AWS)アクセスキーの払い出し

先ほどのCloudFormationテンプレートで作成された OktaSSOUser のアクセスキーを払い出します。

20260401_okta_14

説明は適当なものを入力し『アクセスキーを作成』を選択します。

20260401_okta_15

アクセスキーは後ほど利用するので、適切に管理して下さい。

20260401_okta_16

(Okta)アプリケーションの設定

Oktaの画面に戻り、アプリケーションの設定から『サインオン』タブを選択し、『編集』を押します。

20260401_okta_17

「IDプロバイダーのARN(SAML SSOの場合のみ必要)」で先ほどCloudFormationで作成したプロバイダーのARNを指定します。

20260401_okta_18

画面下部に進み『保存』ボタンを押下して完了します。

次に『プロビジョニング』タブに移動して、『API統合を構成』を選択します。

20260401_okta_19

『API統合を有効化』にチェックを入れ、『アクセスキー』と『秘密鍵』にそれぞれ先ほど払い出したアクセスキーIDとシークレットアクセスキーを入力します。

20260401_okta_20

『API資格情報をテスト』で接続検証できたら『保存』ボタンを押下します。

20260401_okta_21

完了したら、『プロビジョニング』タブの『編集』を押して、『ユーザーを作成』の『有効化』にチェックを入れて保存をします。

20260401_okta_22

(Okta)グループの作成と割り当て

Oktaの左側のタブから『ディレクトリ > グループ』と進み、『グループを追加』を選択します。

20260401_okta_23

ここで、以下の3グループ作ります。

  • Amazon-QuickSight-Admin
  • Amazon-QuickSight-Author
  • Amazon-QuickSight-Reader

20260401_okta_24

作成が、完了したら以下のようになるかと思います。

20260401_okta_25

作成したグループに適当にユーザーを割り当てます。

Amazon-QuickSight-Readerグループを選択し、『ユーザーを割り当て』を選択します。

20260401_okta_26

任意のユーザーをグループに追加します。

20260401_okta_27

グループにユーザーが追加されたことを確認します。

20260401_okta_28

今度は作成したグループをアプリケーションに割り当てます。

AWSのアプリケーション設定に戻り、『割り当て』タブから『割り当て』ボタンの『グループに割り当て』を選択します。

20260401_okta_29

まずはAmazon-QuickSight-Adminグループの『割り当て』を選択します。

20260401_okta_30

『SAML User Roles』に QuickSightOktaAdminRole を指定して、『保存して戻る』を選択します。

20260401_okta_31

同様に、Amazon-QuickSight-Authorグループには QuickSightOktaAuthorRole を指定し、Amazon-QuickSight-Readerグループには QuickSightOktaReaderRole を指定して、割り当てを完了します。

20260401_okta_32

無事設定ができれば以下のようになっているかと思います。

20260401_okta_33

(Okta)Quick Sightへのログイン確認

準備ができたら、先程Amazon-QuickSight-Readerグループに割り当てたユーザーでOktaのダッシュボードにログインします。

すると、以下のように『マイアプリ』にAmazon Quick Sightが追加されているのが分かります。

20260401_okta_34

アプリに進むと、自動でプロビジョニングが進み、Amazon Quickの画面が表示されることを確認しました。

20260401_okta_35

念のためAmazon Quickの管理コンソールも確認してみると、Readerロールでユーザーが作成されていることが分かります。

20260401_okta_36

補足

補足として、ここまでで作成したOktaのグループやIAMロールの関係を図で簡単に示すと、以下のようになります。

20260401_okta_37

つまり流れとしては下記の通りです。

Oktaユーザー
  ↓ SAML アサーション
AWS STS(AssumeRoleWithSAML)
  ↓ 一時認証情報(quicksight:CreateReader等の権限を持つ)
Quick Sightサービス
  ↓ 初回アクセス時、一時認証情報の権限を使ってユーザーを自動登録
Quick Sightユーザーとして登録完了

2回目以降のログインでは、ユーザーが既に存在するため作成はスキップされ、認証のみ行われます。

ちなみに、ユーザーがOktaグループを移動した場合(例:Reader → Author)の動作は以下のようになります。

タイミング 動作
Readerグループ在籍時(初回ログイン) QuickSightOktaReaderRole/user@example.com として作成
Authorグループに移動後(移動後初回ログイン) QuickSightOktaAuthorRole/user@example.com として新規作成

SCIM連携ではないので、グループ移動前に作成されたReaderユーザーはQuick Sight上に残ったままになります。(ゴーストユーザーとして、ライセンスが消費され続けて恐れがあります)

これはOkta側でユーザーが削除された場合でも同じで、Okta側のユーザーが削除されたからといってQuick Sight上のユーザーも自動で削除されるわけではありません。

この辺りは手動(ないしスクリプト化&定期実行)で対応する必要があり、運用負荷を踏まえると、やはりユーザーの削除にも追従できるIAM Identity Centerを利用したSCIM連携に優位性があると感じます。

最後に

今回は、Amazon Quick SightとOktaをSAMLフェデレーションで連携してみました。

参考になりましたら幸いです。

参考文献

この記事をシェアする

関連記事