无权执行:dynamodb:Scan Lambda
Not authorized to perform: dynamodb:Scan Lambda
我需要扫描 dynamodb 数据库,但我一直收到此错误:
"errorMessage": "An error occurred (AccessDeniedException) when
calling the Scan operation: User:
arn:aws:sts::747857903140:assumed-role/test_role/TestFunction is not
authorized to perform: 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
尝试将 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!')
}
你的 lambda 角色是否应用了 DynamoDB 策略?
转到
- IAM 转到策略
- 选择 DynamoDB 策略(尝试完全访问,然后返回并限制您的权限)
- 来自策略操作 - Select 附加 将其附加到角色
由您的 Lambda 使用
确保您没有将默认角色(自动生成的)应用到您的 lambda,您需要创建一个具有 lambda 基本执行权限的角色,并在创建您的 lambda 时或在左侧的配置窗格中附加它选择权限并更改它。
我需要扫描 dynamodb 数据库,但我一直收到此错误:
"errorMessage": "An error occurred (AccessDeniedException) when calling the Scan operation: User: arn:aws:sts::747857903140:assumed-role/test_role/TestFunction is not authorized to perform: 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
尝试将 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!')
}
你的 lambda 角色是否应用了 DynamoDB 策略?
转到
- IAM 转到策略
- 选择 DynamoDB 策略(尝试完全访问,然后返回并限制您的权限)
- 来自策略操作 - Select 附加 将其附加到角色 由您的 Lambda 使用
确保您没有将默认角色(自动生成的)应用到您的 lambda,您需要创建一个具有 lambda 基本执行权限的角色,并在创建您的 lambda 时或在左侧的配置窗格中附加它选择权限并更改它。