¿Cómo puedo usar AWS DataSync para transferir los datos a o desde una ubicación de Amazon S3 multicuenta?

Actualización más reciente: 26/04/2022

Quiero utilizar AWS DataSync para transferir datos a o desde un bucket multicuenta de Amazon Simple Storage (Amazon S3).

Descripción corta

Para usar DataSync para la transferencia de datos entre cuentas, haga lo siguiente:

  1. Utilice la AWS Command Line Interface (AWS CLI) o AWS SDK para crear una ubicación de Amazon S3 multicuenta en DataSync.
  2. Cree una tarea de DataSync que transfiera datos del bucket de origen al bucket de destino.

Tenga en cuenta las siguientes limitaciones cuando utilice DataSync para transferir datos entre buckets que pertenecen a diferentes cuentas de S3:

  • DataSync no aplica la lista de control de acceso (ACL) bucket-owner-full-control al transferir datos a un bucket de destino multicuenta, lo que genera problemas de propiedad de objetos en el bucket de destino.
  • Para una ubicación de S3 multicuenta, solo se admiten los buckets multicuenta en la misma región. Si utiliza una ubicación de S3 multicuenta y multiregión, verá los errores GetBucketLocation o Unable to connect to S3 endpoint (No se puede conectar a un punto de conexión de S3).
  • No puede utilizar el rol de transferencia entre cuentas para acceder a la ubicación de S3 multicuenta.

Puede configurar la tarea DataSync en la cuenta de destino para extraer datos del origen evitando las limitaciones anteriores.

Resolución

Realice las comprobaciones requeridas

Supongamos que la cuenta de origen tiene el bucket de S3 de origen multicuenta y la cuenta de destino tiene el bucket de S3 de destino y la tarea DataSync. Lleve a cabo las verificaciones siguientes:

Usuario o rol de AWS Identity and Management (IAM): compruebe si el usuario o el rol de IAM que utiliza para crear la ubicación de S3 multicuentas y el rol de IAM que asignó a la ubicación de S3 tienen los permisos necesarios.

Política de bucket de origen: asegúrese de que la política de bucket de origen permita que los usuarios y roles de IAM de la cuenta de destino accedan al bucket. En el siguiente ejemplo de política se concede el acceso al bucket de origen a los usuarios y roles de IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket/*"
      ]
    }
  ]
}

Asegúrese de sustituir los siguientes valores en la política anterior:

  • example-source-bucket con el nombre del bucket de origen
  • 1111222233334444 con el ID de la cuenta de destino
  • datasync-config-role con el rol de IAM que se usa para la configuración de DataSync (por ejemplo: crear una ubicación S3 de origen y la tarea en DataSync)
    Nota: También puede utilizar un usuario de IAM. En este artículo se analiza el uso del rol de IAM.
  • dataysnc-transfer-role con el rol de IAM que se asigna al crear la ubicación S3 de origen
    Nota: DataSync usa este rol para acceder a los datos entre cuentas.

Ubicación de S3 de destino: asegúrese de que la ubicación de S3 de destino se crea de acuerdo con las instrucciones de Creating a location for Amazon S3 (Creación de una ubicación para Amazon S3).

Utilice la AWS CLI o SDK para crear una ubicación de S3 de origen multicuenta en DataSync

Nota: No se puede crear ubicaciones de S3 multicuenta en la consola de administración de AWS.

Puede crear la ubicación de S3 multicuenta mediante uno de los siguientes métodos:

  • Usar un archivo JSON de configuración.
  • Usar las opciones del comando de la AWS CLI.

Usar un archivo JSON de configuración

1.    Cree un archivo JSON de configuración input.template para la ubicación S3 multicuenta con los siguientes parámetros:

{
  "Subdirectory": "",
  "S3BucketArn": "arn:aws:s3:::[Source bucket]",
  "S3StorageClass": "STANDARD",
  "S3Config": {
    "BucketAccessRoleArn": "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
  }
}

2.    Cree una ubicación de S3 ejecutando el siguiente comando de AWS CLI:

aws datasync create-location-s3 --cli-input-json file://input.template --region example-DataSync-Region

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

Para obtener más información, consulte create-location-s3.

Cuando se crea la ubicación de S3, verá el siguiente resultado:

{
"LocationArn": "arn:aws:datasync:example-Region:1111222233334444:location/loc-0f8xxxxxxxxe4821"
}

Utilizar las opciones del comando de la AWS CLI

Ejecute el siguiente comando de la AWS CLI con las opciones apropiadas:

aws datasync create-location-s3 --s3-bucket-arn arn:aws:s3:::example-source-bucket --s3-storage-class STANDARD --s3-config BucketAccessRoleArn="arn:aws:iam::1111222233334444:role/datasync-transfer-role" --region example-DataSync-Region

Asegúrese de sustituir los siguientes valores en el comando:

  • example-source-bucket con el nombre del bucket de origen
  • 1111222233334444 con el ID de cuenta de la cuenta de origen
  • example-DataSync-Region con la región en la que creará la tarea de DataSync.

Crear una tarea de DataSync

Configure la tarea de DataSync e iníciela desde la consola de DataSync. Para obtener más información, consulte Cómo crear una tarea.

Errores conocidos y resoluciones

Error: error al crear la ubicación de DataSync S3: InvalidRequestException: proporcione un bucket en la región xxx donde se usa DataSync actualmente

Si recibe este error, compruebe si las políticas de bucket e IAM incluyen los siguientes permisos requeridos:

"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
]

Si recibe este error al utilizar un bucket multicuenta, asegúrese de que los buckets estén en la misma región que su tarea de DataSync

Problemas de propiedad de objetos de S3

DataSync no admite el uso de un bucket multicuenta como ubicación de destino. Por lo tanto, no puede usar la ACL bucket-owner-full-control. Si la tarea de DataSync se ejecuta desde la cuenta de bucket de origen, los objetos cargados en la cuenta de bucket de destino pueden tener el problema de propiedad del objeto. Para resolver este problema, si el bucket de destino no tiene objetos que utilicen ACL, considere la posibilidad de desactivar las ACL en el bucket de destino. Para obtener más información, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket. De lo contrario, se recomienda configurar la tarea de DataSync en la cuenta de destino para extraer datos del origen.


How to use AWS DataSync to migrate data between Amazon S3 buckets (Cómo utilizar AWS DataSync para migrar datos entre buckets de Amazon S3)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?