【问题标题】:aws s3 upload fail only at production envrionment, but success at local environmentaws s3仅在生产环境上传文件,但在本地环境成功
【发布时间】:2018-09-14 13:10:59
【问题描述】:

我尝试使用 aws-sdk、multer-s3 上传图片。 在我的本地环境中,上传图像成功,但在生产环境(aws lambda)中,它失败,错误状态为 403 禁止。 但我的 aws 凭证密钥和密钥与本地环境相同。我也成功检查了生产环境中的aws key。

我认为其他两个环境之间的区别没什么。我错过了什么?

我什至尝试在我的路由器代码中设置 aws key,如下所示,但它也失败了。

AWS.config.accessKeyId = 'blabla';
AWS.config.secretAccessKey = 'blalbla';
AWS.config.region = 'ap-northeast-2';

这是我的政策

{
    "Id": "Policy1536755128154",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1536755126539",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::elebooks-image/*",
            "Principal": "*"
        }
    ]
}

【问题讨论】:

  • 也许您在访问 lambda 本身时遇到错误?
  • 其他 lambda 函数,如登录,写帖子是工作..!
  • 你的 lambda 是 VPC 吗?

标签: amazon-web-services amazon-s3 serverless


【解决方案1】:

根据以下策略将您附加的 s3 存储桶策略更新给用户:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                        "s3:GetBucketLocation",
                        "s3:ListAllMyBuckets"
                      ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET",
                "arn:aws:s3:::YOUR-BUCKET/*"
            ]
        }
    ]
}

它在我的服务器上运行。

【讨论】:

    【解决方案2】:

    我没有使用过 AWS Lambda,但我熟悉 S3。当您在本地环境中使用 AWS 开发工具包时,您可能使用的是具有默认完全访问权限的 root 用户,因此它可以正常工作。

    但是,对于 Lambda,根据文档中的以下摘录,您需要确保您在创建 Lambda 函数时指定的 IAM 角色具有对该存储桶执行 s3:putObject 的适当权限。

    您的 Lambda 函数的权限 – 无论是什么调用 Lambda 函数,AWS Lambda 都会通过代入您在创建 Lambda 函数时指定的 IAM 角色(执行角色)来执行该函数。使用与此角色关联的权限策略,您可以授予 Lambda 函数所需的权限。例如,如果您的 Lambda 函数需要读取对象,您可以在权限策略中授予相关 Amazon S3 操作的权限。有关更多信息,请参阅管理权限:使用 IAM 角色(执行角色)。

    Writing IAM policies: How to grant access to an S3 bucket

    【讨论】:

    • 我更改了 s3 策略(我更新了问题!)并且 IAM 角色具有完全访问权限。但它没有用....
    • 我在本地环境和生产环境中使用相同的 IAM。所以这两个 IAM 政策都是完全访问权限。
    • 账户所有者拥有所有资源,因此通过 IAM 策略授予其访问权限是没有意义的。 IAM 角色用于限制其他用户的访问。您是说您在本地使用的 AWS 凭证适用于“someOther”用户,该用户分配了与您的 Lambda 函数相同的 IAM 角色?
    猜你喜欢
    • 2017-08-18
    • 2022-01-17
    • 1970-01-01
    • 2021-03-13
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多