【问题标题】:aws nodejs sdk putObjectAcl correct syntaxaws nodejs sdk putObjectAcl 正确语法
【发布时间】:2020-09-03 15:25:02
【问题描述】:

我需要分配公共读取访问权限,同时在我处理了 sharp() 库中的对象后,允许所有者操作具有完全访问权限的对象。因此,我将旧对象替换为新对象,因此我需要设置新的 ACL。 ACL 允许只有一种访问类型,我需要一种组合 “public-read”和“bucket-owner-full-controll”

根据界面和文档,这就足够了

await s3Bucket.putObjectAcl({
    Bucket: s3EventMessage.bucket.name,
    Key: key,
    AccessControlPolicy: {},
    GrantFullControl: 'canonical_id',
    GrantRead: 'http://acs.amazonaws.com/groups/global/AllUsers'
}).promise();

另外,我试过这个,根据界面应该足够了,但是我收到错误:

    Bucket: s3EventMessage.bucket.name,
    Key: key,
    AccessControlPolicy: {
        Grants: [
            {
                Grantee: {
                    Type: "CanonicalUser"
                },
            },
        ],
    },
    GrantRead: 'http://acs.amazonaws.com/groups/global/AllUsers'

我也试过这种方式,我收到一个错误,我的 XML 格式错误

await s3Bucket.putObjectAcl({
    Bucket: s3EventMessage.bucket.name,
    Key: key,
    AccessControlPolicy: {
        Grants: [
            {
                Grantee: {
                    Type: "CanonicalUser",
                    DisplayName: 'Owner',
                    ID: 'canonical_id',
                },
                Permission: "FULL_CONTROL"
            },
            {
                Grantee: {
                    Type: "Group",
                    URI: 'http://acs.amazonaws.com/groups/global/AllUsers',
                },
                Permission: "READ",
            }
        ],
    },
}).promise();

错误:

MalformedACLError:您提供的 XML 格式不正确或未针对我们发布的架构进行验证

此语法具有精确的所有者:

await s3Bucket.putObjectAcl({
    Bucket: s3EventMessage.bucket.name,
    Key: key,
    AccessControlPolicy: {
        Owner: {
            DisplayName: 'Owner',
            ID: 'canonical_id',
        },
        Grants: [
            {
                Grantee: {
                    Type: "CanonicalUser",
                    DisplayName: 'Owner',
                    ID: 'canonical_id',
                },
                Permission: "FULL_CONTROL"
            },
            {
                Grantee: {
                    Type: "Group",
                    URI: 'http://acs.amazonaws.com/groups/global/AllUsers',
                },
                Permission: "READ",
            }
        ],
    },
}).promise();

报错:

AccessDenied:拒绝访问

另外,我在 PHP 中找到了一个解决方案,但这对我不起作用 - 我的访问被拒绝

这是solution

这是文档Nodejs example

提前致谢!

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3 aws-access-policy


    【解决方案1】:

    经过一番调查和玩耍,我发现了我需要什么:

    1. lambda 必须具有与存储桶相关的权限:s3:PutObject*
    2. 这个 sn-p 非常适合我的任务:
        await s3Bucket.putObjectAcl({
            Bucket: bucket.name,
            Key: key,
            AccessControlPolicy: {
                Owner: {
                    DisplayName: 'Owner',
                    ID: 'canonical_id',
                },
                Grants: [
                    {
                        Grantee: {
                            Type: "CanonicalUser",
                            DisplayName: 'Owner',
                            ID: 'canonical_id',
                        },
                        Permission: "FULL_CONTROL"
                    },
                    {
                        Grantee: {
                            Type: "Group",
                            URI: 'http://acs.amazonaws.com/groups/global/AllUsers',
                        },
                        Permission: "READ",
                    }
                ],
            },
        }).promise();
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-24
      • 2018-04-14
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2021-07-29
      • 2021-04-29
      相关资源
      最近更新 更多