允许Lambda函数将对象专门放入S3存储桶

时间:2017-08-19 21:10:18

标签: amazon-web-services amazon-s3 permissions aws-lambda policy

我当前的S3存储桶策略全局启用s3:getObjects3:putObject,我试图通过指定存储桶策略来限制它。

虽然s3:getObject是安全的,但我想将s3:putObject的访问权限仅限于特定的AWS Lambda函数。

该功能通过对CloudFront的HTTP请求匿名触发,因此不涉及AWS用户。

如何通过Lambda的ARN标识符限制访问?

现行政策:

{
    "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}/*"
        }
    ]
}

1 个答案:

答案 0 :(得分:2)

实际上,所需要的只是为Lambda创建访问策略。有预定义的,例如lambda_basic_execution

可以在AWS控制台内找到角色配置:

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

这是一个帮助我的具体配置:

{
    "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}/*"
        }
    ]
}