Amazon QuickSightでAthenaからのデータ取得が権限エラーで失敗するので対処してみた
こんにちは、CX事業本部の若槻です。
今回は、Amazon QuickSightからAthenaに接続してデータを取得しようとすると権限エラーで失敗してしまったため対処方法を確認してみました。
データソースとなるAthenaの環境
Amazon QuickSightからデータソースとして接続しようとしたAthenaの環境は次のように作成しました。
- データベース作成
CREATE DATABASE mydb
- テーブル作成
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable ( rank string, name string, attribute string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION 's3://mybucket/test/' TBLPROPERTIES ('has_encrypted_data'='false','skip.header.line.count'='1');
- テーブルへデータが取得できているか確認
Select * from mydb.mytable
S3バケット内のファイル内のデータがAthenaのテーブルへちゃんと取得できています。
事象
データソースとなるAthenaの環境ができたので、QuickSightのマネジメントコンソールから接続してデータセットを作成してみます。
QuickSightのデータセット作成ページでデータソースとして[Athena]を選択します。
[データソース名]を指定して、[データソースを作成]をクリック。
[データベース]と[テーブル]を選択して、[データの編集/プレビュー]をクリック。
データセットの画面が開き、[読み込み中]と表示されてAthenaからのテーブルデータの取得が始まります。
しかし、1分ほど待つとプレビューを表示できません
と表示されデータの取得に失敗してしまいます。[保存して視覚化]をクリックしてみます。
保存したデータセットを使用した分析画面が開きます。適当なフィールドをクリックしてデータを読み込んでみます。
2,3分ほど待つとデータベースで SQL 例外が生成されました。
と表示され、ここでもデータの取得に失敗してしまいます。[詳細を表示]をクリックしてみます。
次のようなエラー詳細が確認できました。
[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied
また、Athenaのコンソールから履歴タブを見てみると、データセット作成時に接続した1回目のクエリと、分析からデータソースへ接続した2回目のクエリの履歴が記録されており、いずれも[状態]は失敗
となっています。1回目の[エラーの詳細]をクリックしてみます。
ここでもエラーの詳細が確認できました。
Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied
原因、対処
ここまで確認したエラー詳細にあった通り、QuickSightからS3バケットへのアクセス権限が不足していることが原因でした。以降、今回の事象の対処方法となります。
QuickSightのコンソールで右上のアイコンで開いたメニューから[QuickSightの管理]を選択します。(もしくはhttps://quicksight.aws.amazon.com/sn/adminを直接開きます。)
管理画面が開くので、[セキュリティとアクセス権限]タブで、[QuickSight の AWS のサービスへのアクセス]の[追加または削除する]をクリックします。
QuickSightが接続可能なサービス一覧が表示されます。そのうち[Amazon S3]と[Amazon Athena]のチェックボックスにチェックが付いており接続可能となっていることを確認します。[Amazon S3]の[詳細]をクリックします。
[S3 バケットを選択する]をクリックします。
ダイアログが開き、QuickSightが接続可能なS3バケット一覧が表示されます。そのうち、今回接続したいデータが格納されている バケットにチェックがついておらず、QuickSightから接続可能なアクセス権限がない状態となっていました。
アクセスしたいバケットのチェックボックスにチェックを入れ、[完了]をクリックします。
ダイアログが閉じて[QuickSight の AWS のサービスへのアクセス]ページに戻るので、[更新]をクリックしてアクセス権限を更新します。
権限を付与できたので、先程データ取得が失敗したデータセット画面を再度開くと、今度はAthena上のテーブルからデータが取得できました。
分析画面でもデータが取得できていますね。
おわりに
Amazon QuickSightからAthenaに接続してデータを取得しようとすると権限エラーで失敗してしまったため対処方法を確認してみました。
QuickSight初心者にとってはAthenaをデータソースとする際の最初のつまずきポイントではないでしょうか。
参考
以上