発生している事象
QuickSight の管理画面で Athena への権限付与の際、フェデレーテッドクエリ用の Lambda を選択することができません。
やりたいこと
QuickSight で DynamoDB のデータを可視化したいです。
実施・調査したこと
以下のブログとドキュメントを参考に、QuickSight で DynamoDB のデータを可視化しようとしています。
- Amazon Athena Federated Query経由でAmazon DynamoDBのデータをAmazon QuickSightで可視化するハンズオンの公開 | Amazon Web Services ブログ
- Amazon Athena DynamoDB コネクタ - Amazon Athena
Athena ⇒ DynamoDB へのフェデレーテッドクエリは成功し、Athena で DynamoDB のデータをクエリできるようになりました。
しかし、QuickSight の管理画面で Athena への権限付与の際、フェデレーテッドクエリ用の Lambda を選択することができません。
ブログからダウンロードできる手順や Web 検索して出てきた情報では、Athena でデータソースを作成する際に Lambda 関数を作成する手順があるのですが、画面が大きく変わっており、同様の手順が実施できません。(Lambda 関数を作成する画面が出てこない)
それでも DynamoDB のデータソースは作成でき、以下のように DynamoDB への Lambda 関数が作成され、フェデレーテッドクエリは成功しました。
Amazon Athena DynamoDB コネクタ - Amazon Athena を見ると、DynamoDB コネクタの設定は二種類あるようです。
- Glue connections (recommended)
- Legacy connections
どうも検索して出てくる情報は、Legacy connections の設定を前提にしているようです。
以下の注記がありました。
2024 年 12 月 3 日以降に作成された Athena データソースコネクタは、AWS Glue 接続を使用します。
DynamoDB、S3 バケット、Lambda 関数、Athena、Glue、QuickSight はすべて東京リージョンで作成しています。QuickSight の有効化リージョンも東京リージョンです。
Lambda 関数 athenafederatedcatalog_athena_dynamodb
には以下を設定しています。
-
環境変数
- key: glue_connection
- value: athenafederatedcatalog_athena_dynamodb(Glue Connections の名前)
-
実行ロール
athenafederatedcatalog-athena-dynamodb-FunctionRole-5mWjCq7XXXXX
- AWSLambdaBasicExecutionRole
- FunctionExecutionPolicy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:DescribeTable", "dynamodb:ListSchemas", "dynamodb:ListTables", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PartiQLSelect", "glue:GetTableVersions", "glue:GetPartitions", "glue:GetTables", "glue:GetTableVersion", "glue:GetDatabases", "glue:GetTable", "glue:GetPartition", "glue:GetDatabase", "athena:GetQueryExecution" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObjectVersion", "s3:PutObject", "s3:PutObjectAcl", "s3:GetLifecycleConfiguration", "s3:PutLifecycleConfiguration", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::federated-spill-123456789012-ap-northeast-1", "arn:aws:s3:::federated-spill-123456789012-ap-northeast-1/*" ], "Effect": "Allow" }, { "Action": [ "glue:GetConnection" ], "Resource": [ "arn:aws:glue:ap-northeast-1:123456789012:connection/athenafederatedcatalog_athena_dynamodb", "arn:aws:glue:ap-northeast-1:123456789012:catalog" ], "Effect": "Allow" } ] }
-
リソースベースのポリシーステートメント
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "AllowQuickSightInvoke",
"Effect": "Allow",
"Principal": {
"Service": "quicksight.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-1:123456789012:function:athenafederatedcatalog_athena_dynamodb",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
}
}
}
]
}
DynamoDB のフェデレーテッドクエリ用 Athena を選択してデータソース作成を進めると以下のようなエラーになりました。
sourceErrorMessage
[Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. Failed to invoke lambda function due to com.amazonaws.services.lambda.model.AWSLambdaException: User: arn:aws:sts::123456789012:assumed-role/aws-quicksight-service-role-v0/QuickSight-RoleSession-1743610945436 is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:ap-northeast-1:123456789012:function:athenafederatedcatalog_athena_dynamodb because no identity-based policy allows the lambda:InvokeFunction action (Service: AWSLambda; Status Code: 403; Error Code: AccessDeniedException; Request ID: c83fbe4d-c2b9-4eec-8d82-12cdbb2081b3; Proxy: null) [Execution ID not available]