Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS Lambda-拒绝访问错误-GetObject_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Amazon web services AWS Lambda-拒绝访问错误-GetObject

Amazon web services AWS Lambda-拒绝访问错误-GetObject,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我是AWS Lambda的新手。我正在尝试从中学习教程。当用户将jpg上传到名为greetingsproject的S3 bucket时,会触发lambda函数 错误:9a62ff86-3e24-491d-852e-DED2C2CF5D94 信息:获取对象时出错=拒绝访问:拒绝访问 我在以下代码段中遇到拒绝访问错误: try { console.log("srcBucket=" + srcBucket); console.log("sr

我是AWS Lambda的新手。我正在尝试从中学习教程。当用户将jpg上传到名为greetingsproject的S3 bucket时,会触发lambda函数

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

我在以下代码段中遇到拒绝访问错误:

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

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

Marcin关于Lambda执行角色的评论使我走上了正确的道路。 我之前遵循了以下步骤:

  • 创建了名为greetingsProjectPolicy的策略(具有上述权限)
  • 将此策略附加到greetingsProjectRole
  • 将greetingsProjectRole分配给我的lambda函数
  • 我假设是这样的,并且该策略应该对我的lambda函数可用
  • 但是,当我将greetingsProject角色分配给函数时,AWS在内部创建了一个名为greetingsProject-role-zhcbt61o的执行角色
  • 当我点击这个角色时,我惊讶地发现它唯一的角色是AWSLambdaBasicExecutionRole,而greetingsProjectPolicy却丢失了
  • 我必须将greetingsProject策略作为内联策略添加到greetingsProject-role-zhcbt61o中。现在我不再得到拒绝访问错误

  • 不确定,如果AWS是这样工作的,或者我遗漏了什么。

    lambda函数和s3 bucket是否在同一个AWS帐户中?“角色策略”-哪个角色?Lambda执行角色?您已将greetingsProjectPolicy附加到greetingsProjectRole。您可以检查角色中的受信任实体吗?对于lambda,应该是lambda.amazonaws.com。我认为您让Lambda创建执行角色而不是选择您的角色(或者您的角色没有Lambda.amazonaws.com是真实的实体)greetingsProjectRole的受信任实体为Lambda.amazonaws.com。但是(如上所述),当我分配greetingsProject角色时,AWS创建了greetingsProject-role-zhcbt61o并将其设置为默认值。但是,我可以单击“编辑”按钮并将其更改为我的原始角色(greetingsProjectRole),并且不再出现拒绝访问错误。