Мой сервис использует 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 они сказали, что предоставление канонического идентификатора является правильным значением для заголовка GrantRead.