S3 上传通过 CLI 和控制台成功,但通过 SDK 抛出拒绝访问

S3 upload succeeds with CLI and Console but throws Acces Denied through SDK

我可以通过 AWS 控制台和 cli 将文件上传到我的 s3 存储桶,但通过 sdk 访问被拒绝。从 cli 调用 aws sts get-caller-identity 并从代码中调用 sts.getCallerIdentity() 我可以确认正在使用同一组凭据来执行操作。

上传代码如下:

    const aws = require("aws-sdk");
    const s3 = new aws.S3();
    const sts = new aws.STS();

    sts.getCallerIdentity({}, (err, data) => {
        // matches result from aws sts get-caller-identity
        console.log(data);
    });

    let bucket = {
        Bucket: "my-bucket",
        Key: "user@email.com/uuid/Submitted_Put.csv",
        Body: "col1,col2,col3\nval1,val2,val3",
        Tagging: "TEMPLATE_NAME=my_template_v1.0",
        ServerSideEncryption: "aws:kms",
    };
    s3.putObject(bucket)
        .promise()
        .then((data) => {
            console.log(data.Key);
        })
        .catch((error) => {
            console.log(error);
        });

所以这最终成为设置存储桶对象的标记键的权限问题。显然,执行策略需要允许额外的 s3:putObjectTagging 操作。