我是AWS的新手。
我有一个用户帐户和两个角色,一个角色用于生产,一个角色用于测试。

通常,我登录到我的帐户并切换为prod角色以运行一些简单的选择查询。

现在我想在PyAthena的Python中本地使用Athena。
我已经尝试了PyAthena文档中的以下资源:

from pyathena import connect
import pandas as pd

conn = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',
               aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
               s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',
               region_name='us-west-2')
df = pd.read_sql("SELECT * FROM many_rows", conn)
print(df.head())


但总是有错误

An error occurred (AccessDeniedException) when calling the StartQueryExecution operation: User: arn:aws:iam::xxxxxx:user/xxxx@xxxxx is not authorized to perform: athena:StartQueryExecution on resource: arn:aws:athena:ap-southeast-2:xxxxx:workgroup/primary


如果我使用用户帐户运行相同的查询而不切换角色,这将是确切的错误。

我也尝试添加profile name parameter in connect,但是即使正确识别了env,也仍然无法正常工作。

有人可以帮助我如何在本地python代码中执行“切换”角色步骤吗?

最佳答案

看来问题出在原因是缺少角色,而不是profile_name参数。如果查看pyathena中的Connection类,可以在初始化连接时指定一个role_arn变量。 Here's the line I'm talking about.

您可能想以这种方式尝试-

conn = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',
               aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
               s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',
               region_name='us-west-2',
               role_arn='<your arn here'>)


我自己没有测试过,因为我没有Athena设置。

07-24 09:51