J'utilise le pipeline de traitement de données construit deAccès refusé à l'aide boto3 par aws Lambda
S3 + SNS + Lambda
becasue S3 ne peut pas envoyer notificaiton hors de sa zone de stockage, donc je fait usage de SNS envoyer Notification S3 à Lambda dans une autre région.
La fonction lambda codé avec
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
quand je courais sauver et test, je suis l'erreur suivante
{
"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"
}
J'ai configuré le lambda rôle avec
full S3 access
et ensemble politique de seau sur mon seau cible
everyone can do anything(list, delete, etc.)
Il semble que je n'ai pas bien défini la politique.
C'est assez vague. Pourriez-vous éventuellement indiquer comment on pourrait résoudre ce problème? –
Deux possibilités 1. L'autorisation de niveau d'objet S3 pour la lecture est refusée 2. Le rôle attaché à lambda n'a pas l'autorisation d'obtenir/lire les objets S3 – omuthu
Pour moi, j'ai aidé à ajouter 's3: GetObject' à la politique. –