I’ll walk you through fixing all three integration points - SSO identity mapping, IAM policy, and cloud storage configuration.
Step 1: SSO Identity Mapping
Verify Qualio is passing the correct identity attributes during role assumption. In Qualio Admin > Integrations > Cloud Storage, check that the “SSO Role Mapping” field matches your IAM role ARN exactly: arn:aws:iam::123456789:role/QualioExportRole. The identity mapping must include session tags that your trust policy expects.
Step 2: IAM Policy Update
Your trust policy needs to allow Qualio’s service principal while maintaining security. Update the trust relationship:
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::QUALIO-ACCOUNT:role/ExportService"},
"Action": "sts:AssumeRole",
"Condition": {"StringEquals": {"sts:ExternalId": "your-unique-external-id"}}
}
Remove any IP-based conditions (aws:SourceIp) as these break SaaS integrations. The ExternalId provides security without IP restrictions. Get your unique ExternalId from Qualio Support.
For the role’s permission policy, ensure it has:
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:PutObjectAcl"],
"Resource": "arn:aws:s3:::company-audit-reports/*"
}
Step 3: Cloud Storage Integration
In Qualio, update the integration configuration:
- Navigate to Admin > Integrations > Cloud Storage
- For AWS S3: Enter the ExternalId in the “External ID” field
- Test connection using “Verify Configuration” button
- If verification passes, the role assumption is working
Step 4: Validate the Full Chain
Test with a small audit report export:
- The SSO user’s identity is mapped to the IAM role
- Qualio assumes the role using ExternalId for security
- The assumed role session has permissions to write to S3
- The S3 bucket policy (if present) allows the role’s writes
Common gotcha: If you have a bucket policy, it might also need updating to allow the role. Check the bucket policy for any Deny statements that could override the role permissions.
Azure Blob Backup: While fixing AWS, configure Azure as your backup. The integration is simpler - just needs a SAS token with write permissions to your blob container. No complex trust policies required. This gives you redundancy and a working path for your FDA inspection.
The key insight: IAM policy updates often add conditions that break the session tag propagation from SSO through role assumption to S3 access. The ExternalId approach sidesteps this by providing security at the trust policy level without complex conditions that can interfere with identity mapping.