簡體   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