AWS lambda 执行 Athena 查询的权限

问题描述 投票:0回答:1

我已在 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-web-services amazon-s3 aws-lambda amazon-iam
1个回答
0
投票

Amazon Athena 使用用户的 S3 权限来访问存储在 Amazon S3 中的数据。因此,调用 Athena 的 IAM 用户或 IAM 角色需要访问 Amazon S3 中的数据的权限。

虽然您的策略通过

GetObject
授予对对象的访问权限,但它还需要
s3:ListBucket
权限才能列出存储桶的内容(否则它不知道存在哪些对象!)。

请注意,

ListBucket
权限适用于存储桶本身,因此您需要引用不带
/*
的存储桶 ARN:

  • 行动:
    s3:ListBucket
  • 资源:
    arn:aws:s3:::prateek-glue-test
    (已在您的资源列表中)

看看进展如何!

© www.soinside.com 2019 - 2024. All rights reserved.