我已在 AWS Athena 的默认数据库中创建了一个
worldcities
表。
这是正在使用的 S3 存储桶:
桶 | 使用方法 |
---|---|
pp-雅典娜-结果 | 用于存储雅典娜结果 |
prateek-胶水测试 | athena 表的 csv 文件 |
我正在尝试使用 python boto3 SDK 从 AWS Lambda 对 Athena 表执行选择查询。我的问题是 Lambda 函数需要什么权限才能执行查询?
我创建了一个具有以下权限的角色。
Account-id
替换为我的帐户 ID:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"athena:StartQueryExecution",
"athena:GetQueryExecution",
"athena:GetQueryResults",
"s3:GetBucketLocation",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetTable",
"glue:GetTables",
"glue:GetPartition",
"glue:GetPartitions"
],
"Resource": [
"arn:aws:athena:us-east-1:<account-id>:workgroup/*",
"arn:aws:s3:::pp-athena-result/*",
"arn:aws:s3:::pp-athena-result",
"arn:aws:s3:::prateek-glue-test",
"arn:aws:s3:::prateek-glue-test/*",
"arn:aws:glue:us-east-1:<account-id>:catalog",
"arn:aws:glue:us-east-1:<account-id>:catalog/*",
"arn:aws:glue:us-east-1:<account-id>:database/*",
"arn:*:glue:us-east-1:<account-id>:table/*"
]
}
]
}
但是我收到错误消息:
表“awscatalog.default.worldcities”不存在
但是,一旦我允许 s3 存储桶上的所有操作,即
s3:*
操作,Lambda 函数就能够执行查询。
Amazon Athena 使用用户的 S3 权限来访问存储在 Amazon S3 中的数据。因此,调用 Athena 的 IAM 用户或 IAM 角色需要访问 Amazon S3 中的数据的权限。
虽然您的策略通过
GetObject
授予对对象的访问权限,但它还需要 s3:ListBucket
权限才能列出存储桶的内容(否则它不知道存在哪些对象!)。
请注意,
ListBucket
权限适用于存储桶本身,因此您需要引用不带/*
的存储桶 ARN:
s3:ListBucket
arn:aws:s3:::prateek-glue-test
(已在您的资源列表中)看看进展如何!