J'ai la stratégie suivante sur un compartiment S3 créé avec le générateur de stratégie AWS pour permettre à un lambda, fonctionnant avec un rôle spécifique, d'accéder aux fichiers du compartiment. Cependant, lorsque j'exécute la Lambda, j'obtiens l'autorisation 403 refusée:
"errorMessage": "Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: <requestId>)",
"errorType": "com.amazonaws.services.s3.model.AmazonS3Exception",
La politique sur le compartiment S3:
{
"Version": "2012-10-17",
"Id": "Policy<number>",
"Statement": [
{
"Sid": "Stmt<number>",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/<roleName>"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::<bucketName>/*"
}
]
}
Quel est le problème avec la politique? Lamba s'exécute avec le rôle configuré dans la stratégie.
Un rôle attribué à une fonction AWS Lambda doit être créé un rôle AWS Lambda (sélectionné lors de la création d'un rôle dans la console IAM).
Rôles n'ont pas de principal car les autorisations sont affectées au service (dans ce cas, la fonction Lambda) qui utilise le rôle.
En outre, vous devez attribuer des autorisations sur le compartiment lui-même (par exemple pour répertorier le contenu) et sur le contenu du compartiment (par exemple, sur GetObject).
Ce serait quelque chose comme ceci:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123XXX:role/service-role/LAMBDA_ROLE_NAME"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
Après avoir bouclé pendant que je pouvais le faire fonctionner, le processus est le suivant:
Politique IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt*******",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::<bucket-name>"
]
}
]
}
et j'utilise cette politique sur le s3 seau
{
"Id": "Policy************",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt********",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket-name>/*",
"Principal": {
"AWS": [
"arn:aws:iam::*********:role/<lambda-function-name>"
]
}
}
]
}