0

Ma stratégie de compartiment S3 active globalement s3:getObject et s3:putObject globalement et j'essaie de limiter cela en spécifiant une stratégie de compartiment.Autorisation d'une fonction Lambda pour placer exclusivement des objets dans un compartiment S3

Alors que s3:getObject est sûr, je voudrais limiter l'accès à s3:putObject uniquement à une fonction AWS Lambda particulière.

La fonction est déclenchée de manière anonyme via une requête HTTP vers CloudFront, donc aucun utilisateur AWS n'est impliqué. Comment limiter l'accès via l'identifiant ARN de Lambda?

La politique actuelle:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "PublicReadGetObject", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:getObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     }, 
     { 
      "Sid": "LambdaPutObject", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:putObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     } 
    ] 
} 

Répondre

0

En fait, tout ce qui était nécessaire était de créer une politique d'accès pour Lambda. Il y en a des prédéfinis, comme lambda_basic_execution.

La configuration de rôle se trouvent dans la console AWS à l'intérieur:

Lambda > Functions > {name} > Roles IAM > Roles

Voici une configuration spécifique qui m'a aidé:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "logs:CreateLogGroup", 
       "logs:CreateLogStream", 
       "logs:PutLogEvents" 
      ], 
      "Resource": "arn:aws:logs:*:*:*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     } 
    ] 
} 
+0

Si je lis bien votre question initiale, vous ne pouvez pas restreindre qui/quoi écrit dans ce compartiment S3 simplement en créant un rôle IAM pour votre fonction Lambda. Tout ce qui fait est de restreindre ce que la fonction Lambda peut faire. Si vous voulez que la fonction Lambda et uniquement la fonction Lambda puissent écrire dans ce compartiment, vous avez besoin de quelque chose de plus (par exemple, lancez Lambda dans un VPC et modifiez la stratégie de compartiment S3 pour restreindre l'accès à ce VPC). – jarmod

+0

Après avoir enlevé le '' Action ":" s3: putObject ",' Déclaration I de la politique du compartiment, je ne suis plus en mesure d'écrire anonymement dans le compartiment (seulement lorsqu'il est connecté en tant que propriétaire). Ajouter "Action": "s3: PutObject", 'dans la politique IAM de Lambda lui permet d'écrire dans le compartiment. C'est ce que je voulais au départ, pourquoi aurais-je besoin de plus? –

+0

Ça a l'air bien. Vous devriez accepter votre réponse. – jarmod