2010-08-04 2 views
5

У меня есть структура на Амазонке, как это -Как определить права доступа в Amazon s3

(bucket name) MyImages 
    --- (key) general 
     ---- 1.jpg 
     ---- 2.jpg 

Я создал ключ (общий) с помощью S3 Firefox Organizer инструмент и установите разрешение на чтение для всех. Теперь, при использовании java-программы, когда я загружаю изображения внутри этого ключа, я хочу установить разрешение каждого объекта в качестве ключа. Но этого не происходит, и я должен написать дополнительную строку кода для настройки разрешений для каждого объекта.

AccessControlList acl = s3.getBucketAcl("MyImages"); 
// give everyone read access 
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read); 
s3.setObjectAcl("MyImages", "general/1.jpg", acl); 

Есть ли способ избавиться от вышеуказанного кода. Почему объекты не получают разрешения в качестве ключа или ведра?

ответ

8

Следующий код работает для меня. Замените file_to_save файлом, который вы пишете на S3.

PutObjectRequest por = new PutObjectRequest("MyImages", "general/1.jpg", file_to_save); 

o.setCannedAcl(CannedAccessControlList.PublicRead); 
+0

Спасибо, это работает для меня! –

2

Вы также можете попытаться использовать политики Bucket, чтобы сделать все файлы внутри ведра общедоступными.

Разрешения могут применяться как к существующим файлам, так и ко всем новым файлам.

Вот пример Bucket политики, которая делает все файлы в ведре общедоступными:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    { 
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::your-bucket-name/*" 
    } 
    ] 
} 

Вот как применять Bucket политики с помощью S3 Browser Freeware:
http://s3browser.com/working-with-amazon-s3-bucket-policies.php

0

если вы хотите для доступа к вашему ведру с помощью программного обеспечения «браузер», такого как браузер s3browser, s3fox или s3 для хром, вам нужно добавить разрешение на корень вашего s3, как это.

{ 
      "Effect": "Allow", 
      "Action": "s3:ListAllMyBuckets", 
      "Resource": "arn:aws:s3:::*" 
    } 

давая

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    {  
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::your-bucket-name/*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "s3:ListAllMyBuckets", 
     "Resource": "arn:aws:s3:::*" 
    } 
    ] 
} 
Смежные вопросы