Skip to content

Instantly share code, notes, and snippets.

@Nihhaar
Forked from ushu/S3 buckets copy.md
Created January 10, 2020 09:57
Show Gist options
  • Save Nihhaar/88cd2e5f8e8f2bcabfcabb27ff7c19bc to your computer and use it in GitHub Desktop.
Save Nihhaar/88cd2e5f8e8f2bcabfcabb27ff7c19bc to your computer and use it in GitHub Desktop.

Revisions

  1. @ushu ushu revised this gist Nov 7, 2013. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions S3 buckets copy.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,6 @@ Basically the idea there is:
    - we allowe the *destination* account to read the source bucket (in the console for the *source* account)
    - we log as the *destination* and start the copy


    # Step 1 grab the user name for the *destination* account

    log into AWS with the *destination* account and go to "My Account" https://portal.aws.amazon.com/gp/aws/manageYourAccount
    @@ -83,4 +82,4 @@ test the connection and save the configuration.

    now you can copy:

    s3cmd sync --skip-existing --recursive s3://source-bucket s3://destination-bucket
    s3cmd sync --skip-existing --recursive s3://source-bucket s3://destination-bucket
  2. @ushu ushu created this gist Oct 29, 2013.
    86 changes: 86 additions & 0 deletions S3 buckets copy.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@
    This is a mix between two sources:
    - http://www.alfielapeter.com/posts/8-transferring-s3-bucket-contents-between-accounts-with-s3cmd
    - and http://blog.techopsguru.com/2011/12/s3-bucket-copying-with-multiple-accounts.html

    basically the first resource is great but didn't work for me: I had to remove the trailing "/*" in the resource string to make it work. I also noticed that setting the policy on the source bucket was sufficient.
    In the end these are the exact steps I followed to copy data between two buckets on two accounts

    Basically the idea there is:
    - we allowe the *destination* account to read the source bucket (in the console for the *source* account)
    - we log as the *destination* and start the copy


    # Step 1 grab the user name for the *destination* account

    log into AWS with the *destination* account and go to "My Account" https://portal.aws.amazon.com/gp/aws/manageYourAccount
    The account number is on the top right below the search bar (under "Welcome XXX") and is like
    1234-1234-1234 (12 digits)

    For the rest I also assume you have and API key/password, if not:
    - go to the the console https://console.aws.amazon.com
    - click on your name on the top right > Security Credentials
    - Expand "Access Keys" and click on "Create New Access Key"
    You then obtain a file that looks like that:

    AWSAccessKeyId=AAAAAAAAAA
    AWSSecretKey=abababababababababababaabbabab

    The first value (AAAAAAAAAA) is the API key, the second (abababababababababababaabbabab) is the password.


    # Step 2 create the policy for the source bucket

    log into AWS with the *source* account and go to the AWS console for S3

    select your bucket > Properties (on the right) > Permissions > Edit bucket policy
    You then see a dialog named "Bucket Policy Editor"

    on the bottom left of the dialog select "AWS policy generator".
    It will open a new page with a form, set the following values:

    - Select Type of Policy: S3 Bucket Policy
    - Effect: Allow
    - Principal: arn:aws:iam::123412341234:root (123412341234 is the *destination* account number without the dashes)
    - AWS Service: Amazon S3
    - Actions: click "All Actions"
    - Amazon Resource Name: arn:aws:s3:::source-bucket (replace "source-bucket" with your *source* bucket name)

    The click "Add Statement" and then "Generate Policy"
    You then see a dialog with contents similar to:

    {
    "Id": "Policy1383062241257",
    "Statement": [
    {
    "Sid": "Stmt1383062239775",
    "Action": "s3:*",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::source-bucket",
    "Principal": {
    "AWS": [
    "arn:aws:iam::123412341234:root"
    ]
    }
    }
    ]
    }

    *cut and paste* the policy in the dialog of the previous page (the "Bucket Policy Editor") and click "Save"


    # Step 3 copy using s3cmd

    Install s3cmd, on the Mac:

    brew install s3cmd

    then configure your credentials for the *destination* account:

    s3cmd --configure

    It will ask for your API key and corresponding password, then a password to encode your credentials. Andswer yes (y) to
    test the connection and save the configuration.

    now you can copy:

    s3cmd sync --skip-existing --recursive s3://source-bucket s3://destination-bucket