[英]Access AWS Athena from Python Lambda in different account
我有两个账户 A 和 B。S3 Buckets 和 Athena View 在账户 A 中,Lambda 在账户 B 中。我想从我的 Lambda 调用 Athena。 我还允许在 S3 存储桶策略中使用 Lambda 执行角色。 当我尝试从 Lambda 调用数据库时,它给我的错误是'Status': {'State': 'FAILED', 'StateChangeReason': 'SYNTAX_ERROR: line 1:15: Schema db_name does not exist'
以下是我的 Lambda 代码:
import boto3
import time
def lambda_handler(event, context):
athena_client = boto3.client('athena')
client_exc = athena_client.start_query_execution(
QueryString='SELECT * FROM db_name.athena_view',
ResultConfiguration={'OutputLocation': 's3://my-athena-out-bucket/'}
)
resp= athena_client.get_query_results(QueryExecutionId=client_exc['QueryExecutionId'])
请指导。
做以下-
账户(A) 创建一个可以访问 Athena 和 S3 存储桶的 IAM 角色,并为账户 B 中的角色添加权限以调用此角色的承担角色。
账户 (B) 创建一个 IAM 角色并将其分配给 Lambda,该角色将承担账户 A 的角色,该角色可以临时访问 Athena 和 S3。
请参阅以下链接 - https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html
你有:
Account-A
Amazon S3 存储桶Account-A
Amazon AthenaAccount-B
AWS Lambda 函数 (这与您之前的问题不同,您在之前的问题中让 Athena 在Account-B
访问Account-A
S3。在这种情况下, Account-A
的 Bucket 策略足以授予在Account-B
运行的 Athena 访问 S3 的权限。)
Amazon Athena 使用调用它的 IAM 用户或 IAM 角色的权限运行。 因此,使用 Athena 的用户或角色需要访问 Amazon S3 中的数据的权限。 在您之前的问题中,这是通过存储桶策略完成的,该策略为 Lambda 提供访问不同账户中存储桶的权限。
但是,在这个问题中,您希望在另一个账户中使用 Amazon Athena 的一个账户中的 Lambda 。 无法向其他帐户中的用户授予 Athena 访问权限。 因此,您的 Lambda 函数需要在 Athena 账户中扮演一个角色。
所以:
Account-A
(使用 Athena)中创建一个 IAM 角色,授予使用 Athena和相关 Amazon S3 存储桶的访问权限Account-B
的 Lambda 函数:
AssumeRole()
来“成为”上述角色Session
,用于为 Athena 创建 boto3 客户端这将导致 Lambda 可以访问Account-A
Athena,包括任何已创建的表和视图。
如果您不需要在 Athena 中定义的现有表和视图,那么您可以在与Lambda相同的账户中使用 Athena,但源 S3 存储桶需要根据您之前的问题授予对 Lambda 的 IAM 角色的访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.