はじめに
データを可視化しようとしてQuickSightからAthenaのテーブルを参照しようとしたときに、
まずはそのデータセットを作成します。
データセットの作成時にデータベースを選択するのですが、
データベースの候補として目的のAthenaデータベースがリストに出てこず、
困ってしまいました。
Athenaのコンソール上にはもちろん存在しているのを確認しました。
AthenaのリージョンとQuickSightのリージョンも一致しているのを確認しました。
QuickSightの管理画面でAthenaを許可しているのも確認しました。
Amazon QuickSight で Athena を使用するときに発生する問題のトラブルシューティングを見てもそれっぽいものが見当たりません。
色々調べた結果、目的のデータベースを選択してデータセットを作成できるようになったので、
同じ現象で困った方のために解決方法を残しておきます。
原因
LakeFormationでの権限が与えられていないから です。
QuickSightが内部で使うロールと、
QuickSight内で管理されている自分自身のIAMユーザ/グループ
の両方に許可を与える必要があります。
AWSにログインしている状態からQuickSightの画面に行くと
シームレスにつながっているので普段の作業中は意識をしていないですが、
AWS上でのIAMユーザとQuickSight内で管理されているIAMユーザとは別物なので、
別途権限を与える必要があります。
(私はこのことが理解できてなくて、しばらくハマってました)
なお、この現象はQuickSightのEnterprise Editionでのみ発生するようです。
解決方法
原因のところに書いたようにLake Formationにて権限を与えます。
Lake Formationを開きます。
Data catalog > Databases から目的のデータベースを選択します。
Actions > View permissoins
現在付与されている権限が出てきます。
付与されているべき権限が与えられていない場合はそれぞれ付与していきます。
QuickSightのロールへの権限付与
QuickSightが内部的に使っているRole
aws-quicksight-service-role-v0
aws-quicksight-s3-consumers-role-v0
に権限を与えます。
データベースへの付与
目的のデータベースを開いた画面から、
Actions > Grant でGrant data permissions の画面を開きます。
- Principals
IAM users and roles を選択し、IAM users and rolesから
aws-quicksight-service-role-v0
aws-quicksight-s3-consumers-role-v0
を選択します。 - LF-Tags or catalog resources
Named data catalog resourcesを選択します。
Databases : 目的のデータベースが選択済みなのでそのままにしておきます。 - Database permissions
QuickSightからは表示させるだけなので、
Database permissions にDescribe
を与えておきます。
これらを入力したらGrantボタンを押下します。
テーブルへの付与
先程と同じくGrant data permissions の画面を開きます。
- Principals
先程と同じようにIAM users and roles を選択し、IAM users and rolesから
aws-quicksight-service-role-v0
aws-quicksight-s3-consumers-role-v0
を選択します。 - LF-Tags or catalog resources
Named data catalog resourcesを選択します。
Databases : 目的のデータベースが選択済みなのでそのままにしておきます。
Tables :All tables
を選択します。 - Table permissions
Table permission :Select
Describe
にチェックをつけます。
これらを入力したらGrantボタンを押下します。
QuickSight管理のIAMユーザへの権限付与
ユーザのarnの調査
付与するにあたりIAMユーザのarnを知っておく必要があります。
画面上では調べることができないのでCLIで調べます。
CloudShellなどで以下のコマンドを発行します。
aws quicksight list-users --aws-account-id アカウントID --namespace ネームスペース
発行すると対象となるユーザのarnが得られるのでメモっておきます。
[cloudshell-user@ip-999-999-999-999 ~]$ aws quicksight list-users --aws-account-id 999999999999 --namespace default
{
"Status": 200,
"UserList": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/user1",
"UserName": "user1",
"Email": "user1@example.com",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/AAAAAAAAAAAAAAAAAAAAA"
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:user/default/user2",
"UserName": "user2",
"Email": "user2@example.com",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/BBBBBBBBBBBBBBBBBBBBB"
},
~略~
QuickSightのグループに対して付与することもできます。
グループに付与する場合は
aws quicksight list-groups --aws-account-id アカウントID --namespace ネームスペース
でグループのarnをメモっておきましょう。
データベース、テーブルへの付与
Roleに与えた時と同様にGrant data permissions の画面を開きます。
- Principals
SAML users and groups
を選択し、先ほど調べたarnを入力します。
後はRoleに与えた時と同様にデータベース、テーブルそれぞれに設定してGrantします。
おわりに
もし同じ症状で悩んでいる方のお役に立てれば幸いです。