QuickSight ネームスペース(マルチテナンシー)


QuickSightのネームスペースとは

ネームスペースを複数作ることでQuickSight上の最上位の空間を分割することができます。
例えばSaaS事業者の方がお客様である会社A、会社Bごとにネームスペース(空間)を分けて様々な干渉を無くすことができます。いわゆるマルチテナンシーの機能になります。わかりやすくスッキリしてマルチテナンシーできますね。

aws cli v2を最新にする

まずは新しい機能が使えるようにaws cliをアップデートしておく。今回はaws cli v2を使っています。
Macにインストールの場合、手順は公式通り以下を実施します。これによって20200724段階での最新(?)のv2.0.34となりました。

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg ./AWSCLIV2.pkg -target /

バージョンの確認

aws --version
aws-cli/2.0.34 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev38

ネームスペース確認

ここからが本題です。QuickSightには実は元々DefaultのみでしたがNameSpaceという表記(概念)がされていました。手元の環境で新しいAPIのlist-namespacesをしてみます。以下のように既存の環境にはnamespace/defaultとなっているように、defaultという名前のネームスペースになっています。

aws quicksight list-namespaces --aws-account-id xxxxxxxxxxxx
{
    "Status": 200,
    "Namespaces": [
        {
            "Name": "default",
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:namespace/default",
            "CapacityRegion": "us-east-1",
            "CreationStatus": "CREATED",
            "IdentityStore": "QUICKSIGHT"
        }
    ],
    "RequestId": "9b2a27f8-0515-4a0f-93db-275beea8731b"
}

describe-namespaceで確認

aws quicksight describe-namespace --aws-account-id xxxxxxxxxxxx --namespace default
{
    "Status": 200,
    "Namespace": {
        "Name": "default",
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:namespace/default",
        "CapacityRegion": "us-east-1",
        "CreationStatus": "CREATED",
        "IdentityStore": "QUICKSIGHT"
    },
    "RequestId": "6f4ace7d-4465-410d-b8ad-5da6552cebc5"
}

新しいネームスペース作成

新しくcompany-aという名前のネームスペースを作成します。SaaS事業者からしてお客様となる会社(company-a)様と思ってください。お客さんが増えていけばこの単位で増やしていけばしっかりアイソレーションできます。

aws quicksight create-namespace  --aws-account-id xxxxxxxxxxxx --namespace company-a --identity-store QUICKSIGHT
{
    "Status": 202,
    "Name": "company-a",
    "CapacityRegion": "us-east-1",
    "CreationStatus": "CREATING",
    "IdentityStore": "QUICKSIGHT",
    "RequestId": "1b23f19f-d7f6-4626-ab13-ddba7db43ceb"
}

新しいネームスペースの確認(list, describe)

company-aのネームスペースが出来ていることが確認できます。

aws quicksight list-namespaces --aws-account-id xxxxxxxxxxxx
{
    "Status": 200,
    "Namespaces": [
        {
            "Name": "company-a",
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:namespace/company-a",
            "CapacityRegion": "us-east-1",
            "CreationStatus": "CREATED",
            "IdentityStore": "QUICKSIGHT"
        },
        {
            "Name": "default",
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:namespace/default",
            "CapacityRegion": "us-east-1",
            "CreationStatus": "CREATED",
            "IdentityStore": "QUICKSIGHT"
        }
    ],
    "RequestId": "99536eb6-8ea8-46e6-abc1-ad241fd57f53"
}
aws quicksight describe-namespace --aws-account-id xxxxxxxxxxxx --namespace company-a
{
    "Status": 200,
    "Namespace": {
        "Name": "company-a",
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:namespace/company-a",
        "CapacityRegion": "us-east-1",
        "CreationStatus": "CREATED",
        "IdentityStore": "QUICKSIGHT"
    },
    "RequestId": "6928b871-5c8c-4a1d-8ff2-c318d63c2919"
}

company-aのネームスペースにユーザー追加

以下のファイル作成します。これを読み込みregister-userでユーザーを作成します。
ここでネームスペースにcompany-aを指定しています。comnpany-aのネームスペースにユーザーが作成され、既存のdefaultのネームスペースにはなんら操作は出来ないユーザーです。company-aの会社にも管理者(ADMIN)、グラフを作る人(AUTHOR)、グラフを見る人(READER)がいると思うのでそれぞれ作れます。今回はまず管理者(ADMIN)を作ります。

vim register-reader1.json 
{
   "IdentityType": "QUICKSIGHT",
   "Email": "[email protected]",
   "UserRole": "ADMIN",
   "AwsAccountId": "xxxxxxxxxxxx",
   "Namespace":"company-a",
   "UserName": "kimura"
}

register-userで実際にユーザー作成
ここではkimuraというユーザーを作成しています。company-aの会社の管理者となるkimuraさんと思ってもらえたらと。

aws quicksight register-user --cli-input-json file://register-reader1.json
{
    "Status": 201,
    "User": {
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/company-a/kimura",
        "UserName": "kimura",
        "Email": "[email protected]",
        "Role": "ADMIN",
        "Active": false,
        "PrincipalId": "user/d-90677c1ab6/d17bed3d-e17e-4474-b9b3-0994713217c6"
    },
    "UserInvitationUrl": "https://signin.aws.amazon.com/inviteuser?token=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "RequestId": "f1606c12-1cfb-4d87-8177-6b26c516d813"
}

セキュリティ上、kimuraさんはこの登録を自身で承認しパスワード登録しなければいけません。
このUserInvitationURLをブラウザで開くとサインアップ画面です。パスワードを設定し登録します。

登録したkimuraでサインインします。

サインインし、QuickSightの初期画面が表示されます。画面キャプチャを取り忘れましたが普通に分析(グラフやダッシュボード)を作れました。

右上のユーザー名のアイコンをクリックし、"QuickSightの管理"をクリックするとQuickSightの管理画面になります。この画面の左上のアカウント名が"compay-a"となっています。これがネームスペースっぽいですね。

ちなみにdefault(元からあるネームスペース)のQuickSightの画面を確認すると、company-aで作成した分析やデータセットは見えていません。company-aで作った画面をキャプチャ取り忘れて確認をお見せできてないですが、しっかりアイソレーションされてます。

GUIで出来たらいいよねこれ

参考資料

Supporting Multitenancy with Isolated Namespaces

QuickSight API create namespace

AWS CLI QuickSight