【问题标题】:Athena query fails with: "Insufficient permissions to execute the query"Athena 查询失败并显示:“执行查询的权限不足”
【发布时间】:2020-01-18 09:56:46
【问题描述】:

我正在编写一个 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())}

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"
    }
]
}

根据角色,我认为它可以使用 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'
            }
        }
    )

任何见解都将不胜感激。

谢谢!

【问题讨论】:

  • 您能否分享您的函数所承担的 IAM 角色的名称?你能分享剩下的 lambda 代码吗?
  • 您的 S3 数据是否在使用加密的存储桶中?如果是这样,您可能需要授予 kms GenerateDataKey 权限并允许访问相关的 KMS 密钥,以便它可以解密数据。

标签: python amazon-s3 aws-lambda amazon-iam amazon-athena


【解决方案1】:

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

【讨论】:

  • 真的等一下吗?我正在解决这个问题。我需要做的就是等待?
  • 是的,这就是我所做的一切
  • 可以确认,等了一会儿,一切都开始工作了。有点头疼,如果有未知的延迟,我真的不相信实时自动化工作流程,但你是对的“只是等待”就是答案:)
  • 你等了多久?秒、分、...?
  • 小时,但可能只需要几分钟。
【解决方案2】:

指定权限可能会有所帮助。

我试过这样

- Effect: Allow
  Action:
    - "glue:GetTable"
  Resource:
    - "*"

在资源内部,您也可以指定存储桶名称。

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 2021-09-23
    • 2023-03-18
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多