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-connectorwith a long-lived access key. This is the identity Rivia uses. - An IAM role named
RiviaAccess-Rolethat trusts that user (same account), gated by a per-connection External ID. - Read policies on the role: the AWS-managed
ViewOnlyAccessandSecurityAudit, 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
StringEqualscondition forsts:ExternalIdas 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-connectoruser 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).