After reviewing your symptoms, this is definitely a multi-layered permission issue that needs systematic debugging across all three focus areas you mentioned.
Cloud Storage Policy Resolution:
Your encryption-at-rest enforcement requires updating the S3 bucket policy to include conditional permissions. Add this to your bucket policy:
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::ACCOUNT:role/SupplierRole"},
"Action": ["s3:PutObject", "s3:PutObjectAcl"],
"Condition": {"StringEquals": {"s3:x-amz-server-side-encryption": "AES256"}}
}
IAM Role Mapping Fix:
The 40% failure rate indicates inconsistent role assumption. Verify your ENOVIA supplier integration is correctly mapping external supplier identities to IAM roles. Check the AssumeRole trust policy includes the ENOVIA application role as a trusted principal. In your ENOVIA configuration, ensure the supplier collaboration service is using the correct STS endpoint for role assumption. We’ve seen cases where the default credential chain wasn’t picking up the container role credentials properly in ECS deployments.
For suppliers using federated access, verify your SAML assertion includes the correct IAM role ARN attribute. The role session name must also comply with AWS naming requirements (alphanumeric and +=,.@- characters only).
Permission Audit Implementation:
Enable detailed CloudTrail logging for your S3 bucket and configure it to capture data events, not just management events. This will show you every PutObject attempt with the exact IAM principal, source IP, and denial reason.
Create a Lambda function triggered by CloudTrail logs that parses permission denied events and correlates them with ENOVIA user sessions. This gives you real-time visibility into which suppliers are affected and why. We built a similar audit system that reduced our troubleshooting time from hours to minutes.
Also implement IAM Access Analyzer to continuously monitor your bucket policies for unintended access. It will flag if your encryption policy accidentally removed necessary permissions.
Immediate Action Plan:
- Run AWS IAM Policy Simulator for a failing supplier account against your S3 bucket ARN with PutObject action
- Check KMS key policy if using SSE-KMS (must grant kms:Decrypt and kms:GenerateDataKey to supplier roles)
- Review ENOVIA application logs for AWS SDK error codes (look for AccessDenied vs InvalidToken vs SignatureDoesNotMatch)
- Verify CORS configuration on bucket matches your ENOVIA CloudFront distribution origin
- Test with AWS CLI using assumed role credentials to isolate whether issue is in AWS layer or ENOVIA integration layer
The inconsistency across suppliers suggests your role assumption logic may be using cached credentials that haven’t been refreshed after the policy change. Force a credential refresh in your ENOVIA application server and verify the STS token duration is appropriate for your upload file sizes (large files need longer-lived tokens).
This draft is based on general ENOVIA knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.