1

我正在使用下面的代码从 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 访问权限、DynamoDB 完全访问权限和 DyanamoDB 读取访问权限但在运行代码时我仍然遇到错误

 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

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

4

2 回答 2

0

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

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

于 2021-01-19T14:32:18.767 回答
0

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

    {
      "Effect": "Allow",
      "Action": [
          "dynamodb:BatchGetItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:ListTables",
          "dynamodb:Query",
          "dynamodb:Scan"
      ],
      "Resource": [<dynamodb table ARN>]
    }
于 2021-08-17T18:03:40.927 回答