为了账号安全,请及时绑定邮箱和手机立即绑定

无法制作 S3 对象,使用 Lambda 从另一个账户上的 S3 存储桶复制

无法制作 S3 对象,使用 Lambda 从另一个账户上的 S3 存储桶复制

Go
眼眸繁星 2022-04-26 14:43:32
我使用以下“go”代码 (Lambda) 将文件“Sample.txt”从一个账户的 S3 存储桶复制到另一个账户的 S3 存储桶。它按预期工作,即它从源存储桶复制“Sample.txt”并在目标存储桶中上传“NewSample.txt”。但是,我无法将目标存储桶中的 'NewSample.txt' 文件设为public。因此,我无法打开/下载该文件。这是因为目标存储桶中“NewSample.txt”文件的所有者仍与源存储桶中“Sample.txt”文件的所有者相同。如果我手动在目标存储桶中上传另一个文件,我可以看到新文件有不同的所有者。package mainimport (    "fmt"    "github.com/aws/aws-sdk-go/aws"    "github.com/aws/aws-sdk-go/aws/awserr"    "github.com/aws/aws-sdk-go/aws/session"    "github.com/aws/aws-sdk-go/service/s3")// main commentfunc main() {    svc := s3.New(session.New())    input := &s3.CopyObjectInput{        Bucket:     aws.String("target-bucket"),        CopySource: aws.String("/source-bucket/Sample.txt"),        Key:        aws.String("NewSample.txt"),    }    result, err := svc.CopyObject(input)    if err != nil {        if aerr, ok := err.(awserr.Error); ok {            switch aerr.Code() {            case s3.ErrCodeObjectNotInActiveTierError:                fmt.Println(s3.ErrCodeObjectNotInActiveTierError, aerr.Error())            default:                fmt.Println(aerr.Error())            }        } else {            fmt.Println(err.Error())        }        return    }    fmt.Println(result)}
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

我通过添加 ACL 解决了这个问题,如下所示:


input := &s3.CopyObjectInput{

        Bucket:     aws.String("target-bucket"),

        CopySource: aws.String("/source-bucket/Sample.txt"),

        Key:        aws.String("NewSample.txt"),

        ACL:        aws.String("bucket-owner-full-control"),

    }


查看完整回答
反对 回复 2022-04-26
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号