Come rendere pubblici tutti gli oggetti nel bucket AWS S3 per impostazione predefinita?

Sto usando una libreria PHP per caricare un file nel mio secchio. Ho impostato l’ACL in public-read-write e funziona bene, ma il file è ancora privato.

Ho scoperto che se cambio il Grantee su Everyone rende pubblico il file. Quello che voglio sapere è come faccio a impostare il Grantee predefinito su tutti gli oggetti nel mio bucket su “Everyone” . O c’è un’altra soluzione per rendere i file pubblici per impostazione predefinita?

Il codice che sto usando è di seguito:

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; } 

Vai a http://awspolicygen.s3.amazonaws.com/policygen.html Compila i dettagli come: inserisci la descrizione dell'immagine qui In Azione selezionare “GetObject” Selezionare “Aggiungi istruzione” quindi selezionare “Genera politica”

Copia l’esempio di testo:

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

Ora vai alla tua console AWS S3, A livello di bucket, fai clic su Proprietà, Espandi permessi, quindi seleziona Aggiungi politica bucket. Incolla il codice generato sopra nell’editor e premi Salva.

Tutti i tuoi articoli nel bucket saranno pubblici per impostazione predefinita.

Se si desidera rendere pubblici tutti gli oggetti per impostazione predefinita, il modo più semplice è farlo tramite un criterio Bucket anziché gli elenchi di controllo di accesso (ACL) definiti su ciascun singolo object.

inserisci la descrizione dell'immagine qui

Puoi utilizzare AWS Policy Generator per generare un criterio bucket per il tuo bucket.

Ad esempio, il seguente criterio permetterà a chiunque di leggere ogni object nel tuo bucket S3 (basta sostituire con il nome del tuo bucket):

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

Il criterio Bucket contiene un elenco di Statements e ogni istruzione ha un Effect ( Allow o Deny ) per un elenco di Actions eseguite da Principal (l’utente) sulla Resource specificata (identificata da un Amazon Resource Name o ARN ).

L’ Id è solo un ID di politica facoltativo e Sid è un ID di istruzione univoco opzionale.

Per le politiche dei bucket S3, gli ARN delle risorse assumono la forma:

 arn:aws:s3:::/ 

L’esempio sopra permette ( Effect: Allow ) a chiunque ( Principal: * ) di accedere ( Action: s3:GetObject ) a qualsiasi object nel bucket ( Resource: arn:aws:s3:::/* ).