Я создал лямбда-функцию, которая должна загружать данные в DynamoDB, когда файл загружается в корзину S3.Тем не менее, я получаю «Операция GetObject: разрешение отказано» в CloudWatch, когда файл загружается в корзину.К лямбда-функции прикреплена роль IAM с такими политиками: AmazonlambdaFullAccess, AmazonS3FullAccess, AmazonCloudWatchLogsFullAccess, AmazonDynamoDBFullAccess.Он имеет lambda.amazonaws.com в качестве доверенных лиц.К корзине не прикреплены политики.
import boto3
import json
import urllib
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('wireshark')
s3 = boto3.client('s3')
tests3 = boto3.resource(u's3')
def lambda_handler(event, context):
source_bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.quote_plus(event['Records'][0]['s3']['object']['key'])
copy_source = {'Bucket':source_bucket , 'Key':key}
print(event)
print("Log stream name : ", context.log_stream_name)
print("Log group name : ", context.log_group_name)
print("Request Id:", context.aws_request_id)
print("Mem. limit(MB): ", context.memory_limit_in_mb)
#just print function
print("Log stream name : ", context.log_stream_name)
print("Log group name : ", context.log_group_name)
print("Request Id:", context.aws_request_id)
print("Mem. limit(MB): ", context.memory_limit_in_mb)
try:
print("Using waiter to waiting for object to persist thru s3 service")
waiter = s3.get_waiter('object_exists')
waiter.wait(Bucket=source_bucket, Key=key)
print("Accessing the receied file and reading the same")
bucket = tests3.Bucket(u'awslambdas3test2')
obj = bucket.Object(key=key)
response = obj.get()
print("response from file object")
print(response)
В Cloudwatch: при вызове операции GetObject произошла ошибка (AccessDenied): Access Denied.Я прошел через «симулятор политик» от AWS.Эта роль IAM должна быть в состоянии получить GetObject из любой корзины S3.Спасибо за вашу помощь.
Код в основном из GitHub .