ℹ️ Info
This document provides clear instructions for configuring Asynchronous S3 replication using local users and identity policies.
The steps listed in this procedure have been tested on VAST 5.2 and above.
Create an identity policy
Log in to the VAST UI.
Go to User Management.
Click on Identity Policy.
Click on Create Policy, type a name for the new policy, and set the policy definition. The policy definition can be done using the Action and Resource drop-down menus or the JSON code box.
You can use the JSON example below to set the policy.

JSON code example
JSON policy definition example.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-1",
"arn:aws:s3:::bucket-1/*"
]
}
]
}ℹ️ Info
NOTE - The identity policy is automatically replicated to the DR(remote) cluster, but in Disabled mode, please manually enable it.
Create a local user (On the production cluster)
From the VAST UI, navigate to User Management.
Click on Users.
Click the Create user button, then provide a username and a UID.
Use the Identity Policy drop-down menu to select the required policy (in the example, I’ve used the policy we created in the previous step).
Click on the Create button.

Add User
Click Edit on the newly created user and click the Create new keys button.
Make sure to save a copy of the key before clicking the Update button.

Update User
ℹ️ Info
Note that to enable access on the remote cluster in case of a failover, you need to set a user with the same keys on the remote cluster.
Create a replication peer
From the VAST UI, go to Data Protection.
Replication Peers, then click the Create Peer button.
Name the new peer and provide the Remote VIP address, choose the Local IP Pool to use, and click on Create.

Add native replication peer
Wait a few moments and verify that the peer is connected before moving on.

Data Protection
Enable S3 Bucket replication
Production Cluster
From the VAST UI, go to Settings.
Click S3, then enable Bucket Replication.

Enable bucket replication
ℹ️ Info
You will be prompted to enable the replication. Note that this option is not reversible.

Enable bucket replication confirmation
Configure Protected Path
From the VAST UI, navigate to Data Protection.
Click on Protected Path.
Click Create Protected Path, then choose New Remote Protected Path.

Create Protected Path
Name the new protected path and fill the Path field.
Note that you can set the path to a specific bucket or to an endpoint. In this example, we’ve pointed to an endpoint, so every bucket created under this endpoint will be included in the replication.

Create new protected path
Click Next to continue.
Select Replication Type = Async Replication.
Specify which Protection Policy to use; if none exists, click on Create new policy and fill in the needed parameters that best meet your operational requirements.

Add protection policy
In this example, we’ve selected a preconfigured policy.
Specify the Path parameter and note that the path must not be already configured on the remote system.
Click Add.

Set protected path parameters
Click the Create button, then wait for the new path to complete initialization and become Active.

Create Remote Protected Path
Configure “Remote” system local user (On the DR cluster)
On the remote system from the VAST UI, navigate to “User Management” => “Users”.
Click the Create User button, provide a username, and a UID.
Use the Identity Policy drop-down menu to select the required policy (in the example, we’ve used the policy created in the previous step).
Click on the Create button.

Add User
Click Edit on the newly created user and click the Provide access and secret keys mark.
Enter the access and secret keys of the user created on the “Local” system.

Update User
Click the Update button to complete the operation.
ℹ️ Info
At this point, each bucket you create on the “Local” system will be replicated to the “Remote” system.
Initiate FailOver
To initiate FailOver, go to the UI of the remote (DR) cluster.
Go to Data Protection.
Go to Protected Paths.
Right-click on the newly created protected path and select:
Replication => Modify Replication State.

Modify Replication State
Select FailOver based on your preference.
Stand alone: Any updates done afterwards at <your path name> on <your “local” cluster> are not available at <your “remote” cluster>.
Source: The configured replication interval is x. The estimated Read-Only time is xxx. To reduce the Read-Only time, you may reduce the replication interval.
Click on the FailOver button.

Modify replication state
Click Yes on the confirmation box.

Confirm modification
Monitor the Role of the protected path and wait until it changes from Destination to Source.

Observe changes
Once the failover is completed, the operation is done.
ℹ️ Info
The remote (DR) bucket is always in ReadOnly mode, and attempting to write to it will issue “(AccessDenied) when calling the PutObject operation: Access Denied” Error message.
ℹ️ Info
Note that FailOver and FailBack are always performed from the “Remote/DR” cluster.
Client configuration notes
ℹ️ Info
Although the above procedure covers the system behavior, client adjustments are required for operational continuity. Follow the baseline instructions below for configuring the client.
Given that our production cluster is accessible via the DNS name s3.prod.vast.local and our bucket is prod-bucket, and that the remote (DR) cluster is accessible via s3.dr.vast.local, assuming we've already configured prod-bucket to be included in our protected-path (or simply created it under the protected endpoint), all we need to do to establish continuity is to point our application to the new (active) system by updating the S3 endpoint.
Example (Python with Boto3):
Before (Production):
import boto3
# Connect to production S3 cluster
s3_client = boto3.client(
's3',
endpoint_url='http://s3.prod.vast.local',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY'
)
# Verify bucket access by listing objects
response = s3_client.list_objects_v2(Bucket='prod-bucket')
for item in response.get('Contents', []):
print(f"Object found: {item['Key']}")
After Failover (DR cluster becomes active):
import boto3
# Connect to the DR S3 cluster
s3_client = boto3.client(
's3',
endpoint_url='http://s3.dr.vast.local', # Update only this line
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY'
)
# Verify bucket access by listing objects
response = s3_client.list_objects_v2(Bucket='prod-bucket')
for item in response.get('Contents', []):
print(f"Object found: {item['Key']}")