使用AWS Lambda和Amazon API Gateway快速调整图像大小

时间:2017-11-20 03:18:35

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

我按照此页面上的教程HERE 但是当我试图获得一张重新调整大小的图片时,我得到一个“拒绝访问”

好:https://xxxx.amazonaws.com/mybucket/test.jpg
错误:https://xxxx.amazonaws.com/mybucket/300x300/test.jpg(拒绝访问)

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
</Error>

在我的设置下方:

Bucket策略编辑器

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*"
        }
    ]
}

当我创建触发器时,我选择了Security:OPEN。我对 YOUR_API_HOSTNAME_HERE 感到困惑。在示例中,api主机名是h3ll0w0rld?

3 个答案:

答案 0 :(得分:3)

GetObject操作是不够的。您应该授予lambda权限以列出内容。另请注意我提出的Resources部分。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Principal": { "Service": "lambda.amazonaws.com" },
            "Resource": [
                "arn:aws:s3:::mybucket/*",
                "arn:aws:s3:::mybucket"
            ]
        }
    ]
}

答案 1 :(得分:1)

@AbdennourTOUMI你是对的。 “桶政策”必须是:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::bucketNAME/*" } ] }

答案 2 :(得分:0)

您确定您的存储桶包含包含该文件的300x300文件夹。因为,正如@ Michael-sqlbot所说,它可以表明该文件不存在。 是的,在示例中,api主机名是h3ll0w0rld.execute-api.us-west-2.amazonaws.com。 要获得已调整大小的图片,您需要使用静态网站托管端点 - http://bucket_name.s3-website-us-west-2.amazonaws.com/300x300/test.jpg 然后在你的桶中创建一个300x300的文件夹,其中包含&#39; test.jpg&#39;