2

我需要扫描 dynamodb 数据库,但我不断收到此错误:

“errorMessage”:“调用扫描操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::747857903140:assumed-role/test_role/TestFunction 无权执行:dynamodb:Scan on resource:arn:aws :dynamodb:us-east-1:747857903140:table/HelpBot"

这是我的 Lambda 代码(index.py):

import json
import boto3

client = boto3.resource('dynamodb')
table = client.Table('HelpBot')

def handler(event, context):
    table.scan()
    return {
        "statusCode": 200,
        "body": json.dumps('Hello from Lambda!')
    }

这是我的 SAM 模板(template.yml):

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: python3.6
      Policies:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Action:
          - dynamodb:Scan
          Resource: arn:aws:dynamodb:us-east-1:747857903140:table/HelpBot
4

3 回答 3

10

您的 lambda 角色是否应用了 DynamoDB 策略?

  1. IAM 转到政策
  2. 选择 DynamoDB 策略(尝试完全访问,然后返回并限制您的权限)
  3. 从策略操作 - 选择附加 将其附加到您的 Lambda 使用的角色
于 2018-10-04T14:50:21.757 回答
0

尝试将 boto 客户端配置为直接在 lambda 函数中使用您的 IAM 角色。

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html

import json
import boto3

client = boto3.resource(
    'dynamodb',
    aws_access_key_id = ACCESS_KEY,
    aws_secret_access_key = SECERT_KEY
)

table = client.Table('HelpBot')

def handler(event, context):
    table.scan()
    return {
        "statusCode": 200,
        "body": json.dumps('Hello from Lambda!')
    }
于 2018-10-04T13:42:41.457 回答
0

确保您没有将默认角色(自动生成)应用于您的 lambda,您需要创建一个具有 lambda 基本执行权限的角色,并在创建 lambda 或在配置窗格中附加此权限,在左侧选择权限并更改它.

于 2021-05-20T22:31:14.547 回答