💸 Catch expensive AWS mistakes before deployment! See cost impact in GitHub PRs for Terraform & CDK. Join the Free Beta!

AWS Service Principals List: Complete Reference with 578 Principals (2026)

Complete list of 578 AWS service principals, auto-updated from AWS Policy Generator. Includes trust policy examples, regional variations, confused deputy protection, and documentation links.

0 views
--- likes

When working with AWS IAM policies and trust relationships, you need to know the exact service principal for each AWS service. This comprehensive reference provides instant access to all 578 AWS service principals, making IAM policy development faster and more accurate.

In this guide, you'll learn:

  • What service principals are and how they enable service-to-service access
  • How to use the complete auto-updated reference table
  • Trust policies, resource-based policies, and service-linked roles
  • Regional service principal variations for opt-in regions
  • How to protect against confused deputy attacks
  • Infrastructure as Code examples for CDK and CloudFormation

What is an AWS Service Principal?

A service principal is an identifier that represents an AWS service in IAM policies. When you see something like lambda.amazonaws.com or ec2.amazonaws.com in a policy's Principal element, that's a service principal. These identifiers allow AWS services to assume IAM roles and perform actions on your behalf.

Think of service principals as the "identity card" that AWS services present when they need to access resources in your account. Without the correct service principal in your trust policy, an AWS service cannot assume the role you've created for it.

The service principal is defined by AWS itself, and you cannot create custom service principals or use wildcards like "Service": "*" in IAM policies. Each AWS service has its own specific identifier.

Service Principal Format and Structure

Service principals follow a standardized naming convention. The standard format is:

service-name.amazonaws.com

Here are some common examples:

  • lambda.amazonaws.com for AWS Lambda
  • ec2.amazonaws.com for Amazon EC2
  • s3.amazonaws.com for Amazon S3
  • ecs-tasks.amazonaws.com for Amazon ECS Tasks
  • codebuild.amazonaws.com for AWS CodeBuild

When multiple services need to assume the same role, you can specify them using an array format:

"Principal": {
    "Service": [
        "ecs.amazonaws.com",
        "elasticloadbalancing.amazonaws.com"
    ]
}

This syntax is useful when you need a shared role for services that work together, like ECS and Elastic Load Balancing. You can learn more about creating such roles in my guide on how to create IAM roles with multiple principals using AWS CDK.

How Service Principals Enable Service-to-Service Access

Service principals work through a trust relationship mechanism. Here's how the flow works:

  1. An AWS service (like Lambda) needs to access resources in your account
  2. The service presents its service principal and calls sts:AssumeRole
  3. IAM checks the role's trust policy to verify the service principal is allowed
  4. If authorized, IAM returns temporary security credentials
  5. The service uses these credentials to access your resources

This mechanism ensures that only the intended AWS services can assume roles in your account. The trust policy acts as the gatekeeper, and the service principal is the key.

Complete AWS Service Principals Reference (2026)

The table below contains every AWS service principal, automatically fetched from the AWS Policy Generator and updated for 2026. Use your browser's search function (Ctrl+F or Cmd+F) to quickly find the service you need:

Total Unique Service Principals: 578 | With Documentation Links: 91 | Last Updated: January 2, 2026

Service NameService PrincipalReference
AWS App2Containera2c.amazonaws.com
Alexa for Businessa4b.amazonaws.com
AWS IAM Access Analyzeraccess-analyzer.amazonaws.com
AWS Account Managementaccount.amazonaws.com
AWS Private Certificate Authorityacm-pca.amazonaws.com
AWS Certificate Manager (ACM)acm.amazonaws.comDocumentation
AWS Compute Optimizer Automationaco-automation.amazonaws.com
AWS Action Recommendationsaction-recommendations.amazonaws.com
AWS Activateactivate.amazonaws.com
AWS DevOps Agent Serviceaidevops.amazonaws.com
Amazon AI Operationsaiops.amazonaws.com
Amazon MWAA Environmentairflow-env.amazonaws.com
AWS MWAA Serverlessairflow-serverless.amazonaws.com
Amazon Managed Workflows for Apache Airflowairflow.amazonaws.com
Alexa App Kitalexa-appkit.amazon.com
Alexa Smart Homealexa-connectedhome.amazon.com
Amazon MQamazonmq.amazonaws.com
AWS Amplifyamplify.amazonaws.com
AWS Amplify Adminamplifybackend.amazonaws.com
AWS Amplify UI Builderamplifyuibuilder.amazonaws.com
Amazon OpenSearch Serverlessaoss.amazonaws.com
Amazon EventBridgeapidestinations.events.amazonaws.com
Amazon API Gateway Managementapigateway.amazonaws.com
Amazon AppIntegrationsapp-integrations.amazonaws.comDocumentation
AWS AppConfigappconfig.amazonaws.com
AWS AppFabricappfabric.amazonaws.com
Amazon AppFlowappflow.amazonaws.com
AWS Application Auto Scalingapplication-autoscaling.amazonaws.com
Application Cost Profilerapplication-cost-profiler.amazonaws.com
CloudWatch Application Insightsapplication-insights.amazonaws.com
Amazon CloudWatch Application Signalsapplication-signals.amazonaws.com
Amazon CloudWatchapplication-signals.cloudwatch.amazonaws.com
AWS Application Transformation Serviceapplication-transformation.amazonaws.com
Amazon CloudWatch Application Insightsapplicationinsights.amazonaws.com
AWS App Mesh Previewappmesh-preview.amazonaws.com
AWS App Mesh Previewappmesh.amazonaws.comDocumentation
AWS App Runnerapprunner.amazonaws.com
Amazon AppStream 2.0appstream.amazonaws.com
Application Auto Scalingappstream.application-autoscaling.amazonaws.com
AWS App Studioappstudio.amazonaws.com
AWS AppSyncappsync.amazonaws.com
AWS Mainframe Modernization Application Testingapptest.amazonaws.com
Amazon Managed Service for Prometheusaps.amazonaws.com
Amazon ARC Region switcharc-region-switch.amazonaws.com
Amazon Application Recovery Controller - Zonal Shiftarc-zonal-shift.amazonaws.com
Application Discovery Arsenalarsenal.amazonaws.com
AWS Artifactartifact.amazonaws.com
AWS Cost Explorerassets.marketplace.amazonaws.com
Amazon Athenaathena.amazonaws.com
AWS Audit Managerauditmanager.amazonaws.comDocumentation
Automationautomation.amazonaws.com
AWS Auto Scalingautoscaling-plans.amazonaws.comDocumentation
Amazon EC2 Auto Scalingautoscaling.amazonaws.comDocumentation
Aws Artifact Account Syncaws-artifact-account-sync.amazonaws.com
AWS Marketplace Management Portalaws-marketplace-management.amazonaws.com
AWS Cost Exploreraws-marketplace.amazonaws.com
AWS MCP Serveraws-mcp.amazonaws.com
AWS Billing Consoleaws-portal.amazonaws.com
AWS Connector Serviceawsconnector.amazonaws.com
Amazon S3awspolicygen.s3.amazonaws.com
AWS B2B Data Interchangeb2bi.amazonaws.com
AWS Backup Gatewaybackup-gateway.amazonaws.com
AWS Backup Searchbackup-search.amazonaws.com
AWS Backup storagebackup-storage.amazonaws.com
AWS Backupbackup.amazonaws.com
AWS Batchbatch.amazonaws.com
Amazon S3batchoperations.s3.amazonaws.com
AWS Billing and Cost Management Dashboardsbcm-dashboards.amazonaws.com
AWS Billing And Cost Management Data Exportsbcm-data-exports.amazonaws.com
AWS Billing And Cost Management Pricing Calculatorbcm-pricing-calculator.amazonaws.com
AWS Billing And Cost Management Recommended Actionsbcm-recommended-actions.amazonaws.com
Amazon Bedrock Agentcorebedrock-agentcore.amazonaws.com
Amazon Bedrock Powered by AWS Mantlebedrock-mantle.amazonaws.com
Amazon Bedrockbedrock.amazonaws.com
AWS Billingbilling.amazonaws.com
AWS Billing Conductorbillingconductor.amazonaws.com
AWS Billing Consolebillingconsole.amazonaws.com
Amazon Braketbraket.amazonaws.com
AWS Budget Servicebudgets.amazonaws.com
AWS BugBustbugbust.amazonaws.com
AWS App Runnerbuild.apprunner.amazonaws.com
Amazon OpenSearch Servicecases.amazonaws.com
Amazon Keyspaces (for Apache Cassandra)cassandra.amazonaws.com
Application Auto Scalingcassandra.application-autoscaling.amazonaws.com
AWS Cost Explorer Servicece.amazonaws.com
Amazon Lexchannels.lex.amazonaws.com
Amazon Lexchannels.lexv2.amazonaws.com
AWS Chatbotchatbot.amazonaws.com
Amazon Chimechime.amazonaws.com
AWS Clean Rooms MLcleanrooms-ml.amazonaws.com
AWS Clean Roomscleanrooms.amazonaws.com
AWS Cloud9cloud9.amazonaws.comDocumentation
Amazon Cloud Directoryclouddirectory.amazonaws.com
AWS Cloud Control APIcloudformation.amazonaws.com
Amazon CloudFront KeyValueStorecloudfront-keyvaluestore.amazonaws.com
Amazon CloudFrontcloudfront.amazonaws.com
AWS CloudHSMcloudhsm.amazonaws.comDocumentation
Amazon CloudSearchcloudsearch.amazonaws.com
AWS CloudShellcloudshell.amazonaws.com
AWS CloudTrail Datacloudtrail-data.amazonaws.com
AWS CloudTrailcloudtrail.amazonaws.com
AWS Account Managementcloudwatch-crossaccount.amazonaws.com
Amazon CloudWatchcloudwatch.amazonaws.com
AWS CodeArtifactcodeartifact.amazonaws.com
AWS CodeBuildcodebuild.amazonaws.com
Codecatalyst Runnercodecatalyst-runner.amazonaws.com
Amazon CodeCatalystcodecatalyst.amazonaws.comDocumentation
AWS CodeCommitcodecommit.amazonaws.com
AWS CodeConnectionscodeconnections.amazonaws.com
AWS CodeDeploy secure host commands servicecodedeploy-commands-secure.amazonaws.com
AWS CodeDeploycodedeploy.amazonaws.com
Amazon CodeGuru Profilercodeguru-profiler.amazonaws.comDocumentation
Amazon CodeGuru Reviewercodeguru-reviewer.amazonaws.com
Amazon CodeGuru Securitycodeguru-security.amazonaws.com
Amazon CodeGurucodeguru.amazonaws.com
AWS CodePipelinecodepipeline.amazonaws.com
AWS CodeStar Connectionscodestar-connections.amazonaws.com
AWS CodeStar Notificationscodestar-notifications.amazonaws.comDocumentation
AWS CodeStarcodestar.amazonaws.com
Amazon CodeWhisperercodewhisperer.amazonaws.com
Cognito Identity Us Govcognito-identity-us-gov.amazonaws.com
Amazon Cognito Identitycognito-identity.amazonaws.com
Amazon Cognito User Poolscognito-idp.amazonaws.com
Amazon Cognito Synccognito-sync.amazonaws.com
Amazon Comprehendcomprehend.amazonaws.com
Amazon Comprehend Medicalcomprehendmedical.amazonaws.com
AWS Compute Optimizercompute-optimizer.amazonaws.comDocumentation
Config Conformsconfig-conforms.amazonaws.com
Config Multiaccountsetupconfig-multiaccountsetup.amazonaws.com
AWS Configconfig.amazonaws.comDocumentation
Amazon Connect Outbound Campaignsconnect-campaigns.amazonaws.com
Amazon Connectconnect.amazonaws.comDocumentation
AWS Console Mobile Appconsoleapp.amazonaws.com
AWS Consolidated Billingconsolidatedbilling.amazonaws.com
AWS Application Discovery Servicecontinuousexport.discovery.amazonaws.com
Contract Iqcontract.iq.amazonaws.com
Amazon DynamoDBcontributorinsights.dynamodb.amazonaws.com
AWS Control Catalogcontrolcatalog.amazonaws.com
AWS Control Towercontroltower.amazonaws.com
AWS Cost Optimization Hubcost-optimization-hub.amazonaws.com
Cost Optimization Hub Bcmcost-optimization-hub.bcm.amazonaws.com
AWS Cost Anomaly Detectioncostalerts.amazonaws.com
AWS IoT Corecredentials.iot.amazonaws.com
AWS Cost and Usage Reportcur.amazonaws.com
Application Auto Scalingcustom-resource.application-autoscaling.amazonaws.com
Amazon RDScustom.rds-preview.amazonaws.com
AWS Directory Servicecustom.rds.amazonaws.com
AWS Customer Verification Servicecustomer-verification.amazonaws.com
AWS Glue DataBrewdatabrew.amazonaws.com
AWS Data Exchangedataexchange.amazonaws.com
AWS Data Pipelinedatapipeline.amazonaws.com
AWS DataSyncdatasync.amazonaws.com
Amazon DataZonedatazone.amazonaws.com
Datazonecontroldatazonecontrol.amazonaws.com
Amazon DynamoDB Accelerator (DAX)dax.amazonaws.comDocumentation
Database Query Metadata Servicedbqms.amazonaws.com
AWS Deadline Clouddeadline.amazonaws.com
Deepcomposerdeepcomposer.amazonaws.com
AWS DeepLensdeeplens.amazonaws.com
AWS DeepRacerdeepracer.amazonaws.com
CloudWatch Logs Deliverydelivery.logs.amazonaws.com
Amazon Detectivedetective.amazonaws.com
AWS Device Farmdevicefarm.amazonaws.com
Amazon DevOps Gurudevops-guru.amazonaws.comDocumentation
Diodediode.amazonaws.com
AWS Direct Connectdirectconnect.amazonaws.comDocumentation
AWS Application Discovery Servicediscovery.amazonaws.com
Amazon Data Lifecycle Managerdlm.amazonaws.com
AWS Database Migration Servicedms.amazonaws.com
Dms Region Namedms.region-name.amazonaws.com
AWS Migration Hubdmsintegration.migrationhub.amazonaws.com
Amazon DocumentDB Elastic Clustersdocdb-elastic.amazonaws.comDocumentation
AWS Elastic Disaster Recoverydrs.amazonaws.comDocumentation
AWS Directory Service Datads-data.amazonaws.com
AWS Directory Serviceds.amazonaws.comDocumentation
Amazon Aurora DSQLdsql.amazonaws.com
Amazon DynamoDBdynamodb.amazonaws.com
Application Auto Scalingdynamodb.application-autoscaling.amazonaws.com
Amazon Elastic Block Storeebs.amazonaws.com
Ecec.amazonaws.com
Amazon EC2 Instance Connectec2-instance-connect.amazonaws.comDocumentation
Amazon EC2ec2.amazonaws.com
Application Auto Scalingec2.application-autoscaling.amazonaws.comDocumentation
Ec2fastlaunchec2fastlaunch.amazonaws.com
Amazon EC2 Fleetec2fleet.amazonaws.com
Amazon Message Delivery Serviceec2messages.amazonaws.com
Amazon EC2 Scheduled Instancesec2scheduled.amazonaws.com
Amazon Elastic Container Registry Publicecr-public.amazonaws.com
Amazon Elastic Container Registryecr.amazonaws.com
Amazon ECS Tasksecs-tasks.amazonaws.com
Amazon Elastic Container Serviceecs.amazonaws.com
Application Auto Scalingecs.application-autoscaling.amazonaws.com
AWS Lambdaedgelambda.amazonaws.com
Amazon EKS Autheks-auth.amazonaws.com
Eks Connectoreks-connector.amazonaws.com
Amazon EKS Fargate Podseks-fargate-pods.amazonaws.com
Amazon EKS Fargateeks-fargate.amazonaws.com
Amazon EKS MCP Servereks-mcp.amazonaws.com
Amazon EKS Node Groupseks-nodegroup.amazonaws.com
Amazon Elastic Kubernetes Serviceeks.amazonaws.com
AWS Cost Explorerelastic-inference.amazonaws.com
Elasticache Snapshotelasticache-snapshot.amazonaws.com
Amazon ElastiCacheelasticache.amazonaws.comDocumentation
AWS Elastic Beanstalkelasticbeanstalk.amazonaws.com
Amazon Elastic File System (Amazon EFS)elasticfilesystem.amazonaws.comDocumentation
AWS Elastic Load Balancing V2elasticloadbalancing.amazonaws.comDocumentation
Amazon Elastic MapReduceelasticmapreduce.amazonaws.com
Amazon Elastic Transcoderelastictranscoder.amazonaws.com
AWS Elemental Appliances and Software Activation Serviceelemental-activations.amazonaws.com
AWS Elemental Appliances and Softwareelemental-appliances-software.amazonaws.com
AWS Elemental Support Caseselemental-support-cases.amazonaws.com
AWS Elemental Support Contentelemental-support-content.amazonaws.com
Amazon Cognito user poolsemail.cognito-idp.amazonaws.comDocumentation
Amazon EMR on EKS (EMR Containers)emr-containers.amazonaws.comDocumentation
Amazon EMR Serverlessemr-serverless.amazonaws.com
AWS Entity Resolutionentityresolution.amazonaws.com
Amazon OpenSearch Servicees.amazonaws.com
AWS Healthevent-processor.health.amazonaws.com
Amazon EventBridgeevents.amazonaws.com
Amazon OpenSearch Serviceevents.managedservices.amazonaws.com
Amazon WorkMailevents.workmail.amazonaws.comDocumentation
Amazon CloudWatch Evidentlyevidently.amazonaws.com
Amazon Elastic VMware Serviceevs.amazonaws.comDocumentation
Amazon API Gatewayexecute-api.amazonaws.com
Fargatefargate.amazonaws.com
Amazon FinSpace APIfinspace-api.amazonaws.com
AWS Cost Explorerfinspace.amazonaws.comDocumentation
Amazon Kinesis Data Firehosefirehose.amazonaws.com
AWS Fault Injection Simulatorfis.amazonaws.comDocumentation
AWS Firewall Managerfms.amazonaws.com
Amazon Forecastforecast.amazonaws.com
Amazon Fraud Detectorfrauddetector.amazonaws.com
Amazon FreeRTOSfreertos.amazonaws.com
AWS Free Tierfreetier.amazonaws.com
Amazon FSxfsx.amazonaws.com
Galaxygalaxy.amazonaws.com
Amazon GameLift Serversgamelift.amazonaws.com
Amazon GameLift Streamsgameliftstreams.amazonaws.com
Amazon Location Service Mapsgeo-maps.amazonaws.com
Amazon Location Service Placesgeo-places.amazonaws.com
Amazon Location Service Routesgeo-routes.amazonaws.com
Amazon Locationgeo.amazonaws.com
Amazon S3github-cloud.s3.amazonaws.com
Amazon S3 Glacierglacier.amazonaws.com
AWS Global Acceleratorglobalaccelerator.amazonaws.comDocumentation
AWS Glueglue.amazonaws.com
Amazon Managed Grafanagrafana.amazonaws.comDocumentation
AWS IoT Greengrassgreengrass.amazonaws.com
AWS Ground Stationgroundstation.amazonaws.comDocumentation
Amazon GroundTruth Labelinggroundtruthlabeling.amazonaws.com
Amazon GuardDutyguardduty.amazonaws.com
AWS Health APIs and Notificationshealth.amazonaws.com
AWS HealthLakehealthlake.amazonaws.com
Amazon Honeycodehoneycode.amazonaws.com
AWS CloudFormationhooks.cloudformation.amazonaws.com
AWS Identity and Access Management (IAM)iam.amazonaws.com
AWS Identity Syncidentity-sync.amazonaws.com
AWS Identity Store Authidentitystore-auth.amazonaws.com
AWS IAM Identity Centeridentitystore.amazonaws.com
Amazon EC2 Image Builderimagebuilder.amazonaws.comDocumentation
AWS Import Export Disk Serviceimportexport.amazonaws.com
Amazon InspectorScaninspector-scan.amazonaws.com
Amazon Inspector Classicinspector.amazonaws.comDocumentation
Amazon Inspector2inspector2.amazonaws.com
Amazon CloudWatch Internet Monitorinternetmonitor.amazonaws.com
AWS Invoicing Serviceinvoicing.amazonaws.com
AWS IoT Device Testeriot-device-tester.amazonaws.com
AWS IoT Coreiot.amazonaws.com
Iot1clickiot1click.amazonaws.com
AWS IoT Analyticsiotanalytics.amazonaws.com
AWS IoT Core Device Advisoriotdeviceadvisor.amazonaws.com
AWS IoT Eventsiotevents.amazonaws.com
AWS IoT Fleet Hub for Device Managementiotfleethub.amazonaws.com
AWS IoT FleetWiseiotfleetwise.amazonaws.com
AWS IoT Jobs DataPlaneiotjobsdata.amazonaws.com
AWS IoT Managed Integrations Serviceiotmanagedintegrations.amazonaws.comDocumentation
Iotroborunneriotroborunner.amazonaws.com
AWS IoT SiteWiseiotsitewise.amazonaws.com
AWS IoT Things Graphiotthingsgraph.amazonaws.com
AWS IoT TwinMakeriottwinmaker.amazonaws.comDocumentation
AWS IoT Wirelessiotwireless.amazonaws.com
AWS IQ Permissionsiq-permission.amazonaws.com
AWS IQiq.amazonaws.com
Amazon Interactive Video Serviceivs.amazonaws.comDocumentation
Amazon Interactive Video Service Chativschat.amazonaws.com
Jellyfishjellyfish.amazonaws.com
Apache Kafka APIs for Amazon MSK clusterskafka-cluster.amazonaws.com
Amazon Managed Streaming for Apache Kafkakafka.amazonaws.com
Amazon Managed Streaming for Kafka Connectkafkaconnect.amazonaws.comDocumentation
Amazon Kendra Intelligent Rankingkendra-ranking.amazonaws.com
Amazon Kendrakendra.amazonaws.com
Amazon Kinesis Data Streamskinesis.amazonaws.com
Amazon Kinesis Data Analyticskinesisanalytics.amazonaws.com
Amazon DynamoDBkinesisreplication.dynamodb.amazonaws.com
Amazon Kinesis Video Streamskinesisvideo.amazonaws.com
AWS Key Management Servicekms.amazonaws.com
AWS Lake Formationlakeformation.amazonaws.comDocumentation
Amazon CloudWatchlambda.alarms.cloudwatch.amazonaws.com
AWS Lambdalambda.amazonaws.com
AWS Launch Wizardlaunchwizard.amazonaws.com
Amazon Lexlex.amazonaws.comDocumentation
Amazon Lex V2lexv2.amazonaws.comDocumentation
AWS Cost Explorerlicense-management.marketplace.amazonaws.com
AWS License Manager Linux Subscriptions Managerlicense-manager-linux-subscriptions.amazonaws.com
AWS License Manager User Subscriptionslicense-manager-user-subscriptions.amazonaws.comDocumentation
AWS License Managerlicense-manager.amazonaws.com
AWS Account Managementlicense-manager.member-account.amazonaws.com
Amazon Lightsaillightsail.amazonaws.com
CloudFront Logginglogger.cloudfront.amazonaws.com
Amazon S3 Server Access Logginglogging.s3.amazonaws.com
Amazon CloudWatch Logslogs.amazonaws.comDocumentation
Amazon Lookout for Equipmentlookoutequipment.amazonaws.com
Amazon Lookout for Metricslookoutmetrics.amazonaws.com
Amazon Lookout for Visionlookoutvision.amazonaws.com
AWS Mainframe Modernization Servicem2.amazonaws.comDocumentation
Amazon Machine Learningmachinelearning.amazonaws.com
Amazon Maciemacie.amazonaws.comDocumentation
Amazon Maciemacie2.amazonaws.com
AWS Elastic Beanstalkmaintenance.elasticbeanstalk.amazonaws.com
Amazon GuardDutymalware-protection-plan.guardduty.amazonaws.com
Amazon GuardDutymalware-protection.guardduty.amazonaws.com
Amazon Managed Blockchain Querymanagedblockchain-query.amazonaws.com
Amazon Managed Blockchainmanagedblockchain.amazonaws.com
Amazon OpenSearch Servicemanagedservices.amazonaws.com
AWS Elastic Beanstalkmanagedupdates.elasticbeanstalk.amazonaws.com
AWS Migration Acceleration Program Creditsmapcredits.amazonaws.com
AWS Marketplace Commerce Analytics Servicemarketplacecommerceanalytics.amazonaws.com
Amazon Mechanical Turkmechanicalturk.amazonaws.com
AWS Elemental MediaConnectmediaconnect.amazonaws.com
AWS Elemental MediaConvertmediaconvert.amazonaws.com
AmazonMediaImportmediaimport.amazonaws.com
AWS Elemental MediaLivemedialive.amazonaws.com
AWS Elemental MediaPackage VODmediapackage-vod.amazonaws.com
AWS Elemental MediaPackagemediapackage.amazonaws.com
AWS Elemental MediaPackage V2mediapackagev2.amazonaws.com
AWS Elemental MediaStoremediastore.amazonaws.com
AWS Elemental MediaTailormediatailor.amazonaws.com
AWS HealthImagingmedical-imaging.amazonaws.com
Amazon Chimemeetings.chime.amazonaws.com
AWS CloudFormationmember.org.stacksets.cloudformation.amazonaws.com
Amazon MemoryDBmemorydb.amazonaws.comDocumentation
AWS Cost Explorermetering-marketplace.amazonaws.com
AWS Migration Hubmgh.amazonaws.com
AWS Application Migration Servicemgn.amazonaws.comDocumentation
AWS Migration Hub Orchestratormigrationhub-orchestrator.amazonaws.comDocumentation
AWS Migration Hub Strategy Recommendationsmigrationhub-strategy.amazonaws.comDocumentation
AWS Migration Hubmigrationhub.amazonaws.com
Amazon Mobile Analyticsmobileanalytics.amazonaws.com
AWS Mobile Hubmobilehub.amazonaws.com
Amazon Pinpointmobiletargeting.amazonaws.com
Amazon CloudWatchmonitoring.amazonaws.com
RDS Enhanced Monitoringmonitoring.rds.amazonaws.com
Amazon Monitronmonitron.amazonaws.com
Multi-party approvalmpa.amazonaws.com
Amazon MQmq.amazonaws.comDocumentation
Amazon Neptuneneptune-db.amazonaws.com
Amazon Neptune Analyticsneptune-graph.amazonaws.com
AWS Network Firewallnetwork-firewall.amazonaws.comDocumentation
AWS Shield network security directornetwork-security-director.amazonaws.com
Network Flow Monitornetworkflowmonitor.amazonaws.com
AWS Network Manager Chatnetworkmanager-chat.amazonaws.com
AWS Network Managernetworkmanager.amazonaws.comDocumentation
Amazon CloudWatch Network Synthetic Monitornetworkmonitor.amazonaws.com
Amazon Nimble Studionimble.amazonaws.com
AWS User Notifications Contactsnotifications-contacts.amazonaws.com
AWS User Notificationsnotifications.amazonaws.com
Amazon Nova Actnova-act.amazonaws.com
Amazon CloudWatch Observability Access Manageroam.amazonaws.com
Amazon OpenSearch Serverlessobservability.aoss.amazonaws.comDocumentation
Amazon CloudWatch Observability Admin Serviceobservabilityadmin.amazonaws.com
AWS Service - Oracle Database@AWSodb.amazonaws.com
AWS HealthOmicsomics.amazonaws.com
Amazon One Enterpriseone.amazonaws.com
Amazon OpenSearchopensearch.amazonaws.com
AWS Cost Exploreropensearchservice.amazonaws.com
Amazon API Gatewayops.apigateway.amazonaws.comDocumentation
Amazon EMR Serverlessops.emr-serverless.amazonaws.comDocumentation
AWS Systems Manageropsdatasync.ssm.amazonaws.com
AWS OpsWorks Configuration Managementopsworks-cm.amazonaws.com
AWS OpsWorksopsworks.amazonaws.com
AWS Organizationsorganizations.amazonaws.com
AWS Service Catalogorgsdatasync.servicecatalog.amazonaws.com
Amazon OpenSearch Ingestionosis.amazonaws.com
AWS Outpostsoutposts.amazonaws.comDocumentation
AWS Panoramapanorama.amazonaws.comDocumentation
AWS Partner central account managementpartnercentral-account-management.amazonaws.com
AWS Partner Centralpartnercentral.amazonaws.com
AWS Payment Cryptographypayment-cryptography.amazonaws.com
AWS Paymentspayments.amazonaws.com
AWS Private CA Connector for Active Directorypca-connector-ad.amazonaws.com
AWS Private CA Connector for SCEPpca-connector-scep.amazonaws.com
AWS Parallel Computing Servicepcs.amazonaws.comDocumentation
AWS IQpermission.iq.amazonaws.comDocumentation
Amazon Personalizepersonalize.amazonaws.com
AWS Performance Insightspi.amazonaws.com
Amazon Pinpointpinpoint.amazonaws.com
Amazon OpenSearch Servicepipes.amazonaws.com
Amazon Pollypolly.amazonaws.com
Amazon Route 53 Recovery Readinesspractice-run.arc-zonal-shift.amazonaws.comDocumentation
AWS Price Listpricing.amazonaws.com
AWS PricingPlanManager Servicepricingplanmanager.amazonaws.com
AWS service providing managed private networksprivate-networks.amazonaws.com
Amazon Connect Customer Profilesprofile.amazonaws.comDocumentation
AWS Protonproton.amazonaws.com
Amazon ECRpullthroughcache.ecr.amazonaws.com
AWS Purchase Orders Consolepurchase-orders.amazonaws.com
Purchaseorderspurchaseorders.amazonaws.com
Amazon Qq.amazonaws.com
Amazon Q Business Q Appsqapps.amazonaws.comDocumentation
Amazon Q Businessqbusiness.amazonaws.comDocumentation
Amazon Q Developerqdeveloper.amazonaws.com
Amazon QLDBqldb.amazonaws.com
Amazon QuickSightquicksight.amazonaws.com
AWS Resource Access Manager (AWS RAM)ram.amazonaws.comDocumentation
AWS Recycle Binrbin.amazonaws.com
Amazon RDS Data APIrds-data.amazonaws.com
Amazon RDS IAM Authenticationrds-db.amazonaws.com
Rds Previewrds-preview.amazonaws.com
Amazon Relational Database Service (Amazon RDS) ( Info )rds.amazonaws.comDocumentation
Application Auto Scalingrds.application-autoscaling.amazonaws.com
Reachabilityanalyzer Networkinsightsreachabilityanalyzer.networkinsights.amazonaws.com
Amazon Redshift Data APIredshift-data.amazonaws.com
Amazon Redshift Serverlessredshift-serverless.amazonaws.com
Amazon Redshiftredshift.amazonaws.comDocumentation
AWS Migration Hub Refactor Spacesrefactor-spaces.amazonaws.comDocumentation
Amazon ElastiCacheregion.elasticache-snapshot.amazonaws.com
Amazon Rekognitionrekognition.amazonaws.com
AWS Configremediation.config.amazonaws.com
Amazon Keyspacesreplication.cassandra.amazonaws.com
DynamoDB Global Tablesreplication.dynamodb.amazonaws.com
Amazon ECRreplication.ecr.amazonaws.com
Amazon Lexreplication.lexv2.amazonaws.com
Lambda Replicatorreplicator.lambda.amazonaws.com
AWS Trusted Advisorreporting.trustedadvisor.amazonaws.com
AWS CodeStar Connectionsrepository.sync.codeconnections.amazonaws.comDocumentation
AWS re:Post Privaterepostspace.amazonaws.comDocumentation
AWS Resilience Hubresiliencehub.amazonaws.com
AWS Resource Explorerresource-explorer-2.amazonaws.comDocumentation
Resource Explorerresource-explorer.amazonaws.com
AWS Resource Groupsresource-groups.amazonaws.com
AWS CloudFormationresource.cloudformation.amazonaws.com
AWS Resource Groupsresourcegroups.amazonaws.comDocumentation
AWS CloudFormationresources.cloudformation.amazonaws.com
AWS Backuprestore-testing.backup.amazonaws.com
Amazon RHEL Knowledgebase Portalrhelkb.amazonaws.com
AWS RoboMakerrobomaker.amazonaws.com
AWS Identity and Access Management Roles Anywhererolesanywhere.amazonaws.comDocumentation
Amazon Route 53 Recovery Clusterroute53-recovery-cluster.amazonaws.com
Amazon Route 53 Recovery Controlsroute53-recovery-control-config.amazonaws.com
Amazon Route 53 Recovery Readinessroute53-recovery-readiness.amazonaws.com
Amazon Route 53route53.amazonaws.com
Amazon Route 53 Domainsroute53domains.amazonaws.com
AWS Route53 Global Resolverroute53globalresolver.amazonaws.com
Amazon OpenSearch Serviceroute53profiles.amazonaws.com
Amazon Route 53 Resolverroute53resolver.amazonaws.com
AWS RTB Fabricrtbfabric.amazonaws.comDocumentation
AWS CloudWatch RUMrum.amazonaws.com
Amazon S3 Object Lambdas3-object-lambda.amazonaws.com
Amazon Simple Storage Service (Amazon S3) on AWS Outpostss3-outposts.amazonaws.comDocumentation
Amazon S3s3.amazonaws.com
Amazon FSxs3.data-source.lustre.fsx.amazonaws.com
Amazon S3 Expresss3express.amazonaws.com
Amazon S3 Tabless3tables.amazonaws.com
Amazon S3 Vectorss3vectors.amazonaws.com
Amazon SageMaker data science assistantsagemaker-data-science-assistant.amazonaws.com
Amazon SageMaker geospatial capabilitiessagemaker-geospatial.amazonaws.com
Sagemaker Groundtruth Syntheticsagemaker-groundtruth-synthetic.amazonaws.com
Amazon SageMaker with MLflowsagemaker-mlflow.amazonaws.com
Amazon SageMaker Unified Studio MCPsagemaker-unified-studio-mcp.amazonaws.com
Amazon SageMakersagemaker.amazonaws.com
Application Auto Scalingsagemaker.application-autoscaling.amazonaws.com
AWS Savings Planssavingsplans.amazonaws.com
Amazon EventBridge Schedulerscheduler.amazonaws.com
Amazon EventBridge Schema Registryschemas.amazonaws.com
AWS Supply Chainscn.amazonaws.com
Scraper Apsscraper.aps.amazonaws.com
Amazon SimpleDBsdb.amazonaws.com
AWS Secrets Managersecretsmanager.amazonaws.com
AWS Security Incident Responsesecurity-ir.amazonaws.com
AWS Security Agentsecurityagent.amazonaws.com
AWS Security Hub CSPMsecurityhub.amazonaws.comDocumentation
Amazon Security Lakesecuritylake.amazonaws.com
AWS Serverless Application Repositoryserverlessrepo.amazonaws.com
AWS Service Catalog AppRegistryservicecatalog-appregistry.amazonaws.com
AWS Service Catalogservicecatalog.amazonaws.com
AWS Cloud Mapservicediscovery.amazonaws.com
AWS Microservice Extractor for .NETserviceextract.amazonaws.com
Service Quotasservicequotas.amazonaws.com
Amazon Simple Email Service (Amazon SES) v2ses.amazonaws.comDocumentation
AWS Shieldshield.amazonaws.comDocumentation
AWS Signersigner.amazonaws.com
AWS Sign-Insignin.amazonaws.com
AWS SimSpace Weaversimspaceweaver.amazonaws.com
AWS End User Messaging SMS and Voice V2sms-voice.amazonaws.comDocumentation
AWS Server Migration Servicesms.amazonaws.com
AWS Migration Hubsmsintegration.migrationhub.amazonaws.com
AWS Snow Device Managementsnow-device-management.amazonaws.com
AWS Snowballsnowball.amazonaws.com
Amazon SNSsns.amazonaws.com
AWS End User Messaging Socialsocial-messaging.amazonaws.comDocumentation
Spotspot.amazonaws.com
Amazon EC2 Spot Fleetspotfleet.amazonaws.com
AWS SQL Workbenchsqlworkbench.amazonaws.com
Amazon SQSsqs.amazonaws.com
AWS Systems Manager Incident Manager Contactsssm-contacts.amazonaws.com
AWS Systems Manager GUI Connectssm-guiconnect.amazonaws.com
AWS Systems Manager Incident Managerssm-incidents.amazonaws.comDocumentation
AWS Systems Manager Quick Setupssm-quicksetup.amazonaws.com
AWS Systems Manager for SAPssm-sap.amazonaws.com
AWS Systems Managerssm.amazonaws.com
Amazon Message Gateway Servicessmmessages.amazonaws.com
AWS IAM Identity Center directorysso-directory.amazonaws.com
AWS IAM Identity Center OIDC servicesso-oauth.amazonaws.com
AWS IAM Identity Centersso.amazonaws.comDocumentation
AWS CloudFormationstacksets.cloudformation.amazonaws.com
AWS Step Functionsstates.amazonaws.com
Amazon S3storage-lens.s3.amazonaws.com
AWS Storage Gatewaystoragegateway.amazonaws.com
Amazon CloudWatchstreams.metrics.cloudwatch.amazonaws.com
AWS Security Token Servicests.amazonaws.com
AWS Support Consolesupport-console.amazonaws.com
AWS Supportsupport.amazonaws.comDocumentation
AWS Support App in Slacksupportapp.amazonaws.com
AWS Support Planssupportplans.amazonaws.com
Supportrecommendationssupportrecommendations.amazonaws.com
AWS Sustainabilitysustainability.amazonaws.com
Amazon Simple Workflow Serviceswf.amazonaws.com
AWS Protonsync.proton.amazonaws.com
Amazon CloudWatch Syntheticssynthetics.amazonaws.com
Amazon Resource Group Tagging APItag.amazonaws.com
AWS Resource Groups Taggingtagging.amazonaws.com
Tagpolicies Tagtagpolicies.tag.amazonaws.com
AWS App Runnertasks.apprunner.amazonaws.com
AWS Tax Settingstax.amazonaws.com
Amazon Textracttextract.amazonaws.com
Amazon WorkSpaces Thin Clientthinclient.amazonaws.com
Amazon Timestream InfluxDBtimestream-influxdb.amazonaws.com
Amazon Timestreamtimestream.amazonaws.com
Amazon Timestream Influxdbtimestreamforinfluxdb.amazonaws.comDocumentation
AWS Tirostiros.amazonaws.com
AWS Telco Network Buildertnb.amazonaws.com
Amazon Transcribetranscribe.amazonaws.com
AWS Transfer Familytransfer.amazonaws.com
AWS Transform customtransform-custom.amazonaws.com
AWS Transformtransform.amazonaws.com
AWS Transit Gatewaytransitgateway.amazonaws.com
Amazon Translatetranslate.amazonaws.com
AWS Security Incident Responsetriage.security-ir.amazonaws.comDocumentation
AWS Trusted Advisortrustedadvisor.amazonaws.comDocumentation
AWS Diagnostic toolsts.amazonaws.com
Ttstts.amazonaws.com
AWS User Subscriptionsuser-subscriptions.amazonaws.com
AWS Service for managing AWS Console user experience capabilities.uxc.amazonaws.com
AWS Marketplace Vendor Insightsvendor-insights.amazonaws.com
AWS Verified Accessverified-access.amazonaws.com
Amazon Verified Permissionsverifiedpermissions.amazonaws.com
Vmievmie.amazonaws.com
Amazon Connect Voice IDvoiceid.amazonaws.com
VPC Flow Logsvpc-flow-logs.amazonaws.com
Amazon VPC Lattice Servicesvpc-lattice-svcs.amazonaws.com
Amazon VPC Latticevpc-lattice.amazonaws.comDocumentation
AWS PrivateLinkvpce.amazonaws.com
Amazon CloudFrontvpcorigin.cloudfront.amazonaws.comDocumentation
AWS WAF Regionalwaf-regional.amazonaws.com
AWS WAF Regionalwaf.amazonaws.comDocumentation
AWS WAF V2wafv2.amazonaws.comDocumentation
Amazon WorkSpaces Application Managerwam.amazonaws.com
AWS Well-Architected Toolwellarchitected.amazonaws.com
AWS Wickrwickr.amazonaws.com
Amazon Q in Connectwisdom.amazonaws.com
Amazon WorkDocsworkdocs.amazonaws.com
Amazon WorkLinkworklink.amazonaws.com
Amazon WorkMailworkmail.amazonaws.com
Amazon WorkMail Message Flowworkmailmessageflow.amazonaws.com
AWS WorkSpaces Managed Instancesworkspaces-instances.amazonaws.com
Amazon WorkSpaces Secure Browserworkspaces-web.amazonaws.com
Amazon WorkSpacesworkspaces.amazonaws.com
AWS X-Rayxray.amazonaws.com

Note: The data is automatically fetched from the official AWS Policy Generator and parsed into this markdown table using a custom Node.js script. The table is regularly updated to include the latest AWS services.

How to Use This Service Principal List

Now that you have the complete reference, let's explore the three main contexts where you'll use service principals: trust policies, resource-based policies, and service-linked roles.

Trust Policies for IAM Roles

Trust policies define which principals can assume an IAM role. For service roles, you specify the AWS service principal that should be able to assume the role. This is the most common use case.

Here's a basic trust policy structure:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

This trust policy allows AWS Lambda to assume the role. When Lambda needs to execute your function, it presents its service principal and calls sts:AssumeRole. IAM validates the trust policy and issues temporary credentials.

For Lambda execution roles specifically, the role also needs a permissions policy granting access to CloudWatch Logs:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}

You can learn how to assign custom IAM roles to Lambda functions using AWS CDK for more advanced configurations.

Resource-Based Policies

Service principals also appear in resource-based policies attached to AWS resources like S3 buckets, SNS topics, or SQS queues. These policies allow AWS services to access your resources directly.

Here's an example S3 bucket policy that allows CloudTrail to write logs:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudTrailAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::my-cloudtrail-bucket",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    },
    {
      "Sid": "CloudTrailWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-cloudtrail-bucket/AWSLogs/111122223333/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    }
  ]
}

Notice the aws:SourceAccount condition. This is critical for security, and we'll cover why in the confused deputy protection section below.

Service-Linked Roles

Service-linked roles are a special type of service role that's predefined by an AWS service. These roles include all the permissions the service needs to operate, and only that specific service can assume them.

Key characteristics of service-linked roles:

  • Predefined by AWS: You cannot modify the permissions
  • Automatic creation: Many services create them automatically when you first use the service
  • Cannot be deleted until resources are removed: Ensures the service can continue operating
  • Named with a specific pattern: Usually AWSServiceRoleFor<ServiceName>

Here's an example of common service-linked roles:

ServiceService-Linked Role NameService Principal
Amazon RDSAWSServiceRoleForRDSrds.amazonaws.com
AWS LambdaAWSServiceRoleForLambdalambda.amazonaws.com
Amazon API GatewayAWSServiceRoleForAPIGatewayops.apigateway.amazonaws.com
AWS Systems ManagerAWSServiceRoleForAmazonSSMssm.amazonaws.com
AWS ConfigAWSServiceRoleForConfigconfig.amazonaws.com

For container workloads, understanding roles is especially important. Check out my guide on ECS task role vs execution role to understand how ECS uses different service principals for different purposes.

Regionalized Service Principals: Opt-In Regions Guide

Most service principals work globally across all AWS regions. However, when you're working with opt-in regions (regions launched after March 2019), service principal behavior changes for cross-region requests.

Understanding this distinction is essential when building multi-region architectures or when your resources span both standard and opt-in regions.

When to Use Regionalized Format

AWS regions launched after March 20, 2019 are called opt-in regions. These include:

Region NameRegion Code
Africa (Cape Town)af-south-1
Asia Pacific (Hong Kong)ap-east-1
Asia Pacific (Hyderabad)ap-south-2
Asia Pacific (Jakarta)ap-southeast-3
Asia Pacific (Melbourne)ap-southeast-4
Europe (Milan)eu-south-1
Europe (Spain)eu-south-2
Europe (Zurich)eu-central-2
Israel (Tel Aviv)il-central-1
Middle East (Bahrain)me-south-1
Middle East (UAE)me-central-1

The key rule is:

  • Same-region requests: Use the standard format service-name.amazonaws.com
  • Cross-region requests from opt-in regions: Use the regionalized format service-name.{region}.amazonaws.com

For IAM role trust policies, AWS recommends always using the non-regionalized format because IAM is a global service.

Cross-Region Service Principal Examples

Let's say you have an S3 bucket in the opt-in region ap-east-1 (Hong Kong) and want to send bucket notifications to an SNS topic in ap-southeast-1 (Singapore).

Incorrect approach (will fail):

{
  "Principal": {
    "Service": "s3.amazonaws.com"
  }
}

Correct approach (will succeed):

{
  "Principal": {
    "Service": "s3.ap-east-1.amazonaws.com"
  }
}

Since the bucket is in an opt-in region and makes a cross-region request, you must use the regionalized service principal name s3.ap-east-1.amazonaws.com.

Here's a complete SNS topic policy example for this scenario:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.ap-east-1.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:ap-southeast-1:111122223333:MyTopic",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::my-bucket-*"
        }
      }
    }
  ]
}

Confused Deputy Protection with Service Principals

The confused deputy problem is a critical security issue where an entity without permission can trick a more privileged entity (the "deputy") into performing actions on their behalf. When using service principals, this typically happens with cross-service access.

For example, without proper protection, an attacker could configure their own CloudTrail in a different account to write logs to your S3 bucket, if they know your bucket name and your bucket policy only checks the service principal.

This is why following AWS account security best practices includes implementing confused deputy protection in all resource-based policies.

Using aws:SourceAccount and aws:SourceArn

AWS provides condition keys to prevent confused deputy attacks. Here's when to use each:

Condition KeyPurposeUse Case
aws:SourceArnLimits access to a specific resourceMost effective - use the full ARN when possible
aws:SourceAccountLimits access to a specific AWS accountUse when SourceArn doesn't contain the account ID
aws:SourceOrgIDLimits access to your AWS OrganizationOrganization-wide protection
aws:SourceOrgPathsLimits access to specific OU pathsGranular organization control

Most effective approach - use aws:SourceArn with the full ARN:

{
  "Effect": "Allow",
  "Principal": {
    "Service": "appstream.amazonaws.com"
  },
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::my-bucket/script.ps1",
  "Condition": {
    "ArnEquals": {
      "aws:SourceArn": "arn:aws:appstream:us-east-1:111122223333:fleet/MyFleet"
    }
  }
}

If the ARN doesn't contain the account ID, use both aws:SourceArn and aws:SourceAccount:

{
  "Condition": {
    "StringEquals": {
      "aws:SourceAccount": "111122223333"
    },
    "ArnLike": {
      "aws:SourceArn": "arn:aws:s3:::my-bucket-*"
    }
  }
}

Organization-Wide Protection with RCPs

For organizations managing multiple AWS accounts, Resource Control Policies (RCPs) provide centralized enforcement of confused deputy protection. Instead of modifying individual resource policies, you can apply organization-wide controls.

Here's an RCP that denies AWS service principals access to S3 unless the request originates from within your organization:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnforceConfusedDeputyProtection",
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceOrgID": "o-abc123xyz"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}

This policy ensures that AWS service principals can only access S3 buckets when the request originates from your organization. For more on organization-level controls, see my guide on Service Control Policies and AWS Organizations best practices.

Service Principals in Infrastructure as Code

When defining IAM roles in infrastructure as code, you need to correctly specify service principals. Here are examples for both AWS CDK and CloudFormation.

AWS CDK Examples

AWS CDK provides the ServicePrincipal class for defining service principals in trust policies:

import * as iam from 'aws-cdk-lib/aws-iam';
import * as lambda from 'aws-cdk-lib/aws-lambda';

// Create a role for Lambda with a service principal
const lambdaRole = new iam.Role(this, 'LambdaExecutionRole', {
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
  description: 'Execution role for Lambda function',
});

// Add permissions to write to CloudWatch Logs
lambdaRole.addToPolicy(new iam.PolicyStatement({
  effect: iam.Effect.ALLOW,
  actions: [
    'logs:CreateLogGroup',
    'logs:CreateLogStream',
    'logs:PutLogEvents',
  ],
  resources: ['arn:aws:logs:*:*:*'],
}));

For roles that need multiple service principals, use CompositePrincipal:

const multiServiceRole = new iam.Role(this, 'MultiServiceRole', {
  assumedBy: new iam.CompositePrincipal(
    new iam.ServicePrincipal('ecs.amazonaws.com'),
    new iam.ServicePrincipal('elasticloadbalancing.amazonaws.com'),
  ),
});

Learn more about this pattern in my detailed guide on creating IAM roles with multiple principals using AWS CDK.

CloudFormation Trust Policy Templates

In CloudFormation, define service principals in the AssumeRolePolicyDocument:

AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation service role example

Resources:
  CloudFormationServiceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: CloudFormationServiceRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: cloudformation.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/PowerUserAccess
      Description: Service role for CloudFormation deployments

For cross-account deployments using cross-account assume role, you can combine service principals with account principals.

Troubleshooting Service Principal Errors

When working with service principals, you may encounter common errors. Here are the most frequent issues and how to resolve them:

"Invalid principal in policy"

  • Check that the service principal format is correct (service-name.amazonaws.com)
  • Verify you haven't used wildcards (*) in the Service element
  • Ensure the service principal exists (check the table above)

"Access Denied" when a service tries to assume a role

  • Verify the trust policy includes the correct service principal
  • Check that the sts:AssumeRole action is allowed
  • For opt-in regions, ensure you're using the correct format (regionalized vs non-regionalized)

Cross-region requests failing

  • If the source is in an opt-in region and the destination is in another region, use the regionalized format
  • Example: s3.ap-east-1.amazonaws.com instead of s3.amazonaws.com

Service-linked role cannot be deleted

  • Service-linked roles can only be deleted after removing all associated resources
  • Check for remaining resources in the service that created the role

Confused deputy protection blocking legitimate access

  • Verify your aws:SourceAccount or aws:SourceArn conditions match the actual source
  • For organization-wide RCPs, ensure the aws:SourceOrgID is correct

For CLI-based troubleshooting, you can assume IAM roles via CLI to test whether your trust policies are configured correctly.

VS Code Extension for Service Principal Autocomplete

If you prefer working directly in your IDE, I've created a VS Code extension that automatically generates IAM service principal snippets for you.

Instead of looking up this table every time, you can use the IAM Service Principal Snippets extension to autocomplete service principals directly in your IAM policies.

IAM Service Principal Snippets Demo