Athena 查询失败并显示:“没有足够的权限来执行查询”

NSA*_*NSA 7 python amazon-s3 amazon-iam aws-lambda amazon-athena

我正在编写一个 lambda 函数,该函数应该对 Athena 发起查询,当我执行 start_query_execution 时,它会成功,但当我稍后尝试获取查询状态时,我会看到以下内容:

'Status': {'State': 'FAILED', 'StateChangeReason': 'Insufficient permissions to execute the query. User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/test_role/test-audit is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:XXXXXXXXXXXX:catalog ', 'SubmissionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 18, 749000, tzinfo=tzlocal()), 'CompletionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 31, 197000, tzinfo=tzlocal())}
Run Code Online (Sandbox Code Playgroud)

为 lambda 分配了一个 IAM 角色,该角色具有以下权限:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:*",
            "dynamodb:*",
            "kinesis:*",
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "cloudwatch:PutMetricData",
            "athena:*",
            "glue:*",
            "redshift:*"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
]
}
Run Code Online (Sandbox Code Playgroud)

根据角色,我认为它可以使用 Athena 对此帐户中的任何 S3 存储桶执行任何需要的操作,但它失败了。所有 S3 资源都与执行代码的 lambda 以及 athena 表位于同一帐户中。启动查询配置如下:

response = athena.start_query_execution(
        QueryString=query,
        ClientRequestToken=hashlib.md5(query.encode()).hexdigest(),
        QueryExecutionContext={
            'Database': 'test'
        },
        ResultConfiguration={
            'OutputLocation': 's3://athena-test.query.results/test/',
            'EncryptionConfiguration': {
                'EncryptionOption': 'SSE_S3'
            }
        }
    )
Run Code Online (Sandbox Code Playgroud)

任何见解将不胜感激。

谢谢你!

NSA*_*NSA 4

事实证明,除了 AWS 控制台中的陈旧行为之外,没有任何问题。