python - StartQueryExecution 操作:无法验证/创建输出存储桶
问题描述
我正在尝试使用 python 对 Athena 执行查询。
示例代码
client = boto3.client(
'athena',
region_name=region,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY
)
execution = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': database
},
WorkGroup=workgroup,
ResultConfiguration={
'OutputLocation': S3_OUTPUT_LOCATION
}
)
这是工作代码,但我遇到了一个不寻常的情况。
- 有一天它会抛出一个 InvalidRequestException 错误 Error
InvalidRequestException: An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: Unable to verify/create output bucket <BUCKET NAME>
- 根据 DevOps 应用程序拥有所有权限,它应该可以工作。
- 我们尝试在 AWS Athena 控制台(查询编辑器)上执行相同的查询。它在那里工作。
- 然后我们重新运行python脚本,它没有抛出任何错误。
- 但是在第二天,python 脚本开始抛出同样的 InvalidRequestException 错误。
- 然后我们在 AWS Athena 控制台(查询编辑器)上执行相同的查询并重新运行 python 脚本,它开始工作。
我们观察了几天这种情况,每 24 小时 python 脚本抛出错误,然后我们在 Athena 控制台(查询编辑器)上执行查询并重新运行 python 脚本。我不明白为什么会这样,是否有任何权限问题。
权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"athena:GetWorkGroup",
"athena:StartQueryExecution",
"athena:ListDatabases",
"athena:StopQueryExecution",
"athena:GetQueryExecution",
"athena:GetQueryResults",
"athena:GetDatabase",
"athena:GetDataCatalog",
"athena:ListQueryExecutions",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<BUCKET NAME>",
"arn:aws:s3:::<BUCKET NAME>/*",
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"athena:UpdateWorkGroup",
],
"Resource": [
"arn:aws:s3:::<BUCKET NAME>/*",
"arn:aws:s3:::<BUCKET NAME>",
"arn:aws:athena:*:<BUCKET NAME>/<PATH>",
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"athena:ListDataCatalogs",
"s3:ListAllMyBuckets"
],
"Resource": "*"
}
]
}
解决方案
我遇到了同样的问题 - 随机失败。问题原来是s3:GetBucketLocation
策略配置错误。它与资源指向 s3 存储桶的其他 s3 操作(包括路径)捆绑在同一个集群中。它不能以这种方式工作。
我将其修复如下,现在可以使用。
- Effect: Allow
Action:
- s3:GetBucketLocation
Resource:
- arn:aws:s3:::*
- Effect: Allow
Action:
- s3:PutObject
- s3:GetObject
Resource:
- arn:aws:s3:::<BUCKET NAME>/<PATH>/*
请参阅文档:https ://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html
推荐阅读
- ruby-on-rails - SQLite3::ConstraintException: NOT NULL 约束失败:items.title: INSERT INTO "items" ("image", "created_at", "updated_at") VALUES (?, ?, ?)
- javascript - 将 GrapesJS 与 React JS 集成
- spring - Spring + H2 嵌入式 sql 脚本运行不正常
- dockerfile - 从一个 dockerfile 构建和部署,还是为每个目的使用不同的文件?
- jmeter - Java jar 文件(JWT 令牌生成器)需要在 jmeter 中导入,并且必须通过运行方法生成令牌并在一个测试步骤中使用它
- php - JQuery Ajax:购物车项目中的onchange应该改变总值
- android - 有没有办法在 Nativescript Vue 中使用 toString 和 Split 方法?
- emacs - TAB 键在 emacs 的暂存缓冲区中不起作用
- swift - 如何根据相同的id添加两行TableView
- python - 如何在不合并的情况下基于熊猫中的多个键进行映射