【问题标题】:Run queries in AWS Athena from boto3 gives bad permissions从 boto3 在 AWS Athena 中运行查询提供了错误的权限
【发布时间】:2021-05-02 16:50:33
【问题描述】:

当尝试从 python (boto3) 向 AWS Athena 运行查询时,出现以下错误:

botocore.exceptions.ClientError:发生错误 (AccessDeniedException) 调用 StartQueryExecution 时 操作:用户:arn:aws:iam::account-id:user/sa.prd 不是 授权执行:雅典娜:资源上的StartQueryExecution: arn:aws:athena:us-east-1:account-id:workgroup/primary

我无权访问 AWS 控制台。我还被告知还有另一个用户“sa.prd.athena”拥有正确的权限(“sa.prd”似乎没有发生这种情况)。

  • 是否可以使用 boto3 指定不同的用户?现在不要使用任何特定用户。
  • 如果不能使用其他用户,是否可以设置某种策略供 boto3 在运行时执行时使用(这是因为我无权访问 AWS 管理控制台)

谢谢,

BR

【问题讨论】:

    标签: python-3.x amazon-s3 aws-lambda boto3 amazon-athena


    【解决方案1】:

    AWS 中的用户由用于签署对 AWS API 的 API 调用的凭证确定。通常有多种方法可以将这些凭证传递给 AWS 开发工具包(尤其是 boto3)。

    它会在这些地方查找凭据,并从它们所在的第一个地方获取它们:

    1. 实例化客户端时的硬编码凭据
    2. 存储在环境变量中的凭据
    3. 存储在~/.aws/credentials 中的凭据(默认使用默认配置文件的凭据)
    4. 在 EC2/ECS/Lambda 上的实例元数据服务中

    由于您没有直接设置凭据,我假设它从 SDK 配置 (3) 中获取它们,因此您可以在实例化 Athena 客户端时覆盖它们,如下所示:

    import boto3
    
    athena_client = boto3.client(
        'athena',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN
    )
    

    这是一个改编的example from the documentation,您需要指定您的凭据而不是大写变量。

    尽管硬编码这些被认为是不好的做法,因此您可能希望使用环境变量来研究选项 (2),或者在本地 SDK 中设置另一个配置文件并告诉客户端使用它。相关信息可以在我上面链接的 boto3-docs 中找到。

    【讨论】:

    • 我有这些凭据可以在 dbeaver 中使用,所以一旦你回答就很清楚了:) 现在可以工作了。非常感谢。
    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 2016-07-06
    • 2021-02-21
    • 2021-02-19
    • 1970-01-01
    • 2020-02-24
    • 2019-11-23
    • 2017-11-20
    相关资源
    最近更新 更多