首页 文章

未授权执行:dynamodb:扫描Lambda

提问于
浏览
0

我需要扫描一个dynamodb数据库,但我一直收到这个错误:

“errorMessage”:“调用扫描操作时发生错误(AccessDeniedException):用户:arn:aws:sts :: 747857903140:assume-role / test_role / TestFunction无权执行:dynamodb:扫描资源:arn: AWS:dynamodb:美国东部-1:747857903140:表/ 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

2 回答

  • 1

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

    • IAM转到政策

    • 选择DynamoDB策略(尝试完全访问权限,然后返回并限制您的权限)

    • 来自策略操作 - 选择附加将其附加到Lambda使用的角色

  • 1

    尝试配置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!')
        }
    

相关问题