AWS Connect Role-to-Role Access for Conversation Ingestion
Last updated: October 23, 2026
Overview
Clients can now integrate their AWS connect instance with LevelAI through role to role access method for authentication to ingest in Call and Chat conversations.
Prerequisites
An AWS account with permission to create IAM roles.
An Amazon Connect instance that already exports data to S3. Under Amazon Connect → Data storage, that means:
Call recordings
Chat transcripts (needed only if you use chat channels)
Contact Trace Record files
The S3 bucket name(s), region(s) and folder prefixes where this data is stored.
Expected Folder Structure
Data | Example prefix | Required |
|---|---|---|
CTR files |
| Yes |
Call recordings |
| Yes (for calls) |
Chat transcripts |
| Only for chat channels |
Level AI finds recordings and chat transcripts through the
recording.locationvalue inside each CTR record. The role must be able to read whatever bucket and path Amazon Connect writes there.
CTR, Recording or transcript files can be partitioned by date, and recommended to be ctr/2026/10/23/
Step 1: IAM Role for Level AI Access
Create an IAM role in your AWS account for Level AI to assume.
1.1 Create the role
In the AWS Console, go to IAM → Roles → Create role.
Trusted entity type: choose Custom trust policy. You'll define the trust in Step 2.
Role name: for example
LevelAI-AWSConnect-ReadOnly-Role, or a name that fits your own naming standards.Description: for example "Allows Level AI read-only access to Amazon Connect recordings, transcripts and CTR files."
1.2 Attach a permissions policy to the role
The role needs only these permissions:
List the bucket (
s3:ListBucket,s3:GetBucketLocation)Read objects (
s3:GetObject)
Example policy. Replace YOUR-BUCKET-NAME, and add the transcript bucket only if it's a different bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListBucket",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-TRANSCRIPT-BUCKET-NAME"
]
},
{
"Sid": "ReadConnectData",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::YOUR-BUCKET-NAME/*",
"arn:aws:s3:::YOUR-TRANSCRIPT-BUCKET-NAME/*"
]
}
]
}You can limit Resource to specific prefixes, for example arn:aws:s3:::YOUR-BUCKET-NAME/connect/your-instance/*. Make sure the CTR, recording and transcript paths are all included.
Once the role is created, note its ARN, for example arn:aws:iam::123456789012:role/LevelAI-AWSConnect-ReadOnly-Role.
Step 2: Configure Role-to-Role Trust
Level AI uses role-to-role (cross-account) assumption: our AWS role assumes your role. You need to allow Level AI's role as a trusted principal.
2.1 Get Level AI's role ARN
Level AI's role ARN: arn:aws:iam::826093755571:role/levelai-<levelaiinstancename>-role
2.2 Set the trust policy on your role
Edit the trust policy of the role from Step 1. The principal must be Level AI's role ARN and the action must be sts:AssumeRole.
Example trust policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::826093755571:role/levelai-<levelaitenantname>-role"
},
"Action": "sts:AssumeRole"
}
]
}Optional: require an External ID. For extra protection, add a condition so the role can be assumed only when the External ID you choose is supplied:
"Condition": {
"StringEquals": {
"sts:ExternalId": "YOUR-EXTERNAL-ID"
}
}The External ID can be 2–1224 characters long, using letters, digits and +=,.@:/-. If you set one, share it with Level AI. Only this principal can assume your role, and no access keys or secrets are needed.
Information to Share with Level AI
Please send the following through a secure channel:
Field | Description | Example |
|---|---|---|
Role ARN (required) | ARN of the IAM role created in Step 1 |
|
External ID (optional) | Only if your trust policy requires one |
|
Bucket Name (required) | Bucket that holds the CTR files and recordings |
|
Region (required) | Region of that bucket |
|
Folder Prefix (optional) | Prefix where the CTR files are stored |
|
Transcript Folder Prefix (optional) | Prefix for chat transcripts. Needed only for chat channels |
|
Transcript Bucket Name (optional) | Only if transcripts are in a different bucket |
|
Transcript Bucket Region (optional) | Only if the transcript bucket is in a different region |
|
Level AI gives you our Level AI Role ARN to use in your trust policy (Step 2). No access keys or secrets are required.