【问题标题】:AWS Lambda - Access Denied Error - GetObjectAWS Lambda - 访问被拒绝错误 - GetObject
【发布时间】:2021-06-27 23:05:45
【问题描述】:

我是 AWS Lambda 的新手。我正在尝试来自https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html 的教程。当用户将 jpg 文件上传到名为 greetingsproject 的 S3 存储桶时,会触发 lambda 函数。

错误:9a62ff86-3e24-491d-852e-ded2e2cf5d94
信息:获取对象时出错 = AccessDenied:访问被拒绝

我在以下代码 sn-p 中收到拒绝访问错误:

try {
        console.log("srcBucket=" + srcBucket);
        console.log("srcKey=" + srcKey);
        const params = {
            Bucket: srcBucket,
            Key: srcKey
        };
        var origimage = await s3.getObject(params).promise();

    } catch (error) {
        console.log("error while getting object = " + error);
        return;
    }  

我的角色政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogGroup",
                "logs:CreateLogStream"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::greetingsproject"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::greetingsproject",
                "arn:aws:s3:::greetingsproject/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::greetingsproject",
                "arn:aws:s3:::greetingsproject/*"
            ]
        }
    ]
}

不确定我需要向策略添加哪些其他权限。

【问题讨论】:

  • lambda函数和s3桶在同一个aws账户吗?
  • “角色策略” - 哪个角色? Lambda 执行角色?

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


【解决方案1】:

Marcin 关于 Lambda 执行角色的评论让我走上了正轨。 我之前按照以下步骤操作:

  1. 创建了一个名为 greetingsProjectPolicy 的策略(具有上述权限)
  2. 将此政策附加到 greetingsProjectRole。
  3. 将 greetingsProjectRole 分配给我的 lambda 函数。
  4. 我认为就是这样,并且该策略应该可用于我的 lambda 函数。
  5. 但是,当我将 greetingsProjectRole 分配给该函数时,AWS 在内部创建了一个名为 greetingsProject-role-zhcbt61o 的执行角色。
  6. 当我点击这个角色时,我惊讶地发现它唯一的角色是 AWSLambdaBasicExecutionRole,而 greetingsProjectPolicy 不见了。
  7. 我必须将 greetingsProjectPolicy 作为内联策略添加到 greetingsProject-role-zhcbt61o。现在我不再收到拒绝访问错误。

不确定,这是 AWS 的工作方式还是我遗漏了什么。

【讨论】:

  • 您已将 greetingsProjectPolicy 附加到 greetingsProjectRole。您可以检查角色中的受信任实体吗?对于 lambda,它应该是 lambda.amazonaws.com。我认为您让 Lambda 创建执行角色而不是选择您的角色(或者您的角色没有 lambda.amazonaws.com 是 Truested 实体)
  • greetingsProjectRole 的受信任实体为 lambda.amazonaws.com。但是(如上所述)当我分配了 greetingsProjectRole 时,AWS 创建了一个 greetingsProject-role-zhcbt61o 并将其设为默认值。但是,我可以单击“编辑”按钮并将其更改为我的原始角色 (greetingsProjectRole),并且不再出现拒绝访问错误。
猜你喜欢
  • 2016-09-29
  • 2020-09-30
  • 2021-09-23
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
相关资源
最近更新 更多