当前位置: > > > > 使用 GrantRead 写入 S3 对象给出 400
来源:stackoverflow
2024-04-19 10:27:36
0浏览
收藏
珍惜时间,勤奋学习!今天给大家带来《使用 GrantRead 写入 S3 对象给出 400》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!
问题内容
我的服务使用 aws s3 go sdk 将对象上传到 aws 账户(例如 act1),我想向不同的子账户 act2 授予读取权限,以便它可以读取上传成功后的对象。代码如下所示
var canonicalIDOfSubAccount = "abcd09kialjf1124" // Upload attempts to upload a file at a particular key. func (s *client) Upload(ctx context.Context, bucket, key string, body io.Reader) (err error) { defer func() { if r := recover(); r != nil { logging.Error("s3", "panic recovered. err: %v", r) } }() params := &s3manager.UploadInput{ Bucket: aws.String(bucket), Key: aws.String(key), Body: body, GrantRead: aws.String(canonicalIDOfSubAccount), } // Perform an upload. _, err = s.uploader.UploadWithContext(ctx, params) if err != nil { fmt.Println("Error is ", err.Error(), err) } return }
执行时,aws 抛出错误 invalidargument:参数格式无法识别状态400
如果没有 grantread,上传效果很好,但 act2 无法读取该对象。
在与 aws 支持人员核实时,他们表示提供规范 id 是标头 grantread 的正确值。
解决方案
找到正确使用它的方法:
提供规范id时,正确的方法是:
params := &s3manager.UploadInput{ Bucket: aws.String(bucket), Key: aws.String(key), Body: body, GrantRead: aws.String("id=" + canonicalIDOfSubAccount), }
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注公众号,一起学习编程~