StartQueryExecution操作:无法验证/创建输出桶

15
我正在尝试使用Python在Athena上执行查询。 示例代码。

我想使用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": "*"
        }
    ]
}

遇到了完全相同的问题。为什么AWS允许这样的复杂性?在控制台中没有理由允许这种情况,但在CLI中不允许。 - Steve Gon
有关此事有任何更新吗?您能够解决这个问题吗?我也遇到了类似的情况。 - Prakash
2个回答

15

我遇到了同样的问题-随机故障。问题最终被发现是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


1
这对我也起作用了! - Nikunj
谢谢 - 这最近开始影响我 - 在使用相同的IAM配置和Athena v2工作组一年多后 - 突然在过去几周中,由于所述错误,查询开始间歇性地失败,添加此权限似乎有所帮助。 - mbafford

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接