繁体   English   中英

使用 Boto3 从 DynamoDB 获取时出错

[英]error while fetching from DynamoDB using Boto3

我正在使用以下代码从 dyanoDB 读取

 import boto3
 session = boto3.Session(
           aws_access_key_id='XXXXXXXXXXXXXXXXXXXX',
           aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXX')

 dynamodb = session.resource('dynamodb')
 table = dynamodb.Table('Employee')

 resp = table.get_item(Key={"Empid": 551554297})

此用户具有 AWSAdmin 访问权限、DynamoDBfull 访问权限和 DyanamoDBread 访问权限但是我在运行代码时仍然低于错误

 botocore.exceptions.ClientError: An error occurred (AccessDeniedException) 
 when calling the GetItem operation: User: 
 arn:aws:iam::944198216610:user/cduser is not authorized to perform: 
 dynamodb:GetItem on resource: arn:aws:dynamodb:us-east- 
 1:944198216610:table/Employee

有人可以帮我弄清楚我在这里做错了什么吗?

我发现使用 docker 容器,即使您在构建期间将访问和秘密密钥设置为环境变量,您仍然必须在脚本中明确声明区域、key_id 和 access_key:例如。 boto3.resource('dynamodb', region_name=<>, aws_access_key_id=<>, aws_secret_access_key=<>)

将这些设置为脚本的纯文本的另一种方法是将它们存储在 ~/.aws/config 和 ~/.aws/credentials 中,或者更好的是,作为秘密安装。

我在使用 lambda 函数的默认角色时遇到了类似的问题。 在我的案例中,向策略添加额外的 dynamodb 语句解决了这个问题。

    {
      "Effect": "Allow",
      "Action": [
          "dynamodb:BatchGetItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:ListTables",
          "dynamodb:Query",
          "dynamodb:Scan"
      ],
      "Resource": [<dynamodb table ARN>]
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM