Skip to main content

Manual setup — single AWS account

Use this path if CloudShell, CloudFormation, and Terraform aren't viable in your environment. Those automated options are faster and less error-prone — the wizard generates a ready-to-run script/template for each.

What you'll create

Everything is created in your own AWS account — Rivia has no AWS presence of its own, so nothing here trusts a Rivia-side principal. You create:

  • An IAM user named rivia-connector with a long-lived access key. This is the identity Rivia uses.
  • An IAM role named RiviaAccess-Role that trusts that user (same account), gated by a per-connection External ID.
  • Read policies on the role: the AWS-managed ViewOnlyAccess and SecurityAudit, plus one small Rivia inline policy.

At the end you paste three values back into the Rivia wizard: the Role ARN, the connector user's access key ID, and its secret access key. Rivia stores the key encrypted and assumes the role with it.

1. Copy the External ID

Open the Rivia wizard and keep it open. It displays an External ID generated specifically for this connection — something like rivia-ab12cd34ef56…. Copy it; you'll use it in the role's trust policy.

2. Create the connector user

In the AWS console go to IAM → Users → Create user. Name it rivia-connector. Don't attach any policies to the user itself. After it's created, open the user's Security credentials tab and Create access key (use case: Application running outside AWS). Copy the Access key ID and Secret access key — the secret is shown only once.

3. Create the role

Go to IAM → Roles → Create role. Choose Custom trust policy and paste the JSON below, substituting your 12-digit account ID and the External ID from step 1 (the Rivia wizard's Manual tab renders this with your values already filled in — copy it from there):

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::<YOUR_AWS_ACCOUNT_ID>:user/rivia-connector" },
"Action": "sts:AssumeRole",
"Condition": { "StringEquals": { "sts:ExternalId": "<external-id>" } }
}
]
}

4. Attach the read policies

During role creation, attach both AWS-managed policies:

  • ViewOnlyAccess (arn:aws:iam::aws:policy/job-function/ViewOnlyAccess)
  • SecurityAudit (arn:aws:iam::aws:policy/SecurityAudit)

Then add one inline policy named RiviaSupplementalRead with the document shown on the wizard's Manual tab (cost/usage, organizations, optimizer/advisor, and log-bucket reads the managed policies don't cover).

5. Name the role and finish

Name the role RiviaAccess-Role to match the automated paths, and create it.

6. Paste the three values back into Rivia

In the Rivia wizard, fill in:

  • Rivia Role ARN — the role's full ARN (arn:aws:iam::<account>:role/RiviaAccess-Role).
  • Connector access key ID — from step 2.
  • Connector secret access key — from step 2.

Click Continue and finish. Rivia immediately verifies by assuming the role with the connector key — if the trust policy and External ID are correct, the connection moves to Verified and data sync starts running.

Troubleshooting

  • "The role trust policy is missing the ExternalId condition" — your trust policy allows the connector user to assume the role without the External ID. Add the StringEquals condition for sts:ExternalId as shown in step 3.
  • AccessDenied on verify — the External ID doesn't match, the principal ARN in the trust policy is wrong (must be the rivia-connector user in the same account as the role), or the access key you pasted doesn't belong to that user.
  • Role shows Verified but data sync is thin — a read policy is missing. Re-check step 4 (both managed policies plus the inline policy).