【问题标题】:AWS Athena PyAthena AccessDeniedExceptionAWS Athena PyAthena AccessDeniedException
【发布时间】:2019-12-08 02:43:25
【问题描述】:

我是 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 代码中执行“切换”角色步骤吗?

【问题讨论】:

    标签: python amazon-s3 amazon-athena pyathena


    【解决方案1】:

    问题似乎是由于缺少角色而不是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 设置。

    【讨论】:

    • 谢谢@boltthrower,效果很好。我之前实际上尝试过添加此参数,但没有奏效。因此,在阅读您的答案后,我重新检查了我的 role_arn 并填写了一个正确的,它终于奏效了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2016-10-10
    • 2018-12-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多