2015-10-20 6 views
2

У меня есть учетная запись AWS. У учетной записи A есть ведро S3 «BUCKET», в которое я поместил файл с помощью Java api. Я настроил политику «BUCKET», чтобы разрешить публикацию файлов по нескольким учетным записям. Но, когда я пытаюсь открыть этот файл со счета А, он говорит: AccessDenied Доступ запрещен с hostId и requestId.Исключение в Amazon S3 исключение «Доступ запрещен» в кросс-счете

Этот файл публикуется через учетную запись B с использованием java api, и этот файл имеет тот же размер, что и опубликованный через api. Я попытался изменить размеры файлов, и новые размеры были показаны на консоли AWS S3. Вот мое ведро политики:

{ 
"Version": "2008-10-17", 
"Id": "Policy1357935677554", 
"Statement": [ 
    { 
     "Sid": "Stmt1357935647218", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTB:user/accountb-user" 
     }, 
     "Action": "s3:ListBucket", 
     "Resource": "arn:aws:s3:::bucket-name" 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTB:user/accountb-user" 
     }, 
     "Action": "s3:PutObject", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTB:user/accountb-user" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    }, 
    { 
     "Sid": "Stmt1357935647218", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTA:user/accounta-user" 
     }, 
     "Action": "s3:ListBucket", 
     "Resource": "arn:aws:s3:::bucket-name" 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTA:user/accounta-user" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::ACCOUNTA:root" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    } 
] 

}

Проблема заключается в том, когда я пытаюсь скачать/открыть этот файл со счета, я не в состоянии открыть его.

+0

Удалось ли решить проблему? У меня также есть эта проблема. – rastacide

+0

Да, вам нужно использовать 's3Client.putObject (новый PutObjectRequest (bucket, key, inputFile) .withAccessControlList (acl))' – user954134

ответ

1

Проблема заключается в том, что по умолчанию, когда AWS (cli или SDK) загружает файл, он предоставляет доступ к загрузчику только через ACLs s3.

В этом случае, чтобы позволить владельцу читать загруженный файл, загрузчик должен явно предоставить доступ владельцу ведра во время загрузки. Пример:

  • с aws CLI (документация here): aws s3api put-object --bucket <bucketname> --key <filename> --acl bucket-owner-full-control
  • с nodejs API (документации here): Вы должны установить params.ACL свойство метода AWS.S3.upload в "bucket-owner-full-control"

В параллельно, вы также можете убедиться, что владелец ковша имеет полный контроль с ведомой политикой (дополнительная документация here):

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Grant Owner Full control dev", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNTB:root" }, "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

+0

Еще что-то странное, если вы этого не сделаете, владелец ведра имеет право удалить эти файлы. – herve

Смежные вопросы