当前位置: 首页 > 知识库问答 >
问题:

授予Lambda访问私有S3桶

颛孙和颂
2023-03-14

我们有一个Lambda函数,需要能够访问私有的S3桶。

存储桶已启用“阻止所有公共访问”,并具有以下资源策略:

{
    "Version": "2012-10-17",
    "Id": "Policy1620740846405",
    "Statement": [
        {
            "Sid": "Stmt1620740843181",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::'''''':role/integrations-shopifyBucketOrdersFunctionRole-*****",
                    "arn:aws:iam::'''''':root",
                    "arn:aws:iam::''''''':user/transalisS3"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket/*",
                "arn:aws:s3:::bucket"
            ]
        }
    ]
}

我还将AmazonS3FullAccess策略直接附加到Lambda使用的IAM角色。但是,当Lambda函数尝试访问S3存储桶时,会出现访问被拒绝错误:

AccessDenied: Access Denied

使用IAM用户凭据连接到S3的外部系统在尝试访问存储桶时也会收到相同的错误。

有人知道是什么导致了这个错误吗?

以下是发生错误的Lambda代码:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.bucketOrders = async (event, context) => {
    let response = {};
    let eventBucket = event.Records[0].s3.bucket.name;
    let eventFile = event.Records[0].s3.object.key;

    let decodedKey = decodeURIComponent(eventFile);

    try {
        let objectData = await s3.getObject({
            Bucket: eventBucket,
            Key: decodedKey,
        }).promise();

共有1个答案

吕翰飞
2023-03-14

创建Lambda应用程序时,有一个自动生成IAM角色的选项,该角色具有附加了无效资源的权限边界-导致所有操作失败。

 类似资料:
  • 我使用CarrierWaveDirect将高分辨率图像上传到s3。然后,我使用该图像处理通过Cloudfront URL公开的多个版本。 上传的高分辨率文件需要对匿名用户保持私有,但web应用程序需要访问私有文件才能对其他版本进行处理。 我目前正在通过将所有上传的文件设置为CarrierWave初始值设定项中的private config.fog_public=假 我有一个允许完全管理员访问的we

  • 我正在将文件从php上传到s3bucket.its上传成功,但当我检索图像时,我得到以下错误 如果我在上传文件时设置为公开,那么我可以检索它,但我想防止未经授权的用户。 上载文件代码 在问问题之前,我已经参考了许多网站,但它对我没有帮助 Amazon S3查看私人文件 PHP Amazon S3通过URL访问私人文件 如何通过Zend_Service_Amazon_S3访问Amazon s3私有桶

  • 我有一个不断运行的lambda函数和一些动态创建的SQS队列。我需要一种允许lambda访问所有SQS队列的方法,以便可以使用这些动态创建的队列-我如何做到这一点? 目前,我使用的执行角色具有iam策略和单个队列ARN,但似乎无法创建多个执行角色。

  • 我有一个lambda函数,它使用一个具有以下策略摘录的角色 我的桶策略如下所示 我在角色和bucket策略上都允许使用GetObject和ListBucket。但是,当我的函数运行时 我明白了 [错误]ClientError:调用GetObject操作时发生错误(AccessDenied):拒绝访问 我还需要添加哪些权限?对象就在那里,当我使用管理员角色在本地运行代码时,我可以得到它。 最新消息

  • 我按照AWS文档尝试了最简单的案例。我创建了角色,分配给实例并重新启动实例。为了以交互方式测试访问,我登录到Windows实例并运行<code>aws s3api列表对象--bucket testbucket 下一个测试是创建.aws/credentials文件并添加配置文件以承担角色。我修改了角色(分配给实例),并添加了由帐户中的任何用户担任角色的权限。当我运行相同的命令<code>aws s3

  • null 是否有一种方法可以跟踪为特定的S3 getObject请求提供访问的策略/角色? 我已经为与认知组相关联的角色运行了IAM策略模拟器,它对有问题的对象给出了拒绝。 我试图正确阻止访问的对象没有为它们设置权限。桶有: 阻止新的公共ACL和上载公共对象(建议):True 删除通过公共ACL授予的公共访问权限(建议):True 阻止新的公共桶策略(推荐):true 如果bucket具有公共策略