我的服务使用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: Argument format not recognized status 400
没有GrantRead,上传效果很好,但是 ACT2 无法读取该对象。
在检查AWS支持后,他们说提供规范ID是标题GrantRead的正确值。
答案 0 :(得分:1)
找到正确使用此方法的方法:
提供规范ID时,正确的方法是:
params := &s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
Body: body,
GrantRead: aws.String("id=" + canonicalIDOfSubAccount),
}