web-dev-qa-db-ja.com

S3は異なるアカウントのバケット間でファイルを移動しますか?

私は、2つの個別のAWSアカウントを持っているクライアントの仕事をしています。 S3アカウントの1つのバケット内のすべてのファイルを、2番目のアカウントの新しいバケットに移動する必要があります。

S3cmdは、次の形式を使用してこれを許可すると考えました。

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

ただし、これにより、1つのアカウントのキーのみを使用でき、2番目のアカウントのアカウントを指定することはできません。

ファイルをダウンロードして2番目のアカウントに再度アップロードせずにこれを行う方法はありますか?

24
Geuis

全員に許可を与える必要はありません。 IAMユーザーを使用して、あるアカウントのバケットから別のアカウントにコピーするために、ソースおよび宛先で以下のバケットポリシーを使用します

  • コピー元のバケット:SourceBucket

  • コピー先のバケット:DestinationBucket

  • ソースAWSアカウントID:XXXX–XXXX-XXXX

  • ソースIAMユーザー:src–iam-user

以下のポリシーは、IAMユーザー-XXXX–XXXX-XXXX:src–iam-users3:ListBucketおよびs3:GetObject特権を持っていることを意味しますon SourceBucket/*およびs3:ListBucketおよびs3:PutObject特権はDestinationBucket/*を持っています

SourceBucketでは、ポリシーは次のようになります。

{
  "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"}
  }]
}

DestinationBucketでは、ポリシーは次のようになります。

{
  "Id": "Policy1357935677555",
  "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"}
  }]
}

実行するコマンドはs3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1です

43
Robs

AWS内の帯域幅はカウントされないため、バケットが同じリージョンにある限り、AWS内のボックスからすべてを実行することで、お金と時間を節約できます。

ファイルをどこかのコンピューターにタッチダウンせずにそれを行うことに関しては、そうは思わないでください。

例外:彼らはメールを送信するハードドライブから一括アップロードを行うので、バケットからバケットへの転送についても同じことができます。

3
Tom Andersen

物事を迅速に進めるためのシンプルなソリューションとして、cloudberry s3 Explorerを使用することをお勧めします。また、内部AWS帯域幅無料転送サービスを利用することもできます。

Cloudberry sdkツールを使用して、アプリに統合することもできます。

がんばろうジョン

0
JonLovett

役割とポリシーが非常にエレガントな方法であっても、別の解決策があります。

  1. Source-Buckets-AccountのAWS認証情報を取得する
  2. Destination-Buckets-Accountにも同じ
  3. ローカルマシン(デスクトップまたはAWS外のサーバー)で、Source-Bucket-Accountsの認証情報を使用して新しいプロファイルを作成します。

    aws --profile $ {YOUR_CUSTOM_PROFILE} configure

  4. aws_access_key_idとaws_secret_access_keyを入力します(リージョンと出力はスキップできます)

  5. Destination-Bucket-Credentialsを環境変数として保存します

    aWS_ACCESS_KEY_ID = AKIをエクスポート...

    aWS_SECRET_ACCESS_KEY = CNをエクスポート...

  6. 同期を行いますが、重要な「プロファイル」パラメータを追加します

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

0
DerKnorr