Я использую конвейер обработки данных, выполненный изAccess Denied с помощью boto3 через AWS Lambda
S3 + SNS + Lambda
еще потому S3 не может отправить notificaiton из своего региона хранения, так что я использовал SNS для отправки S3 для Лямбды в другом регионе.
Функция лямбда закодированы с
from __future__ import print_function
import boto3
def lambda_handler (event, context):
input_file_bucket = event["Records"][0]["s3"]["bucket"]["name"]
input_file_key = event["Records"][0]["s3"]["object"]["key"]
input_file_name = input_file_bucket+"/"+input_file_key
s3=boto3.resource("s3")
obj = s3.Object(bucket_name=input_file_bucket, key=input_file_key)
response = obj.get()
return event #echo first key valuesdf
, когда я пытался сохранить и тест, я получил следующее сообщение об ошибке
{
"stackTrace": [
[
"/var/task/lambda_function.py",
20,
"lambda_handler",
"response = obj.get()"
],
[
"/var/runtime/boto3/resources/factory.py",
394,
"do_action",
"response = action(self, *args, **kwargs)"
],
[
"/var/runtime/boto3/resources/action.py",
77,
"__call__",
"response = getattr(parent.meta.client, operation_name)(**params)"
],
[
"/var/runtime/botocore/client.py",
310,
"_api_call",
"return self._make_api_call(operation_name, kwargs)"
],
[
"/var/runtime/botocore/client.py",
395,
"_make_api_call",
"raise ClientError(parsed_response, operation_name)"
]
],
"errorType": "ClientError",
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"
}
Я настроил лямбда роль с
full S3 access
и набор ведро на моем целевом ковше
everyone can do anything(list, delete, etc.)
Кажется, что я не установил политику хорошо.
Это довольно расплывчато. Не могли бы вы указать, как можно решить эту проблему? –
Две возможности 1. Разрешение на уровне объекта S3 для чтения отрицается 2. Роль, связанная с лямбдой, не имеет разрешения на получение/чтение объектов S3. – omuthu
Для меня это помогло добавить в политику политику 's3: GetObject'. –