¿Cómo puedo copiar objetos S3 de otra cuenta de AWS?

5 minutos de lectura
0

Quiero copiar objetos de Amazon Simple Storage Service (Amazon S3) entre cuentas de AWS. A continuación, quiero asegurarme de que la cuenta de destino sea la propietaria de los objetos copiados.

Solución

Importante: Los objetos de S3 no siempre son propiedad automática de la cuenta de AWS que los carga. Al cambiar la propiedad de un objeto, se recomienda utilizar la configuración Propietario del bucket obligatorio. Sin embargo, esta opción desactiva todas las ACL del bucket y las ACL de cualquier objeto del bucket.

Con la configuración Propietario del bucket obligatorio en la propiedad del objeto de S3, el mismo propietario del bucket es propietario automáticamente de todos los objetos de un bucket de Amazon S3. La función Propietario del bucket obligatorio también desactiva todas las listas de control de acceso (ACL). Esto simplifica la administración del acceso a los datos almacenados en Amazon S3. Sin embargo, en el caso de los buckets existentes, un objeto de S3 sigue siendo propiedad de la cuenta de AWS que lo cargó, a menos que desactive explícitamente las ACL.

Si su método actual para compartir objetos se basa en el uso de ACL, identifique las entidades principales que utilizan las ACL para acceder a los objetos. Para obtener más información sobre cómo revisar los permisos antes de desactivar cualquier ACL, consulte Requisitos previos para desactivar las ACL.

Si no puede desactivar las ACL, siga estos pasos para apropiarse de los objetos hasta que pueda ajustar la política de bucket:

1.    En la cuenta de origen, cree una política administrada por el cliente de AWS Identity and Access Management (IAM) que otorgue a una identidad de IAM (usuario o rol) los permisos adecuados. El usuario de IAM debe tener acceso para recuperar objetos del bucket de origen y volver a colocarlos en el bucket de destino. Puede utilizar una política de IAM similar al ejemplo siguiente:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:GetObject"
      \],
      "Resource": \[
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*"
      \]
    },
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      \],
      "Resource": \[
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*"
      \]
    }
  \]
}

Nota: Este ejemplo de política de IAM incluye solo los permisos mínimos necesarios para enumerar objetos y copiarlos en buckets de diferentes cuentas. Debe personalizar las acciones de S3 permitidas según su caso de uso. Por ejemplo, si el usuario debe copiar objetos que tengan etiquetas de objeto, también debe conceder permisos a s3:GetObjectTagging. Si se produce un error, intente llevar a cabo estos pasos como usuario administrador.

2.    En la cuenta de origen, adjunte la política gestionada por el cliente a la identidad de IAM que desea utilizar para copiar objetos al bucket de destino.

3.    En la cuenta de destino, defina la propiedad del objeto de S3 del bucket de destino como Propietario del bucket preferido. Tras configurar la propiedad del objeto de S3, los nuevos objetos cargados con la lista de control de acceso (ACL) configurada como bucket-owner-full-control pasarán automáticamente a ser propiedad de la cuenta del bucket.

4.    En la cuenta de destino, modifique la política de bucket del bucket de destino de modo que la cuenta de origen tenga permisos para cargar objetos. Además, incluya una condición en la política de bucket que exija que la carga de objetos establezca la ACL como bucket-owner-full-control. Puede utilizar una declaración similar al ejemplo siguiente:

Nota: Sustituya destination-DOC-EXAMPLE-BUCKET por el nombre del bucket de destino. A continuación, sustituya arn:aws:iam::222222222222:user/Jane por el nombre del recurso de Amazon (ARN) de la identidad de IAM de la cuenta de origen.

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": \[
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  \]
}

Este ejemplo de política de bucket solo incluye los permisos mínimos necesarios para cargar un objeto con la ACL requerida. Debe personalizar las acciones de S3 permitidas según su caso de uso. Por ejemplo, si el usuario debe copiar objetos que tengan etiquetas de objeto, también debe conceder permisos para s3:GetObjectTagging

5.    Tras configurar la política de IAM y la política de bucket, la identidad de IAM de la cuenta de origen debe cargar los objetos en el bucket de destino. Asegúrese de que la ACL esté configurada en bucket-owner-full-control. Por ejemplo, la identidad de IAM de origen debe ejecutar el comando cp AWS CLI con la opción --acl:

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

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

Al configurar la propiedad del objeto de S3 como Propietario del bucket preferido, los objetos que cargue con bucket-owner-full-control pasan a ser propiedad de la cuenta del bucket de destino.

**Importante:**Si su bucket de S3 tiene el cifrado predeterminado con AWS Key Management Service (AWS KMS) activado, también debe modificar los permisos de clave de AWS KMS. Para obtener instrucciones, consulte Mi bucket de Amazon S3 tiene un cifrado predeterminado mediante una clave de AWS KMS personalizada. ¿Cómo puedo permitir que los usuarios descarguen desde el bucket y carguen a este?

Información relacionada

Propietario del bucket que concede permisos de bucket entre cuentas

¿Cómo se cambia la propiedad de los objetos de un bucket de Amazon S3 cuando estos se cargan desde otras cuentas de AWS?

Uso de una política basada en recursos para delegar el acceso a un bucket de Amazon S3 de otra cuenta

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año