subir servidor precios name listar aws archivos acceso amazon-s3 s3cmd

amazon s3 - servidor - S3 mover archivos entre cubos en diferentes cuentas?



subir archivos a amazon s3 c# (5)

Estoy trabajando para un cliente que tiene 2 cuentas de AWS separadas. Necesitamos mover todos los archivos en un depósito en una de sus cuentas S3 a un nuevo depósito en la segunda cuenta

Pensamos que s3cmd lo permitiría, usando el formato:

s3cmd cp s3://bucket1 s3://bucket2 --recursive

Sin embargo, esto solo me permite usar las claves de una cuenta y no puedo especificar las cuentas de la segunda cuenta.

¿Hay alguna forma de hacerlo sin descargar los archivos y volver a cargarlos en la segunda cuenta?


El ancho de banda dentro de AWS no cuenta, por lo que puede ahorrar algo de dinero y tiempo al hacerlo desde un cuadro dentro de AWS, siempre que los grupos estén en la misma región.

En cuanto a hacerlo sin tener que tocar el archivo en una computadora, no lo creas.

Excepto: como hacen cargas masivas desde los discos duros que les envías por correo, podrían hacer lo mismo por ti para una transferencia de cubo a cubo.


Incluso si los roles y las políticas son una forma realmente elegante, tengo otra solución:

  1. Obtenga sus credenciales de AWS para Source-Buckets-Account
  2. Lo mismo para Destination-Buckets-Account
  3. En su máquina local (Escritorio o cualquier servidor fuera de AWS) cree un nuevo perfil con las Credenciales de las Cuentas de Buceo de Origen.

    aws --profile $ {YOUR_CUSTOM_PROFILE} configure

  4. rellene aws_access_key_id y aws_secret_access_key (puede omitir la región y la salida)

  5. Guarde sus credenciales de destino de destino como variables de entorno

    exportar AWS_ACCESS_KEY_ID = AKI ...

    exportar AWS_SECRET_ACCESS_KEY = CN ...

  6. Ahora haga la sincronización, pero agregue el "perfil" crucial -Parámetro

    aws --profile $ {YOUR_CUSTOM_PROFILE} s3 sync s3: // $ {SOURCE_BUCKET_NAME} s3: // $ {DESTINATION_BUCKET_NAME}


No tienes que abrir permisos para todos. Utilice las siguientes políticas de Cubetas en el origen y el destino para copiar de una cubeta en una cuenta a otra utilizando un usuario de IAM

Cubo para copiar de - SourceBucket

Cubo para copiar a - DestinationBucket

ID de cuenta de origen de AWS - XXXX – XXXX-XXXX

Usuario fuente de IAM - src – iam-user

La siguiente política significa: el usuario IAM - XXXX – XXXX-XXXX: src – iam-user tiene s3: ListBucket y s3: Privilegios GetObject en SourceBucket / * y s3: ListBucket y s3: PutObject privilegios en DestinationBucket / *

En SourceBucket, la política debería ser como:

{ "Id": "Policy1357935677554", "Statement": [ { "Sid": "Stmt1357935647218", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::SourceBucket", "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} }, { "Sid": "Stmt1357935676138", "Action": ["s3:GetObject"], "Effect": "Allow", "Resource": "arn:aws:s3::: SourceBucket/*", "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} } ] }

En el DestinationBucket la política debe ser:

{ "Id": "Policy1357935677554", "Statement": [ { "Sid": "Stmt1357935647218", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3::: DestinationBucket", "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} }, { "Sid": "Stmt1357935676138", "Action": ["s3:PutObject"], "Effect": "Allow", "Resource": "arn:aws:s3::: DestinationBucket/*", "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} } ] }

el comando que se ejecutará es s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


Ok, descubrí una respuesta. Probablemente hay otras formas de hacer esto también, pero esto es muy fácil.

Pude hacer esto con la utilidad s3cmd, pero probablemente se puede hacer con herramientas similares.

Cuando configure s3cmd, configúrelo con la clave de acceso y la clave de acceso secreta de su cuenta.

Inicie sesión en la consola web de S3 utilizando la cuenta del depósito al que está transfiriendo .

Visita la consola web S3.

https://console.aws.amazon.com/s3/home

Haz clic en tu cubo, luego en Acciones, luego en Propiedades.

En la parte inferior de la pestaña "Permisos", haga clic en "Agregar más permisos".

Set "Grantee" to Everyone Check "List" and "Upload/Delete" Save

Para transferir, ejecute desde su terminal

s3cmd cp s3://from_account_bucket s3://to_account_bucket --recursive

Cuando se complete la transferencia, debe visitar de inmediato la consola S3 nuevamente y eliminar los permisos que agregó para el depósito.

Obviamente hay un problema de seguridad aquí. El cubo al que estamos transfiriendo está abierto para todos. Las posibilidades de que alguien encuentre el nombre de tu cubo son pequeñas, pero existen.

Puede usar las políticas de depósito como una forma alternativa de abrir solo el acceso a cuentas específicas, pero para mí fue demasiado difícil hacerlo, así que lo dejo como un ejercicio para aquellos que necesitan resolverlo.

Espero que esto ayude.


Sugeriría usar el explorador de cloudberry s3, como una solución simple para que las cosas se muevan rápidamente. También le permite hacer uso de los servicios internos de transferencia sin ancho de banda.

También puede utilizar las herramientas de cloudberry sdk para integrarse en sus aplicaciones.

Buena suerte jon