tipos precio aws almacenamiento amazon-web-services amazon-s3

amazon-web-services - precio - tipos de almacenamiento s3



¿Cómo hacer que todos los objetos en el cubo AWS S3 sean públicos de forma predeterminada? (2)

Si desea que todos los objetos sean públicos de manera predeterminada, la forma más sencilla es hacerlo a través de una Política de depósito en lugar de Listas de control de acceso (ACL) definidas en cada objeto individual.

Puede usar http://awspolicygen.s3.amazonaws.com/policygen.html para generar una política de depósito para su depósito.

Por ejemplo, la siguiente política permitirá que cualquier persona lea todos los objetos en su depósito S3 (simplemente reemplace <bucket-name> con el nombre de su depósito):

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

La Política de depósito contiene una lista de Statements y cada instrucción tiene un Effect ( Allow o Deny ) para una lista de Actions que realiza el Principal (el usuario) en el Resource especificado (identificado por un Amazon Resource Name o ARN ).

Id es solo una identificación de política opcional y Sid es una identificación de declaración única opcional.

Para las Políticas de Cubo S3, las ARN de Recursos toman la forma:

arn:aws:s3:::<bucket_name>/<key_name>

El ejemplo anterior permite ( Effect: Allow ) que alguien ( Principal: * ) acceda ( Action: s3:GetObject ) a cualquier objeto del Action: s3:GetObject ( Resource: arn:aws:s3:::<bucket-name>/* ).

Estoy usando una biblioteca de PHP para subir un archivo a mi cubo. Configuré ACL en lectura pública y escritura y funciona bien, pero el archivo sigue siendo privado.

Descubrí que si cambio el Beneficiario a Todos hace que el archivo sea público. Lo que quiero saber es cómo establecer el valor predeterminado del beneficiario en todos los objetos de mi categoría en "Todos" . ¿O hay otra solución para hacer públicos los archivos por defecto?

El código que estoy usando está a continuación:

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


Vaya a http://awspolicygen.s3.amazonaws.com/policygen.html Complete los detalles tales como: En acción, seleccione "GetObject". Seleccione "Agregar declaración". Luego, seleccione "Generar política".

Copia el ejemplo de texto:

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

Ahora vaya a su consola AWS S3, a nivel de depósito, haga clic en Propiedades, expanda permisos y luego seleccione Agregar política de depósito. Pega el código generado arriba en el editor y presiona guardar.

Todos sus artículos en el cubo serán públicos por defecto.