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

Última actualización: 14-12-2022

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

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 entre cuentas. Esto provoca problemas de propiedad de los objetos en el bucket de destino.
  • Para una ubicación de S3 entre cuentas, solo se admiten los buckets entre cuentas en la misma región. Si intenta utilizar una ubicación de S3 entre cuentas y entre regiones, verá los errores GetBucketLocation o Unable to connect to S3 endpoint (No se puede conectar a un punto de conexión de S3). De este modo, si crea una tarea en la cuenta de origen, deberá hacerlo en la misma región que el bucket de destino. Si crea una tarea en la cuenta de destino, deberá hacerlo en la misma región que el bucket de origen.
  • No puede utilizar el rol de transferencia entre cuentas para acceder a la ubicación de S3 entre cuentas.

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 siguientes verificaciones:

Usuario o rol de AWS Identity and Management (IAM): compruebe si los siguientes usuarios o roles de IAM tienen los permisos necesarios:

  • El usuario o el rol que usa para crear la ubicación de S3 entre cuentas
  • El rol que asignó a la ubicación de S3

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:

Utilice la AWS CLI o SDK para crear una ubicación de S3 de origen entre cuentas 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 cree la ubicación de S3, verá el siguiente resultado:

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

Observe que 123456789012 es el ID de cuenta de la cuenta de origen.

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
  • 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 Inicio de una tarea de AWS DataSync.

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?