Documentation · Scoping a role

Where AWS honours the condition

Where the key is confirmed

AWS’s own Service Authorization Reference is a floor here, not a ceiling: it is authoritative about the services it explicitly names and silent about the rest, and AWS documents tag-based authorization for services this reference says nothing about, Lambda among them. 17 of 157 checked services explicitly name aws:ResourceTag on their tagging action - the confirmed count, not the working count.

ServiceIAM prefixActions naming itOf total
EC2ec2495793
ResilienceHubresiliencehub57128
SESses48228
AutoScalingautoscaling4268
ECSecs3781
Kinesiskinesis3140
CertificateManageracm2041
CleanRoomscleanrooms12107
ElastiCacheelasticache1177
CloudWatchcloudwatch767
SageMakersagemaker7444
WorkSpacesworkspaces7101
KafkaConnectkafkaconnect218
AuditManagerauditmanager162
Batchbatch145
CURcur112
SSMQuickSetupssm-quicksetup114

Services with no verdict

The reference states nothing either way for these - S3, IAM and RDS among them. Check them against AWS’s own IAM documentation and test the policy directly; this is not a list of services where scoping fails, only a list this particular reference doesn’t cover.

ServiceIAM prefixActions
Connectconnect378
Glueglue304
IoTiot293
Bedrockbedrock260
BedrockAgentCorebedrock-agentcore250
DataZonedatazone247
IAMiam190
S3s3180
CloudFrontcloudfront173
DocDBrds169
Redshiftredshift166
SSMssm162
Lightsaillightsail161
Logslogs132
SecurityHubsecurityhub129
SSOsso126
DMSdms125
MediaLivemedialive125
Backupbackup122
GameLiftgamelift120
ServiceCatalogservicecatalog117
Lambdalambda116
SMSVOICEsms-voice114
Configconfig102
StorageGatewaystoragegateway97
NetworkManagernetworkmanager95
QBusinessqbusiness93
GuardDutyguardduty91
CodeCommitcodecommit90
ODBodb90
AppStreamappstream89
EMRelasticmapreduce88
AppSyncappsync87
Comprehendcomprehend85
NetworkFirewallnetwork-firewall84
Athenaathena81
DynamoDBdynamodb79
ElasticLoadBalancingelasticloadbalancing77
IVSivs77
ImageBuilderimagebuilder77
Rekognitionrekognition76
VpcLatticevpc-lattice75
WorkSpacesWebworkspaces-web75
Route53route5371
Transfertransfer71
EKSeks69
Route53Resolverroute53resolver69
RedshiftServerlessredshift-serverless68
CodeBuildcodebuild67
CloudTrailcloudtrail66
DataSyncdatasync66
Kendrakendra66
ControlTowercontroltower65
DirectConnectdirectconnect64
Locationgeo64
Organizationsorganizations63
WAFv2wafv261
ECRecr60
Eventsevents60
CEce59
AppConfigappconfig58
FSxfsx56
GlobalAcceleratorglobalaccelerator56
KMSkms56
S3Tabless3tables53
CodeArtifactcodeartifact51
ElasticBeanstalkelasticbeanstalk50
OpenSearchServerlessaoss49
CodeDeploycodedeploy48
S3Outpostss3-outposts48
MemoryDBmemorydb47
PaymentCryptographypayment-cryptography46
ApiGatewayapigateway44
CodePipelinecodepipeline44
XRayxray43
AppRunnerapprunner42
FMSfms42
Amplifyamplify41
Notificationsnotifications41
SNSsns41
ObservabilityAdminobservabilityadmin40
SSMContactsssm-contacts40
Chatbotchatbot39
Shieldshield39
StepFunctionsstates39
CodeConnectionscodeconnections38
CodeStarConnectionscodestar-connections38
EFSelasticfilesystem38
Inspectorinspector37
M2m237
ResourceExplorer2resource-explorer-237
Detectivedetective36
AppIntegrationsapp-integrations35
RAMram35
KinesisAnalyticskinesisanalytics34
MediaPackageV2mediapackagev234
ServiceDiscoveryservicediscovery33
Billingbilling32
Route53RecoveryReadinessroute53-recovery-readiness32
AppFlowappflow31
DevOpsGurudevops-guru31
SSMIncidentsssm-incidents31
SecurityLakesecuritylake31
VerifiedPermissionsverifiedpermissions31
DSQLdsql30
RolesAnywhererolesanywhere30
Cloud9cloud929
FISfis29
ResourceGroupsresource-groups29
Invoicinginvoicing26
EMRContainersemr-containers25
EMRServerlessemr-serverless25
Grafanagrafana25
ARCRegionSwitcharc-region-switch24
S3Filess3files24
ACMPCAacm-pca23
SecretsManagersecretsmanager23
Syntheticssynthetics22
DataPipelinedatapipeline21
RUMrum20
SQSsqs20
DocDBElasticdocdb-elastic19
MediaPackagemediapackage19
S3Vectorss3vectors19
Route53Profilesroute53profiles18
CodeGuruReviewercodeguru-reviewer17
IVSChativschat17
InternetMonitorinternetmonitor17
ARCZonalShiftarc-zonal-shift15
Oamoam15
ApplicationAutoScalingapplication-autoscaling14
Budgetsbudgets13
CodeStarNotificationscodestar-notifications13
Schedulerscheduler13
BCMDataExportsbcm-data-exports12
MWAAairflow12
Pipespipes10
Rbinrbin10
NotificationsContactsnotifications-contacts9
DLMdlm8

Types that carry no tags

A marker needs somewhere to live, and a type with no tags argument has nowhere to put one.

345 of the 1027 admitted AWS resource types take no tags argument at all. Most untaggable, by service: EC2 29 of 95, S3 14 of 16, ApiGateway 11 of 19, Cognito 10 of 12, IAM 8 of 17, SSO 8 of 10.

A condition on either marker key is unmatched on those, so a grant covering them is wider than its condition. live/MARKERS.md has the full per-service table.

An object declared as a block inside another resource is not a resource at all: an EC2 instance’s root_block_device is a real volume, but the marker goes on the instance’s tags only, so no marker condition matches the volume.

Types tagged after the create

Some taggable types cannot take tags in their create call, aws_route53_zone among them. choudoufu creates them unmarked and tags them straight afterwards (#1084), so an aws:RequestTag condition never sees their create, and an aws:ResourceTag one never sees that tag write. live/MARKERS.md has the grant they need instead.

What a run itself needs

The provider plugin makes the resource calls, with the AWS provider’s usual permissions. The fork’s own short call surface, and the tagging action each service’s marker stamping calls, are in Reference.

The rosters on this page are rendered from live/iam-reference.json, generated by tools/iamref-gen from AWS’s published reference.