¿Por qué no puedo cargar el contenido del sitio web subido a mi bucket de Amazon S3 desde otra cuenta de AWS?

6 minutos de lectura
0

Utilizo un bucket de Amazon Simple Storage Service (Amazon S3) para almacenar el contenido de mi sitio web. Un usuario de otra cuenta de AWS ha subido un objeto para el sitio web a mi bucket. Mi política de buckets es correcta, pero el objeto no se carga en el sitio web.

Breve descripción

Cuando su bucket tiene activadas las listas de control de acceso (ACL), no es propietario de los objetos que otras cuentas de AWS cargan a su bucket, de forma predeterminada. Como resultado, posiblemente no podrá leer el objeto. La cuenta que carga el archivo debe concederle explícitamente a usted, como propietario del bucket, permisos sobre el objeto.

Además, la política de bucket no se aplica a los objetos del bucket que pertenezcan a otras cuentas. Por lo tanto, la política de bucket que concede acceso de lectura a los usuarios de su sitio web no se aplica automáticamente a los objetos cargados por otras cuentas.

Para solucionar este problema, utilice uno de estos métodos:

  • Desactive las ACL en su bucket de S3 (práctica recomendada).
  • Pida al propietario del objeto que conceda al objeto acceso público de lectura.
  • Pida al propietario del objeto que le conceda el control total del objeto.

Resolución

Desactivar las ACL en su bucket de S3 (práctica recomendada)

Para desactivar las ACL en su bucket de Amazon S3, elija la configuración de propiedad de objetos Aplicada al propietario del bucket. Al aplicar esta configuración, la ACL se desactiva y usted pasa a ser automáticamente el propietario de todos los objetos de su bucket y a tener un control total sobre ellos. Incluso en el caso de los objetos cargados entre cuentas, la propiedad de este objeto pertenece al propietario del bucket. El propietario del bucket también controla la política del bucket que concede el acceso de lectura y se aplica a esos objetos.

Requisitos previos

Antes de desactivar las ACL, consulte Requisitos previos para desactivar las ACL.

Desactivación de las ACL

  1. Abra la consola de Amazon S3.
  2. Elija Buckets y, a continuación, seleccione el nombre del bucket al que quiera aplicar una configuración de propiedad de objetos de S3.
  3. Seleccione la pestaña Permisos.
  4. En Propiedad del objeto, elija Editar.
  5. En Propiedad del objeto, seleccione Aplicada al propietario del bucket.
  6. Elija Guardar.

Si su caso de uso no le permite desactivar las ACL, utilice uno de estos métodos alternativos.

Pedir al propietario del objeto que conceda al objeto acceso público de lectura

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

La cuenta que cargó el objeto puede conceder acceso público de lectura al objeto. Para ello, ejecute este comando de la interfaz de la línea de comandos de AWS (AWS CLI):

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

Nota: Sustituya --bucket por el nombre del bucket que almacena el contenido de su sitio web.

Pedir al propietario del objeto que le conceda el control total del objeto

Los propietarios del objeto pueden conceder automáticamente el control total de un objeto al propietario del bucket. Para ello, active Propiedad del objeto de S3 en el bucket de destino. Esto concede el control al propietario del bucket cuando el propietario del objeto carga un objeto e incluye la ACL predefinida de bucket-owner-full-control.

Una vez que el propietario del bucket configure su propiedad de objetos de S3 como Propietario del bucket preferido, el propietario del bucket puede añadir otra política de bucket. Esta política de bucket adicional debe exigir que todas las operaciones PUT de Amazon S3 incluyan la ACL predefinida de bucket-owner-full-control. Esta ACL concede al propietario del bucket el control total de los nuevos objetos.

Para conceder al propietario del bucket el control total del objeto, la cuenta de carga debe utilizar la sintaxis de la CLI durante la carga del objeto:

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

El propietario del bucket ahora es propietario del objeto y el objeto hereda los permisos establecidos en la política de bucket.

En el caso de los objetos existentes que se han subido antes de que active la propiedad de objetos de S3, el propietario del objeto debe conceder permisos al propietario del bucket sobre el objeto. A continuación, el propietario del bucket debe copiar el propio objeto.

Para conceder al propietario del bucket el control total del objeto, la cuenta de carga debe utilizar la sintaxis de la CLI:

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Para heredar la propiedad del objeto, el propietario del bucket debe copiar el propio objeto:

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

El propietario del bucket ahora es propietario del objeto y el objeto hereda los permisos establecidos en la política de bucket.

Exigir que las subidas entre cuentas concedan al propietario del bucket el control total del objeto

Para exigir que todas las subidas (s3:PutObject) desde otra cuenta concedan al propietario del bucket el control total del objeto, utilice una política de bucket como esta que mostramos de ejemplo:

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

Con esta política de bucket, el usuario de la otra cuenta (111122223333) solo puede subir al bucket cuando el usuario especifica la ACL del objeto. La ACL del objeto debe conceder al propietario del bucket el control total. A continuación, el otro usuario de la cuenta debe cargar los objetos, como en este comando:

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

Información relacionada

Cómo autoriza Amazon S3 una solicitud

Directrices de la política de acceso

Configuración de permisos para el acceso al sitio web

Controlar el acceso a un bucket con las políticas de usuario

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses