✂️

AWS QuickSightで埋め込みURLを生成する方法

2021/06/13に公開

はじめに

QuickSightは他のサービスと違って独自にユーザーを作成しないといけないので、IAMをちゃんと設定しているのに埋め込みURLが生成できないなど罠にハマりやすいです。

いくつかの種類の生成方法を見ていきQuickSightでの埋め込みURLを理解します。

この記事でとりあげるのは以下の三種類でSAMLやADに関しては触れませんが根本的な権限周りなどは参考になると思います。

  • ANONYMOUS
  • QUICKSIGHT
  • IAM

IAMとQuickSightとの関係

これが一番重要で基本的にQuickSight側でユーザーを作成しないと使えません。

IAMはあくまでQuickSightへの権限があるかどうかで、権限があってもQuickSight側にユーザーがいなければ埋め込みURLは発行できません。
(IAMとQuick Sightのユーザーを紐付けることは可能)

ここを混同してしまうとIAMで適切にポリシーなどをアタッチしてるのにエラーが発生してしまうといった状況になります。

dashboardを作成

まずは公開したいdashboardを作成してIDを控えておきます。
URLの末尾にある文字列がIDになります。

dashboard_id

Anonymousとして発行

QuickSight データダッシュボードをすべてのユーザーに埋め込む - Amazon QuickSight

基本的にQuickSight側にユーザーを作成しないと埋め込みURLを発行できないと書きましたが、ユーザー数が多すぎるなどの理由でいちいちユーザーを作成してられない向けの発行のやり方がAnonymousとなります。

Anonymousは匿名という意味なのでその名のとおりですね。

前提として以下の権限が必要になります。
公式ではassume roleしていますが権限が付与されればassume roleでなくても大丈夫です。
aws-cliでやるなら実行するIAMに以下のポリシーを直接アタッチでも構いません。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "quicksight:GetDashboardEmbedUrl",
              "quickSight:GetAnonymousUserEmbedUrl"
            ],
            "Resource": "*"
        }
    ]
}

そうしたら以下のコマンドでURLが発行できます。(<>には自分の環境にあう値を代入してください。)

aws quicksight get-dashboard-embed-url --aws-account-id <> --dashboard-id <> --identity-type ANONYMOUS --namespace default

ポイントは --identity-type ANONYMOUS を指定することと、--namespace default を指定することです。
namespaceの詳細は説明しませんがなにもしていなければdefaultになっています。

なおAnonymousはQuickSightのプランがセッションキャパシティーでないとエラーになります。
不特定多数のユーザーに公開するのでユーザー数でなくセッションという概念で料金が計算されるということです。

An error occurred (UnsupportedPricingPlanException) when calling the GetDashboardEmbedUrl operation: ANONYMOUS identity type is supported only when the account has an active Capacity Pricing plan

QUICKSIGHTとして発行

認証済みユーザー向けの QuickSight データダッシュボードの埋め込み - Amazon QuickSight

これはQuickSightに登録されているユーザーを使って埋め込みURLを取得するといったものになります。
なので事前にQuickSight側でユーザーを作成する必要があります。(最初に登録されているユーザでも可能です。)

IAMユーザーは「はい・いいえ」どちらでも構いません。

create_quick_user

今回は以下の権限が前提となります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "quicksight:GetDashboardEmbedUrl",
        "quicksight:GetAuthCode"
      ],
      "Resource": "*"
    }
  ]
}

QuickSightに登録したユーザーにはQuickSight用のArnが付与されるのでそれを確認します。

aws quicksight list-users --aws-account-id <> --namespace default

発行したいユーザーのArnを確認できたら --user-arn にそのArnを指定して以下のコマンドを実行します。

aws quicksight get-dashboard-embed-url --aws-account-id <> --dashboard-id <> --identity-type QUICKSIGHT --user-arn <>

これでQuickSightのユーザーとして埋め込みURLを発行できます。

IAMとして発行

これが一番ややこしいのですが単にIAMユーザーを作成するだけではだめです。そのIAMとQuickSightのユーザーを紐付けする必要があります。

ユーザー名にIAMユーザー名をいれてIAMユーザーを「はい」にします。

create_quick_iam_user

権限は以下が前提です。

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

今回はIMAをQuickSightのユーザーに紐づけているのでArnを調べる必要がなく以下のコマンドで発行できます。(紐付けたIAMの情報をつかってCLIを操作してください。)

aws quicksight get-dashboard-embed-url --aws-account-id <> --dashboard-id <> --identity-type IAM

QUICKSIGHTと違う点は --user-arn を指定しなくてもいい点です。

get-session-embed-url

いままではダッシュボードの共有でしたがQuickSightのトップ画面を共有することもできます。

session_top

ダッシュボードの埋め込みURL共有でいうAnonymous的なことはできず、QuickSightに紐付いているIAMで実行するか、 --user-arn を指定して実行するかになります。

aws quicksight get-session-embed-url --aws-account-id <> --user-arn <>

Discussion