2014-10-07 3 views
1

У меня есть ведро, настроенное в S3, test-bucket, и я пытаюсь настроить политику пользователя IAM, чтобы разрешить программный доступ из моего веб-приложения, размещенного в другом месте. Это просто плоское ведро без папок.Конфигурирование программного доступа Amazon S3 PUT

Я добавил пользователя в конфигурацию IAM и создал набор ключей доступа. Наконец, я создал политику доступа, которая выглядит следующим образом:

{ 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListAllMyBuckets" 
     ], 
     "Resource":"arn:aws:s3:::*" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource":"arn:aws:s3:::test-bucket" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:PutObject", 
      "s3:GetObject", 
      "s3:DeleteObject" 
     ], 
     "Resource":"arn:aws:s3:::test-bucket/*" 
     } 
    ] 
} 

Используя это, я могу успешно программно перечислить содержимое моего ведра и загружать отдельные файлы в ведре. Но когда я пытаюсь загрузить что-то программно я получаю Access Denied ошибку:

<Error> 
    <Code>AccessDenied</Code> 
    <Message>Access Denied</Message> 
    ... 
</Error> 

Я знаю, что эта политика работает на GET и LIST: например, когда я удалить строку "s3:GetObject" от политики, загрузки больше не работает. Но для жизни я не могу понять, почему загрузка не работает. Я тестирую все это через мой webapp, работающий на localhost. Любые идеи о том, как загрузить загрузку?

ответ

1

Оказывается, мне нужно добавить следующее разрешение:

"s3:PutObjectAcl" 

Так что разрешенные действия выглядят, как это сейчас:

"Action":[ 
     "s3:PutObject", 
     "s3:PutObjectAcl" 
     "s3:GetObject", 
     "s3:DeleteObject" 
    ] 

Я получил идею от here, но я не совершенно точно, почему это относится ко мне, так как я не изменяю разрешения файлов. Но это работает.

+0

u не меняет разрешения, но вам нужно установить его при загрузке нового файла. Но, к сожалению, это не работает для меня даже с помощью Allow «s3: ListBucket», «s3: PutObject», «s3: GetObject», «s3: DeleteObject», «s3: PutObjectAcl» Я все еще получаю AccessDenied для Действие PutObject для моего скрипта python –

+0

OMG это должно быть сделано как ROLE, но не как Policy. Когда я создал роль для S3 с тем же контентом, что и политика - IT WORK –

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