Как сделать все объекты в объявлении AWS S3 общедоступными по умолчанию?

Я использую библиотеку PHP для загрузки файла в мое ведро. Я установил ACL для public-read-write, и он отлично работает, но файл по-прежнему является приватным.

Я обнаружил, что если я изменю Грантополучателя на всех, он сделает файл открытым. Я хочу знать, как сделать грантополучателем по умолчанию для всех объектов в моем ковше для установки «Все» . Или есть еще одно решение сделать файлы общедоступными по умолчанию?

Код, который я использую, приведен ниже:

public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) { if ($input === false) return false; $rest = new S3Request('PUT', $bucket, $uri); if (is_string($input)) $input = array( 'data' => $input, 'size' => strlen($input), 'md5sum' => base64_encode(md5($input, true)) ); // Data if (isset($input['fp'])) $rest->fp =& $input['fp']; elseif (isset($input['file'])) $rest->fp = @fopen($input['file'], 'rb'); elseif (isset($input['data'])) $rest->data = $input['data']; // Content-Length (required) if (isset($input['size']) && $input['size'] >= 0) $rest->size = $input['size']; else { if (isset($input['file'])) $rest->size = filesize($input['file']); elseif (isset($input['data'])) $rest->size = strlen($input['data']); } // Custom request headers (Content-Type, Content-Disposition, Content-Encoding) if (is_array($requestHeaders)) foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v); elseif (is_string($requestHeaders)) // Support for legacy contentType parameter $input['type'] = $requestHeaders; // Content-Type if (!isset($input['type'])) { if (isset($requestHeaders['Content-Type'])) $input['type'] =& $requestHeaders['Content-Type']; elseif (isset($input['file'])) $input['type'] = self::__getMimeType($input['file']); else $input['type'] = 'application/octet-stream'; } // We need to post with Content-Length and Content-Type, MD5 is optional if ($rest->size >= 0 && ($rest->fp !== false || $rest->data !== false)) { $rest->setHeader('Content-Type', $input['type']); if (isset($input['md5sum'])) $rest->setHeader('Content-MD5', $input['md5sum']); $rest->setAmzHeader('x-amz-acl', $acl); foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v); $rest->getResponse(); } else $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters'); if ($rest->response->error === false && $rest->response->code !== 200) $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status'); if ($rest->response->error !== false) { trigger_error(sprintf("S3::putObject(): [%s] %s", $rest->response->error['code'], $rest->response->error['message']), E_USER_WARNING); return false; } return true; } 

Перейдите на сайт http://awspolicygen.s3.amazonaws.com/policygen.html Заполните данные, такие как: введите описание изображения здесь В Action выберите «GetObject». Выберите «Добавить заявление». Затем выберите «Создать политику»,

Скопируйте текстовый пример:

 { "Id": "Policy1397632521960", "Statement": [ { "Sid": "Stmt1397633323327", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::bucketnm/*", "Principal": { "AWS": [ "*" ] } } ] } 

Теперь перейдите на консоль AWS S3. На уровне ковша нажмите «Свойства», «Развернуть разрешения», затем выберите «Добавить политику». Вставьте вышеуказанный сгенерированный код в редактор и нажмите «Сохранить».

Все ваши элементы в ведре будут общедоступными по умолчанию.

Если вы хотите, чтобы все объекты были общедоступными по умолчанию, самый простой способ – сделать это с помощью политики Bucket вместо списков контроля доступа (ACL), определенных на каждом отдельном объекте.

введите описание изображения здесь

Генератор политик AWS можно использовать для создания политики ведра для вашего ведра.

Например, следующая политика позволит любому прочитать каждый объект в вашем ведре S3 (просто замените на имя вашего ведра):

 { "Id": "Policy1380877762691", "Statement": [ { "Sid": "Stmt1380877761162", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::/*", "Principal": { "AWS": [ "*" ] } } ] } 

Политика Bucket содержит список Statements и каждый оператор имеет Effect ( Allow или Deny ) для списка Actions , выполняемых Principal (пользователем) в указанном Resource (указанном Amazon Resource Name или ARN ).

Id – это просто необязательный идентификатор политики, а Sid – необязательный уникальный идентификатор оператора.

Для правил S3 Bucket, ARN-ресурсы имеют форму:

 arn:aws:s3:::/ 

Вышеприведенный пример позволяет ( Effect: Allow ) любому ( Principal: * ) получить доступ ( Action: s3:GetObject ) к любому объекту в ведре ( Resource: arn:aws:s3:::/* ).

  • Создайте ведро в Amazon S3
  • Загрузка всего ведра S3?
  • EC2 t2.medium разрывается кредитная «экономия»
  • Amazon MWS - запрошенная подпись запроса не соответствует предоставленной подписке
  • Как вы добавляете swap к экземпляру EC2?
  • Почему люди используют Heroku, когда присутствует AWS? Что отличает Heroku от AWS?
  • Правильный stream MWS Amazon для элемента с существующим ASIN
  • CloudFront + S3 Website: «Указанный ключ не существует», когда должен отображаться неявный индексный документ
  • AWS Lambda NoClassDefFoundError
  • Открытие порта 80 EC2 Веб-службы Amazon
  • Зачем нужна частная подсеть в VPC?
  • Давайте будем гением компьютера.