This page covers skill access to AWS (Redshift, Athena, S3, EKS), not model access. xpander calls Amazon Bedrock with the pods’ own credentials, so
bedrock:InvokeModel* and bedrock:Converse* go on the role bound to the pods, not on a skill role. See Amazon Bedrock without a key and, for Hybrid, Amazon Bedrock: keyless IAM or API key.Architecture overview
Why three tiers
Using one role for all skills, as in AWS Operator Setup? This page splits it per skill.
Step 1: Base role
The only role on the pods. No service permissions, only assume.AssumeConnectorRoles to xpander-base-role, and extend Resource as you add skills:
Step 2: Skill roles
Each skill role needs a trust policy with four statements:Trust Policy Template
Permission policies per skill
Self-Assume + Session Tagging (required for all skill roles)
Redshift Skill
Redshift Skill
EKS Skill
EKS Skill
Step 3: Configure in xpander UI
Set each skill connection’s IAM Role ARN to its skill role, not the base role:Adding a new skill
For S3, DynamoDB, Athena or any other AWS skill:1
Create the skill role
Use the trust policy template above.
2
Attach service-specific permissions
Add the service permissions and the self-assume policy.
3
Update the base role
Add the new role ARN to the
AssumeConnectorRoles policy on the base role.4
Configure in xpander UI
Set the skill’s IAM Role ARN.
5
Restart the skill relay
Role creation order
A role can’t reference itself at creation:- Create the role with only the
PodIdentityandCrossAccountWithExternalIdtrust statements. - Wait 10 seconds for IAM propagation.
- Update the trust policy to add the
SelfAssumeandAllowFromBaseRolestatements.
Troubleshooting
AccessDenied: sts:AssumeRole (self-assume)
AccessDenied: sts:AssumeRole (self-assume)
Remove any
ExternalId condition from SelfAssume and AllowFromBaseRole, and add the self-assume permission policy.AccessDenied: sts:AssumeRole (from base role)
AccessDenied: sts:AssumeRole (from base role)
The base role’s policy must list the skill role ARN, and the skill role’s trust policy must have
AllowFromBaseRole.Skill works in cloud but not self-hosted
Skill works in cloud but not self-hosted
Self-hosted chains through the base role without an ExternalId. Add the
AllowFromBaseRole trust statement.Security recommendations
Next steps
Set up the AWS Operator
The single-role setup.
Give Bedrock access to the pods
Model access on the pod role.

