Разрешить доступ к файлу только с определенного лямбда-кода [s3]

#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 роль.