Amazon QuickSightでAthenaからのデータ取得が権限エラーで失敗するので対処してみた

2020.11.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、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のテーブルへちゃんと取得できています。 image

事象

データソースとなるAthenaの環境ができたので、QuickSightのマネジメントコンソールから接続してデータセットを作成してみます。

QuickSightのデータセット作成ページでデータソースとして[Athena]を選択します。 image

[データソース名]を指定して、[データソースを作成]をクリック。 image

[データベース]と[テーブル]を選択して、[データの編集/プレビュー]をクリック。 image

データセットの画面が開き、[読み込み中]と表示されてAthenaからのテーブルデータの取得が始まります。 image

しかし、1分ほど待つとプレビューを表示できませんと表示されデータの取得に失敗してしまいます。[保存して視覚化]をクリックしてみます。 image

保存したデータセットを使用した分析画面が開きます。適当なフィールドをクリックしてデータを読み込んでみます。 image

2,3分ほど待つとデータベースで SQL 例外が生成されました。と表示され、ここでもデータの取得に失敗してしまいます。[詳細を表示]をクリックしてみます。 image

次のようなエラー詳細が確認できました。

[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied

image

また、Athenaのコンソールから履歴タブを見てみると、データセット作成時に接続した1回目のクエリと、分析からデータソースへ接続した2回目のクエリの履歴が記録されており、いずれも[状態]は失敗となっています。1回目の[エラーの詳細]をクリックしてみます。 image

ここでもエラーの詳細が確認できました。

Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied

image

原因、対処

ここまで確認したエラー詳細にあった通り、QuickSightからS3バケットへのアクセス権限が不足していることが原因でした。以降、今回の事象の対処方法となります。

QuickSightのコンソールで右上のアイコンで開いたメニューから[QuickSightの管理]を選択します。(もしくはhttps://quicksight.aws.amazon.com/sn/adminを直接開きます。) image

管理画面が開くので、[セキュリティとアクセス権限]タブで、[QuickSight の AWS のサービスへのアクセス]の[追加または削除する]をクリックします。 image

QuickSightが接続可能なサービス一覧が表示されます。そのうち[Amazon S3]と[Amazon Athena]のチェックボックスにチェックが付いており接続可能となっていることを確認します。[Amazon S3]の[詳細]をクリックします。 image

[S3 バケットを選択する]をクリックします。 image

ダイアログが開き、QuickSightが接続可能なS3バケット一覧が表示されます。そのうち、今回接続したいデータが格納されている バケットにチェックがついておらず、QuickSightから接続可能なアクセス権限がない状態となっていました。 image

アクセスしたいバケットのチェックボックスにチェックを入れ、[完了]をクリックします。 image

ダイアログが閉じて[QuickSight の AWS のサービスへのアクセス]ページに戻るので、[更新]をクリックしてアクセス権限を更新します。 image

権限を付与できたので、先程データ取得が失敗したデータセット画面を再度開くと、今度はAthena上のテーブルからデータが取得できました。 image

分析画面でもデータが取得できていますね。 image

おわりに

Amazon QuickSightからAthenaに接続してデータを取得しようとすると権限エラーで失敗してしまったため対処方法を確認してみました。

QuickSight初心者にとってはAthenaをデータソースとする際の最初のつまずきポイントではないでしょうか。

参考

以上