About AWS
Amazon Web Services (AWS) is a public-cloud platform offering on-demand compute, storage, database, identity, and networking services. The Serval AWS integration is multi-product: connecting an AWS account once gives your workflows access to nine AWS services - EC2, IAM, S3, Lambda, RDS, RDS Data, SSO Admin, Identity Store, and Organizations - limited only by the permissions on the IAM role you delegate. Each connected AWS account is its own app instance keyed by its 12-digit account ID, so multi-account organizations connect each account individually and workflows can target one account or all of them. Authentication: Cross-account IAM role assumption (STS AssumeRole with an External ID). Serval never stores long-lived AWS keys - only your Role ARN and a Serval-generated External ID, exchanged at runtime for short-lived 15-minute session credentials. Data sync: No user or identity sync. The only background sync ingests IAM roles tagged with the key “serval” (including their inline and attached policies) to power temporary role access; everything else is on-demand from workflows.What the AWS integration enables
Get your credentials
Serval connects to AWS by assuming an IAM role in your account, following AWS’s standard pattern for delegating access to another AWS account. You create the role, tell it to trust Serval’s AWS account for your region with an External ID, and attach whatever permission policies your workflows need - Serval mandates no permissions of its own. Each Serval region runs in its own AWS account, so the account your role trusts depends on where your organization is hosted. Check the address you sign in at, and ask support@serval.com if you’re unsure which region you’re on.Open the Connect AWS dialog in Serval
Create a cross-account role in AWS
Enter the Serval account and External ID
Attach permission policies
Name and create the role
Add the TagSession statement to the trust policy
sts:TagSession statement alongside the existing sts:AssumeRole statement. Both statements use the Serval account principal; keep the sts:ExternalId condition on the AssumeRole statement. Pick the tab for your region and replace <EXTERNAL_ID> (including the angle brackets) with the External ID shown in the Connect AWS dialog:- United States (US1)
- European Union (EU1)
- Self-hosted
Copy the Role ARN
Connect in Serval
Open Integrations → All integrations → AWS → Connect
Your AWS Account ID (required)
Your AWS Account Name (required)
Role ARN (required)
Submit
Verifying the connection
After connecting, run the health checks from the app instance page. Test AWS Connection - verifies Serval can assume your cross-account role by making a minimal IAM read call.- Success: “Successfully authenticated with AWS”
- Role assumption fails (for example, a trust policy naming the wrong Serval account or lacking
sts:TagSession, an External ID mismatch, or a nonexistent role): “Unable to authenticate with AWS. Please verify your cross-account role ARN and external ID are correct.” - If role assumption works but the role can’t read IAM: “Connection successful, but IAM role lacks iam:ListRoles permission.”
- If role assumption works but the IAM request fails for another reason: “Authenticated with AWS, but the IAM ListRoles request failed.”
- Success: “Successfully retrieved [number] accounts from AWS Organizations”
- Role assumption fails: “Unable to authenticate with AWS. Please verify your cross-account role ARN and external ID are correct.”
- Standalone account (not in an Organization): “This AWS account is not part of an AWS Organization.”
- Permission missing but auth working: “Connection successful, but IAM role lacks organizations:ListAccounts permission.”
- Any other failure, such as throttling or a network problem (ignore the permission advice and read the error shown beneath the message): “Unable to access AWS Organizations. Ensure the IAM role has organizations:ListAccounts permission.”
Gotchas and troubleshooting
The Organizations health check can fail by design
The Organizations health check can fail by design
Role ingestion only sees roles tagged "serval"
Role ingestion only sees roles tagged "serval"
A well-formed Role ARN connects even when the role is wrong
A well-formed Role ARN connects even when the role is wrong
arn:aws:iam::<12-digit account ID>:role/<name>) before the connection is saved. A well-formed ARN for a role that doesn’t exist or doesn’t trust Serval still connects “successfully” and fails later at “Test AWS Connection” with “Unable to authenticate with AWS. Please verify your cross-account role ARN and external ID are correct.”A region is required on every call, even for global services
A region is required on every call, even for global services
The External ID is deterministic, not random
The External ID is deterministic, not random
One connection per AWS account
One connection per AWS account
Sessions last 15 minutes and refresh automatically
Sessions last 15 minutes and refresh automatically
AWS traffic bypasses the Serval HTTP proxy allow-list
AWS traffic bypasses the Serval HTTP proxy allow-list
*.amazonaws.com) directly. The effective outbound surface is the endpoints of the nine supported services, plus AWS STS for the credential exchange Serval performs on your connection’s behalf.Which Serval AWS account ID to trust
Which Serval AWS account ID to trust
992382851720 for United States organizations (app.serval.com), 311208284913 for European Union organizations (app.eu1.serval.com), and the account your own worker runs in for self-hosted deployments. The Connect AWS dialog shows the account for the region you’re signed in to, and the trust policy must name that same account. If the dialog shows 992382851720 on a European Union tenant, that build predates the region-aware dialog, so use the table in Get your credentials instead. Serval can’t assume a role that trusts a different account, and “Test AWS Connection” fails with “Unable to authenticate with AWS. Please verify your cross-account role ARN and external ID are correct.” If you’re self-hosted, ignore the value in the dialog and confirm the worker’s account ID with your Serval contact before writing the trust policy.Need help? Contact support@serval.com for assistance with your AWS integration.

