Saltar al contenido

¿Por qué no puedo copiar un objeto entre dos buckets de Amazon S3?

9 minutos de lectura
0

Quiero copiar un objeto de un bucket de Amazon Simple Storage Service (Amazon S3) a otro, pero no puedo.

Resolución

Políticas de bucket y políticas de IAM

Para copiar un objeto entre buckets, asegúrate de haber configurado los permisos correctos. Para copiar un objeto entre buckets de la misma cuenta de AWS, utiliza las políticas de AWS Identity and Access Management (IAM) para establecer los permisos. Para copiar un objeto entre buckets de diferentes cuentas, debes establecer permisos tanto en las políticas de IAM como en las políticas de bucket pertinentes.

Nota: Para obtener instrucciones sobre cómo modificar una política de bucket, consulta Agregar una política de bucket mediante la consola de Amazon S3. Para obtener instrucciones sobre cómo modificar los permisos de un usuario de IAM, consulta Cambio de los permisos de un usuario de IAM. Para obtener instrucciones sobre cómo modificar los permisos de un rol de IAM, consulta Modificación de un rol.

Confirma los siguientes permisos necesarios:

  • Como mínimo, tu identidad de IAM (usuario o rol) debe tener permisos para las acciones s3:ListBucket y s3:GetObject en el bucket de origen. Si los buckets están en la misma cuenta, configura estos permisos con las políticas de tu identidad de IAM o con la política de bucket de S3. Si los buckets están en cuentas diferentes, configura estos permisos tanto con la política de bucket como con las políticas de tu identidad de IAM.
  • Como mínimo, tu identidad de IAM debe tener permisos para las acciones s3:ListBucket y s3:PutObject en el bucket de destino. Si los buckets están en la misma cuenta, configura estos permisos con las políticas de tu identidad de IAM o con la política de bucket de S3. Si los buckets están en cuentas diferentes, configura estos permisos tanto con la política de bucket como con las políticas de tu identidad de IAM.
  • Revisa las políticas de bucket e IAM pertinentes para confirmar que no hay instrucciones de denegación explícitas que entren en conflicto con los permisos que necesitas. Una instrucción de denegación explícita anula una instrucción de permiso.
  • Para operaciones específicas, confirma que tu identidad de IAM tiene permisos para todas las acciones necesarias dentro de la operación. Por ejemplo, para ejecutar el comando aws s3 cp, necesitas permiso para s3:GetObject y s3:PutObject. Para ejecutar el comando aws s3 cp con la opción --recursive, necesitas permiso para s3:GetObject, s3:PutObject y s3:ListBucket. Para ejecutar el comando aws s3 sync, necesitas permiso para s3:GetObject, s3:PutObject y s3:ListBucket.
    Nota: Si utilizas la operación de la API AssumeRole para acceder a Amazon S3, comprueba que has configurado correctamente la relación de confianza.
  • Para las operaciones específicas de la versión, confirma que tu identidad de IAM tiene permisos para realizar acciones específicas de la versión. Por ejemplo, para copiar una versión específica de un objeto, necesitas el permiso para s3:GetObjectVersion y s3:GetObject.
  • Para copiar objetos con etiquetas de objeto, la identidad de IAM debe tener los permisos s3:GetObjectTagging y s3:PutObjectTagging. Debes tener el permiso s3:GetObjectTagging para el objeto de origen y el permiso s3:PutObjectTagging para los objetos del bucket de destino.
  • Revisa las políticas de bucket y de IAM pertinentes para comprobar que el elemento de recurso tiene la ruta correcta. Para los permisos a nivel de bucket, el elemento de recurso debe apuntar a un bucket. Para los permisos a nivel de objeto, el elemento de recurso debe apuntar a uno o varios objetos.

Por ejemplo, una instrucción de política para una acción a nivel de bucket, como s3:ListBucket, debe especificar un bucket en el elemento de recurso:

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"

Una instrucción de política para acciones a nivel de objeto, como s3:GetObject o s3:PutObject, debe especificar uno o varios objetos en el elemento de recurso:

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

Propiedad del objeto

Si las políticas de buckets tienen los permisos correctos y sigues sin poder copiar un objeto entre buckets, comprueba qué cuenta es la propietaria del objeto. La política de bucket solo se aplica a los objetos que pertenecen al propietario del bucket. Un objeto que pertenece a una cuenta diferente puede tener permisos conflictivos en tu lista de control de acceso (ACL).

Nota: El problema de la propiedad del objeto y la ACL normalmente se produce cuando se copian los registros de servicio de AWS entre cuentas. Entre los ejemplos de registros de servicio se incluyen los registros de acceso de AWS CloudTrail y de Elastic Load Balancing.

Para encontrar la cuenta propietaria de un objeto, sigue estos pasos:

  1. Abre la consola de Amazon S3.
  2. Navega hasta el objeto que no puedes copiar entre buckets.
  3. Selecciona la pestaña Permisos del objeto.
  4. Revisa los valores en Acceso para el propietario del objeto y Acceso para otras cuentas de AWS:
  • Si el objeto es propiedad de tu cuenta, el ID canónico que aparece en Acceso para el propietario del objeto contiene (Tu cuenta de AWS).
  • Si el objeto es propiedad de otra cuenta y puedes acceder al objeto, entonces se cumplen las siguientes condiciones:
    El ID canónico que aparece en Acceso para el propietario del objeto contiene (Cuenta externa).
    El ID canónico que aparece en Acceso a otras cuentas de AWS contiene (Tu cuenta de AWS).
  • Si el objeto es propiedad de otra cuenta y no puedes acceder a él, se cumplen las siguientes condiciones:
    Los campos de ID canónico para las opciones Acceso para el propietario del objeto y Acceso para otras cuentas de AWS están vacíos.

Si el objeto que no puedes copiar entre buckets pertenece a otra cuenta, el propietario del objeto puede completar una de estas opciones:

  • El propietario del objeto concede al propietario del bucket control total del objeto. Una vez que el propietario del bucket es propietario del objeto, la política de bucket se aplica al objeto.
  • El propietario del objeto puede conservar la propiedad del objeto, pero debe cambiar la ACL a la configuración que necesite para tu caso práctico.

Cifrado de AWS KMS

Es posible que un objeto esté cifrado con una clave de AWS Key Management Service (AWS KMS). En este caso, confirma que tu identidad de IAM tiene los permisos correctos para la clave. Si tu identidad de IAM y tu clave de AWS KMS pertenecen a la misma cuenta, confirma que tu política de claves concede los permisos de AWS KMS necesarios.

Si tu identidad de IAM y tu clave de AWS KMS pertenecen a cuentas diferentes, confirma que tanto la clave como las políticas de IAM conceden los permisos necesarios.

Por ejemplo, si copias objetos entre dos buckets (y cada uno tiene su propia clave), la identidad de IAM debe especificar estos permisos:

  • Permisos de kms:Decrypt, que hacen referencia a la primera clave de KMS
  • Permisos de kms:GenerateDataKey y kms:Decrypt, que hacen referencia a la segunda clave de KMS

Para obtener más información, consulta Uso de políticas de claves en AWS KMS y Acciones, recursos y claves de condición para AWS Key Management Service.

Clases de almacenamiento de Amazon Archive o clases de almacenamiento de Amazon Glacier e Intelligent Archive

No puedes copiar un objeto de la clase de almacenamiento de Amazon S3 Glacier. Primero debes restaurar el objeto desde Amazon S3 Glacier para poder copiarlo. Para obtener instrucciones, consulta Restauración de un objeto archivado.

El Pago por solicitante está activado en el bucket

Si el bucket de origen o destino tiene activado el Pago por solicitante y quieres acceder al bucket desde otra cuenta, revisa tu solicitud. Asegúrate de que tu solicitud incluya el parámetro de Pago por solicitud correcto:

  • Para los comandos de la interfaz de la línea de comandos de AWS (AWS CLI), incluye la opción --request-payer.
    Nota: Si recibes errores al ejecutar los comandos de la AWS CLI, asegúrate de utilizar la versión más reciente.
  • Para las solicitudes GET, HEAD y POST, incluye x-amz-request-payer : requester.
  • Para las URL firmadas, incluye x-amz-request-payer=requester.

Políticas de control de servicios de AWS Organizations

Si utilizas AWS Organizations, comprueba las políticas de control de servicios para verificar que permiten el acceso a Amazon S3.

Por ejemplo, esta política genera un error 403 Forbidden cuando intentas acceder a Amazon S3. Esto se debe a que deniega explícitamente el acceso:

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Deny",  
      "Action": "S3:*",  
      "Resource": "*"  
    }  
  ]  
}

Para obtener más información sobre las características de AWS Organizations, consulta Activating all features in your organization (Activación de todas las características en la organización).

Problemas de solicitud entre regiones con puntos de enlace de VPC para Amazon S3

Los puntos de enlace de VPC para Amazon S3 no admiten solicitudes en diferentes regiones de AWS. Por ejemplo, supongamos que tienes una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en la región A. Esta instancia tiene un punto de enlace de nube virtual privada (VPC) configurado en su tabla de enrutamiento asociada. La instancia de EC2 no puede copiar un objeto de la región B a un bucket de la región A. En su lugar, recibirás un mensaje de error similar al siguiente:

"An error occurred (AccessDenied) when calling the CopyObject operation: VPC endpoints do not support cross-region requests"

Para solucionar este problema de solicitud entre regiones, prueba estos métodos:

  • Elimina el punto de enlace de VPC de la tabla de enrutamiento. Si eliminas el punto de enlace de VPC, la instancia debe poder conectarse a Internet en su lugar.
  • Ejecuta el comando copy desde otra instancia que no utilice el punto de enlace de VPC. O bien, ejecuta el comando copy desde una instancia que no esté ni en la región A ni en la región B.
  • Si debes usar el punto de enlace de VPC, primero envía una solicitud GET para copiar el objeto del bucket de origen a la instancia de EC2. A continuación, envía una solicitud PUT para copiar el objeto de la instancia de EC2 al bucket de destino.

Información relacionada

Copia de objetos

¿Cómo puedo solucionar los errores 403 Access Denied de Amazon S3?