¿Cómo puedo conceder acceso público de lectura a algunos de los objetos de mi bucket de Amazon S3?

6 minutos de lectura
0

Quiero que algunos objetos de mi bucket de Amazon Simple Storage Service (Amazon S3) puedan leerse públicamente. Sin embargo, no quiero cambiar los permisos de otros objetos que estén en el mismo bucket.

Breve descripción

Conceda acceso público de lectura de una de las siguientes maneras:

  • Actualice la lista de control de acceso (ACL) del objeto mediante la consola de Amazon S3
  • Actualice la ACL del objeto mediante la Interfaz de la línea de comandos de AWS (AWS CLI)
  • Utilice una política de bucket que conceda acceso público de lectura a una etiqueta de objeto específica
  • Use una política de bucket que otorgue acceso público de lectura a un prefijo específico

Importante: Conceder el acceso público a través de las ACL de bucket y de objeto no funciona en el caso de los buckets con la propiedad de objetos de S3 configurada como Aplicada al propietario del bucket. En la mayoría de los casos, no se requiere que las ACL concedan permisos a objetos y buckets. En su lugar, utilice políticas de AWS Identity Access and Management (IAM) y políticas de bucket de S3 para conceder permisos a objetos y buckets.

De forma predeterminada, los nuevos buckets, puntos de acceso y objetos no permiten el acceso público. Si el bloqueo del acceso público está activado para todos los buckets de la cuenta, aparecerá el mensaje «Bucket y objetos que no son públicos». Para obtener más información, consulte Establecer la configuración de Block Public Access para la cuenta.

Solución

Importante: Antes de empezar, confirme que no tiene ninguna configuración de bloqueo del acceso público en el nivel de cuenta o de bucket. Su configuración no debe impedir que haga públicos los objetos. De forma predeterminada, la configuración del bloqueo del acceso público está definida como True en los buckets nuevos de S3.

Actualización de la ACL del objeto mediante la consola de Amazon S3

Para hacer públicos varios objetos a la vez, siga estos pasos:

Advertencia: Tras hacer públicos varios objetos, no hay ninguna opción para deshacer esta acción para varios objetos a la vez. Para quitar el acceso público, debe acceder a cada objeto en la consola de Amazon S3. A continuación, en la pestaña Permisos del objeto, modifique Acceso público. Deberá repetir el proceso para cada objeto en el que desee deshacer el acceso público que ha otorgado. Asegúrese de revisar cuidadosamente la lista de objetos antes de hacerlos públicos.

1.    Abra la consola de Amazon S3.

2.    En la lista de buckets, elija el bucket con los objetos que desee actualizar.

3.    Navegue hasta la carpeta que contiene los objetos.

4.    En la lista de objetos, seleccione todos los objetos que desee hacer públicos.

5.    Seleccione Acciones y, a continuación, elija Hacer público.

6.    En el cuadro de diálogo Hacer público, confirme que la lista de objetos es correcta.

7.    Seleccione Hacer público.

Para hacer público un objeto individual, puede repetir el proceso anterior o seguir estos pasos:

1.    En la consola de Amazon S3, elija el bucket con el objeto que desea actualizar.

2.    Navegue hasta la carpeta que contiene el objeto.

3.    Seleccione el enlace del nombre del objeto para abrirlo.

4.    Elija la pestaña Permisos.

5.    Seleccione Editar.

6.    En la sección Todos, seleccione Objects Read.

7.    Seleccione I understand the effects of these changes on this object.

8.    Seleccione Guardar cambios.

Actualización de la ACL del objeto mediante la AWS CLI

En el caso de un objeto que ya haya almacenado en Amazon S3, puede ejecutar este comando para actualizar su ACL y concederle acceso público de lectura:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

Nota: Si se muestran errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

Como alternativa, también puede ejecutar este comando para conceder el control total sobre el objeto al propietario de la cuenta de AWS y acceso de lectura a todos los demás:

Nota: Como valor de**\ --grant-full-control**, introduzca el ID de usuario canónico de la cuenta.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

Utilización de una política de bucket que conceda acceso público de lectura a una etiqueta de objeto específica

Importante: Antes de empezar, asegúrese de revisar los precios del etiquetado de objetos de S3.

En primer lugar, añada una política de bucket que permita el acceso de lectura pública a cualquier objeto con una etiqueta específica. Por ejemplo, esta política permite el acceso de lectura pública a cualquier objeto etiquetado con el par clave-valor public=yes:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/public": "yes"
        }
      }
    }
  ]
}

A continuación, añada la etiqueta a los objetos que desee que sean de lectura pública. Puede añadir o administrar etiquetas de objetos mediante la consola de Amazon S3. También puede usar la AWS CLI.

Para comprobar si un objeto tiene etiquetas, ejecute este comando de la AWS CLI:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Para añadir una etiqueta a un objeto sin ninguna etiqueta, ejecute este comando:

Advertencia: Este comando sobrescribe cualquier etiqueta de objeto existente.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

Para agregar una etiqueta a un objeto que ya tiene etiquetas, ejecute el siguiente comando. Asegúrese de incluir la nueva etiqueta del objeto, así como las etiquetas existentes que desee conservar.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

Tras añadir la etiqueta del objeto, ejecute este comando para revisar las etiquetas de todos los objetos:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Utilización de una política de bucket que otorgue acceso público de lectura a un prefijo específico

Advertencia: La siguiente política de bucket otorga acceso público de lectura a todos los objetos con un prefijo específico. Antes de usar esta política de bucket, confirme que su caso de uso admita todos los objetos de lectura pública incluidos en el prefijo. Esta política no concede acceso a la lista para el prefijo. El usuario solo puede acceder al objeto si conoce la ruta. Si el usuario accede a un objeto que no existe en el prefijo, se mostrará un error 403.

Para conceder acceso público de lectura a un prefijo de objeto específico, agregue una política de bucket similar a la siguiente:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

A continuación, copie los objetos en el prefijo con acceso público de lectura. Para copiar un objeto en el prefijo, ejecute un comando similar al siguiente:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

Nota: Según el prefijo del objeto, no es necesario copiar el objeto para conceder acceso público de lectura.

Información relacionada

Configuración de la ACL

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años