Написание объекта S3 с GrantRead, дающим 400 - PullRequest
0 голосов
/ 22 марта 2019

Мой сервис использует 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.

1 Ответ

1 голос
/ 23 марта 2019

Найден способ правильно использовать это:

При предоставлении канонического идентификатора правильный путь:

params := &s3manager.UploadInput{
     Bucket: aws.String(bucket),
     Key:    aws.String(key),
     Body:   body,
     GrantRead: aws.String("id=" + canonicalIDOfSubAccount),
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...