VPS Snaps

Configuring AWS S3

Step-by-step guide to connecting an S3 bucket as a storage destination.

5 min readStorage

AWS S3 is the most common storage destination. You'll need a bucket, and either an IAM user with limited permissions or a role VPS Snaps can use with no key at all.

Step 1 — Create a bucket

In the AWS console, go to S3 → Create Bucket. Choose a region close to your servers to minimize transfer costs. Keep 'Block all public access' enabled — backups should never be public.

No key at all: connect with an IAM role

Instead of Steps 2 to 4, you can let VPS Snaps in through a role, so there is no access key to store, rotate or leak. In VPS Snaps → Storage → Add Destination, choose AWS S3, fill in the name, bucket and region, then choose IAM role (no key) and Show the setup commands. Paste them into AWS CloudShell, signed in to the account that owns the bucket: they make an identity provider that trusts VPS Snaps for your workspace only, and a role with the policy below on that one bucket. Paste the role ARN they print and press Connect & test; VPS Snaps writes and deletes a test file before it saves anything. Every backup then gets credentials from AWS that expire within the hour.

Backups run through the VPS Snaps Agent can't use a role yet. Use an access key for a destination that Agent jobs store to.

Step 2 — Create an IAM user

Go to IAM → Users → Create User. Attach the following inline policy (replace YOUR_BUCKET_NAME). The last two actions clean up after an upload that was cut off: S3 keeps an unfinished upload's parts, billed and hidden from the bucket's file list, until something cancels them. Cancelling removes only those parts, never a finished backup. The last one only reads whether the bucket has Object Lock turned on, so the dashboard can show how long your backups are locked.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:AbortMultipartUpload",
        "s3:GetBucketObjectLockConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::YOUR_BUCKET_NAME",
        "arn:aws:s3:::YOUR_BUCKET_NAME/*"
      ]
    }
  ]
}

Never use your AWS root credentials. Always create a dedicated IAM user with minimal permissions.

Step 3 — Generate access keys

In IAM → Users → your user → Security credentials → Create access key. Copy both the Access Key ID and Secret Access Key — the secret is shown only once.

Step 4 — Add to VPS Snaps

In VPS Snaps → Storage → Add Destination, select AWS S3, and fill in: bucket name, region (e.g. us-east-1), access key ID, and secret access key. Leave the endpoint URL blank for standard S3.

Still stuck?

Open the failed run under Backup History and copy the error text out of the log — pasting that into your first message is usually the difference between one reply and four.