Краткое описание моей настройки.
- У меня есть корзина AWS S3 с доступом
Not Public
, который называется myBucket
- У меня есть дистрибутив CloudFront через
myBucket
- Я создал лямбда-функцию (серверный обработчик изображений)
Желаемое поведение состоит в том, что мои изображения доступны только через мой дистрибутив CloudFront (а не напрямую черезS3 URL), и что я должен иметь возможность вызывать свою лямбда-функцию через URL-адрес CloudFront.
Теперь получается, что я могу получить свое изображение следующим образом:
https://d32by75bmg47jh.cloudfront.net/portrait.jpeg
Но я не могу получить изображение, вызвав лямбду:
https://d32by75bmg47jh.cloudfront.net/fit-in/500x500/portrait.jpeg
Я получаю ошибку Access Denied при попытке вызвать его с помощью лямбды.
Моя политика Bucket выглядит следующим образом:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E2FGH21TNURTU9"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myBucket/*"
}
}
В моем Lambda Console
настроена функция Lambda для использования роли выполнения: lambda_basic_execution .В IAM Console
эта политика выглядит следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::myBucket/*"
}
]
}
Почему я все еще получаю Отказ в доступе, когда пытаюсь получить доступ к своему изображению через лямбду?