Skip to main content

S3 Replication

Steps to configure the S3 replication service to replicate files from one bucket to another in different accounts.

As a requirement, versioning must be active in both buckets.

s3

1. Create IAM Role in the account where the source bucket is located

Trust Policy

You need a trust policy that allows the S3 service to assume the role:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

Permissions Policy

A permissions policy that allows:

  • Read objects and metadata from the source bucket (Account A).
  • Put objects in the destination bucket (Account B).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadSourceBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl"
],
"Resource": "arn:aws:s3:::<SOURCE_BUCKET_NAME>/*"
},
{
"Sid": "WriteDestBucket",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::<DESTINATION_BUCKET_NAME>/*"
}
]
}

2. Add policy to the destination bucket

In the destination bucket details, go to the permissions tab and add the following policy:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReplicationFromAccountA",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ACCOUNT_A_ID>:role/<ROLE_NAME>"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource": ["arn:aws:s3:::<DESTINATION_BUCKET_NAME>/*"]
}
]
}

3. Configure the replication rule in the source bucket

  • In the source bucket details, go to the "Management" (or "Properties" depending on console version) tab and look for the Replication section.
  • Create a new replication rule and define:
    • Rule name: A descriptive name.
    • Status: Enabled.
    • Source bucket: The current bucket (already selected).
    • Prefix/Filter: You can choose to replicate the entire bucket or only a specific prefix.
    • Destination:
      • Bucket: specify the ARN of the destination bucket in Account B.
    • IAM role: choose the role you created in the first step, which allows replication.

Optional

  • If the "Transfer to destination bucket owner" option is activated, the action must be added to both AllowReplicationFromAccountA (destination bucket policy) and WriteDestBucket (IAM role): "s3:ObjectOwnerOverrideToBucketOwner"

Ways to copy existing files

There are 3 different ways to copy existing files from the bucket:

1. Do it along with replication

When activating replication, it gives you an option to copy all existing files.

2. Use the S3 migration option provided by Sleakops

In the detail of the S3 type dependency, you can find this function that guides you step by step on what needs to be done.

s3-2

3. Use the Batch Operation service

Once the replication rule is created, following these guides:

Add to the S3ReplicationRolePolicy the following actions:

  • "s3:PutObjectTagging" to "Sid": "WriteDestBucket"
  • "s3:GetObjectTagging" and "s3:ListBucket" to "Sid": "ReadSourceBucket"
{
"Sid": "ReadReportBucket",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:GetObjectVersion"],
"Resource": ["arn:aws:s3:::bucket-reports/*"]
}

And add the "s3:InitiateReplication" permission to both WriteDestBucket and SourceBucket.