Течение идет так...
S3->SNS->SQS->Lambda->S3 в AWS.
Я загружаю файл Excel с некоторыми данными в S3 Bucket. Когда он загружен, событие запускается из S3, а затем отправляет сообщение в SNS. Из SNS сообщение отправляется в SQS. Теперь SQS будет запускать лямбда-функцию, написанную на .NET 6.0. Наконец, Lambda обработает файл Excel и сохранит обработанный вывод в том же сегменте S3 с другим именем.
В этом я могу подняться до SQS. Теперь сообщения находятся в режиме полета. Когда я проверяю Cloud Watch, я вижу следующую ошибку Access Denied
...
Как исправить эту ошибку? Любые предложения будут ценны.
Ниже приведен журнал из CloudTrail...
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "PRINCIPALID",
"arn": "arn:aws:iam::111111111111:user/userid999",
"accountId": "111111111111",
"accessKeyId": "AKIAUGBVTP5DDSSZLYFK",
"userName": "userid999"
},
"eventTime": "2023-04-11T13:59:12Z",
"eventSource": "lambda.amazonaws.com",
"eventName": "UpdateFunctionConfiguration20150331v2",
"awsRegion": "us-east-1",
"sourceIPAddress": "88.99.88.99",
"userAgent": "AWSToolkitPackage.VS2022/1.40.0.0 .NET_Runtime/4.0 .NET_Framework/4.0 OS/Microsoft_Windows_NT_10.0.22621.0 ClientId/65c4ccccccc0c0c9c733 ClientAsync",
"requestParameters": {
"functionName": "MyLambda",
"vpcConfig": {
"subnetIds": [],
"securityGroupIds": [],
"ipv6AllowedForDualStack": false
},
"environment": {}
},
"responseElements": {
"functionName": "MyLambda",
"functionArn": "arn:aws:lambda:ap-south-1:111111111111:function:MyLambda",
"runtime": "dotnet6",
"role": "arn:aws:iam::111111111111:role/service-role/MyLambda-role-test",
"handler": "AWSLambdaExcel::AWSLambdaExcel.Function::MyLambda",
"codeSize": 6723236,
"description": "",
"timeout": 15,
"memorySize": 512,
"lastModified": "2023-04-11T13:59:12.000+0000",
"codeSha256": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"version": "$LATEST",
"vpcConfig": {
"subnetIds": [],
"securityGroupIds": [],
"vpcId": "",
"ipv6AllowedForDualStack": false
},
"environment": {},
"tracingConfig": {
"mode": "PassThrough"
},
"revisionId": "111111-2737-1111-afb4-1111",
"state": "Active",
"lastUpdateStatus": "InProgress",
"lastUpdateStatusReason": "The function is being created.",
"lastUpdateStatusReasonCode": "Creating",
"packageType": "Zip",
"architectures": [
"x86_64"
],
"ephemeralStorage": {
"size": 512
},
"runtimeVersionConfig": {
"runtimeVersionArn": "arn:aws:lambda:us-east-1-1::runtime:45f8a281bf9e1111111111111111111ca96fcdfc615f54dcf70554a9e5"
}
},
"requestID": "3e33acd0-6190-41cb-8301-uujjhhhggg",
"eventID": "0e30d3e1-7777-8888-9165-9999999999",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "11111111111",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.2",
"cipherSuite": "3333333333333333",
"clientProvidedHostHeader": "lambda.us-east-1.amazonaws.com"
}
}
Похоже, у вашей лямбда-функции нет прав на загрузку файла в новую корзину. Если вам нужна дополнительная информация о конкретной ошибке разрешения, вы должны проверить Cloudtrail и найти свою лямбда-функцию, чтобы увидеть сгенерированные события.
Как только вы обнаружите необходимое разрешение, вы можете обновить роль, прикрепленную к вашей лямбда-функции, чтобы предоставить доступ к этому сегменту. Еще одна вещь, которую нужно проверить, — разрешают ли права доступа к лямбда-функции. Если он находится в той же учетной записи, он должен по умолчанию.
Я использую тот же S3 Bucket с полным разрешением для вошедшего в систему идентификатора пользователя для отправки выходного файла Excel ответа. Кроме того, я могу успешно запустить лямбда-функцию локально в Visual Studio. Единственное, что я сделал, это создал новую роль для Lambda, а для всех остальных SNS, SQS, S3 я использовал идентификатор пользователя, вошедшего в систему.
Обновлен вопрос с журналом CloudTrail. Не могли бы вы мне помочь?
К сожалению, это мало что нам говорит. Что содержит роль лямбда для своих разрешений? Вы сказали, что «все, что вы сделали, это создали новую роль для лямбда», что дает нам хорошее представление о том, в чем заключается проблема.
Теперь я понял вашу точку зрения. Но не могли бы вы сказать мне, какие разрешения я должен предоставить в IAM для этой роли Lambda? Так что, я бы использовал наименьшие разрешения здесь :)
Каковы разрешения IAM в роли
arn:aws:iam::111111111111:role/service-role/MyLambda-role-test
?