微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 boto3 在 AWS Athena 中运行查询会提供错误的权限

如何解决从 boto3 在 AWS Athena 中运行查询会提供错误的权限

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

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

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

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

谢谢,

BR

解决方法

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 中找到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。