#amazon-web-services #amazon-s3 #aws-lambda
#amazon-веб-сервисы #amazon-s3 #aws-lambda
Вопрос:
Корзина s3 (статический веб-хостинг) имеет определенную политику, которая запрещает доступ всем, кто имеет отношение к определенному файлу.
Как я могу разрешить доступ к нему только определенной лямбда-функции? (используя только политику корзины)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Authentication",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::web/auth.html"
}
]
}
ОБНОВЛЕНИЕ : Изменение предыдущей политики на эту дает желаемый результат
{
"Version": "2012-10-17",
"Id": "Policy1477651215159",
"Statement": [
{
"Sid": "Console administration",
"Effect": "Allow",
"NotPrincipal": {
"AWS": "arn:aws:iam::XXXX:role/role_lambda"
},
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::web/auth.html"
}
]
}
Ответ №1:
Лямбда-функции выполняются в роли Выполнения. Вы можете создать роль IAM клиента для своей лямбда-функции. Смотрите это
Затем вы можете использовать эту роль IAM для предоставления доступа к этому объекту S3. См. Эту статью о том, как выполнить следующие действия.
Комментарии:
1. спасибо за это решение, но я хочу использовать только политику корзины
2. Вы также должны иметь возможность делать это с помощью политики корзины. Просто введите ARN роли Lambda:
arn:aws:iam::xxxxxxxxx:role/example_role_for_lambda
в свою политику корзины. Он переходит вPrincipal
узел.
Ответ №2:
Это CloudFormation
фрагмент. Вы можете разрешить своей Lambda
роли доступ к S3
использованию следующего IAM
заявления о политике:
"LambdaRolePolicy" : {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "Lambda",
"PolicyDocument": {
"Statement" : [ {
"Action" : [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect" : "Allow",
"Resource" : {
"Fn::Join": [ "", [
"arn:aws:s3:::",
{ "Ref": "S3Bucket" },
"/*"
] ]
}
} ]
},
"Roles" : [ { "Ref": "RootRole" } ]
}
}
S3Bucket
ресурс — это ваша S3
корзина и RootRole
Lambda
роль.