├── .gitignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── grammars └── generated-policy.cson ├── lib ├── Gemfile ├── Gemfile.lock ├── generate-grammars.rb ├── policy.cson └── snippets.cson ├── package.json ├── policy.gif ├── settings └── language-policy.cson ├── snippets └── generated-snippets.cson └── spec ├── policy.json ├── reference.json └── reference.policy.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | npm-debug.log 3 | node_modules 4 | lib/policies.js 5 | lib/service_map.json 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.1 - First Release 2 | * It works! 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Rob Witoff 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Atom IDE IAM Policy Syntax Highlighting 2 | 3 | Action aware syntax highlighting and snippets for AWS IAM Policies in the Atom IDE. 4 | 5 | Demo 6 | 7 | **Features:** 8 | * **Strict Syntax Highlighting** - discover errors early with the [IAM EBNF](http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#po) 9 | * **Block Snippets** Autogenerate `Id`, `Version` and `Statement` 10 | * **Action Snippets** Never miss an action again across all _86_ services e.g.: 11 | * `logs:` autocompletes to all cloudwatch logs actions 12 | * `xray:` autocompletes to all xray logs actions 13 | * **Condition Snippets** better scope your policies e.g. 14 | * `IpAddress` 15 | * `IpAddressIfExists` 16 | * **Autogenerated Grammars** This grammar autoscales with AWS! 17 | 18 | ## Development Notes 19 | 20 | **Generating Grammars** 21 | 22 | Because AWS Services and available actions change often, so too must our grammar. We autogenerate the grammar with the provided script 23 | 24 | ```bash 25 | cd ./lib 26 | bundle install 27 | bundle exec generate-grammars.rb 28 | ``` 29 | 30 | **Extracting The Service map** 31 | * The service map is extracted from the [AWS Policy Generator](https://awspolicygen.s3.amazonaws.com/policygen.html) which stores a javascript object of all service information in the [policies.js file](https://awsiamconsole.s3.amazonaws.com/iam/assets/js/bundles/policies.js). 32 | * This object can also be accessed from within the developer console of the policy generated via: `app.PolicyEditorConfig.serviceMap` 33 | 34 | **Atom Grammar Development** 35 | * ⌘+⌥+p -- show current scope 36 | * ⌘+⇧+p -> Window: Reload -- needed to reprocess your changes 37 | * `apm link $SYNTAX_FOLDER` -- install a syntax repo into atom 38 | 39 | **Publishing Atom Package** 40 | 41 | ```shell 42 | apm publish patch|minor|major 43 | ``` 44 | 45 | ## Resources 46 | 47 | Resources: 48 | * [IAM Policy Generator](https://awsiamconsole.s3.amazonaws.com/iam/assets/js/bundles/policies.js) 49 | * [IAM Grammar](http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-bnf) 50 | * [TextMate Grammar Docs](http://manual.macromates.com/en/language_grammars) 51 | * [Writing a Syntax Highlighting Package](https://www.sitepoint.com/how-to-write-a-syntax-highlighting-package-for-atom/) 52 | 53 | Thanks: 54 | * The Atom Team and [Lee Dohm](https://github.com/lee-dohm) for building [great templates](https://github.com/atom/language-json) 55 | -------------------------------------------------------------------------------- /grammars/generated-policy.cson: -------------------------------------------------------------------------------- 1 | 'scopeName': 'policy.json' 2 | 'fileTypes': [ 3 | 'policy' 4 | 'policy.json' 5 | 'iam' 6 | 'iam.json' 7 | ] 8 | 'name': 'policy' 9 | 'patterns': [ 10 | { 'include': '#policy' } 11 | ] 12 | 'repository': 13 | 'policy': 14 | 'begin': '\\{' 15 | 'beginCaptures': 16 | '0': 17 | 'name': 'punctuation.definition.dictionary.begin.json' 18 | 'end': '\\}' 19 | 'endCaptures': 20 | '0': 21 | 'name': 'punctuation.definition.dictionary.end.json' 22 | 'name': 'meta.structure.dictionary.json' 23 | 'patterns': [ 24 | { 'include': '#id_block' } 25 | { 'include': '#version_block' } 26 | { 'include': '#statement_block' } 27 | { 28 | 'match': '[^\\s\\n]' 29 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 30 | } 31 | ] 32 | 'id_block': 33 | 'begin': '(?i:"id")' 34 | 'beginCaptures': 35 | '0': 36 | 'name': 'punctuation.definition.string.begin.json' 37 | 'end': '(,)|(?=\\})' 38 | 'endCaptures': 39 | '0': 40 | 'name': 'punctuation.definition.string.end.json' 41 | 'name': 'string.quoted.double.json' 42 | 'patterns': [ 43 | { 44 | 'begin': ':' 45 | 'beginCaptures': 46 | '0': 47 | 'name': 'punctuation.separator.dictionary.key-value.json' 48 | 'end': '(?=,)|(?=\\})' 49 | 'endCaptures': 50 | '0': 51 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 52 | 'name': 'string.quoted.double.json' 53 | 'patterns': [ 54 | { 55 | 'match': '"[a-zA-Z0-9\\-_]*"' 56 | 'name': 'entity.other.attribute-name' 57 | } 58 | { 59 | 'match': '[^\\s\\n]' 60 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 61 | } 62 | ] 63 | } 64 | ] 65 | 'version_block': 66 | 'begin': '(?i:"version")' 67 | 'beginCaptures': 68 | '0': 69 | 'name': 'punctuation.definition.string.begin.json' 70 | 'end': '(,)|(?=\\})' 71 | 'endCaptures': 72 | '0': 73 | 'name': 'punctuation.definition.string.end.json' 74 | 'name': 'string.quoted.double.json' 75 | 'patterns': [ 76 | { 77 | 'begin': ':' 78 | 'beginCaptures': 79 | '0': 80 | 'name': 'punctuation.separator.dictionary.key-value.json' 81 | 'end': '(?=,)|(?=\\})' 82 | 'endCaptures': 83 | '0': 84 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 85 | 'name': 'string.quoted.double.json' 86 | 'patterns': [ 87 | { 88 | 'match': '("2008-10-17"|"2012-10-17")' 89 | 'name': 'entity.other.attribute-name' 90 | } 91 | { 92 | 'match': '[^\\s\\n]' 93 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 94 | } 95 | ] 96 | } 97 | ] 98 | 'statement_block': 99 | 'begin': '(?i:"statement")' 100 | 'beginCaptures': 101 | '0': 102 | 'name': 'punctuation.definition.string.begin.json' 103 | 'end': '(,)|(?=\\})' 104 | 'endCaptures': 105 | '0': 106 | 'name': 'punctuation.definition.string.end.json' 107 | 'name': 'string.quoted.double.json' 108 | 'patterns': [ 109 | { 110 | 'begin': ':' 111 | 'beginCaptures': 112 | '0': 113 | 'name': 'punctuation.separator.dictionary.key-value.json' 114 | 'end': '(?=,)|(?=\\})' 115 | 'endCaptures': 116 | '0': 117 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 118 | 'name': 'string.quoted.double.json' 119 | 'patterns': [ 120 | { 'include': '#statement_array' } 121 | ] 122 | } 123 | ] 124 | 'statement_array': 125 | 'begin': '\\[' 126 | 'beginCaptures': 127 | '0': 128 | 'name': 'punctuation.definition.array.begin.json' 129 | 'end': '(,?)[\\s\\n]*(\\])' 130 | 'endCaptures': 131 | '1': 132 | 'name': 'invalid.illegal.trailing-array-separator.json' 133 | '2': 134 | 'name': 'punctuation.definition.array.end.json' 135 | 'name': 'meta.structure.array.json' 136 | 'patterns': [ 137 | { 'include': '#statement' } 138 | { 139 | 'match': ',' 140 | 'name': 'punctuation.separator.array.json' 141 | } 142 | { 'include': '#error' } 143 | ] 144 | 'statement': 145 | 'begin': '\\{' 146 | 'beginCaptures': 147 | '0': 148 | 'name': 'punctuation.definition.dictionary.begin.json' 149 | 'end': '\\}' 150 | 'endCaptures': 151 | '0': 152 | 'name': 'punctuation.definition.dictionary.end.json' 153 | 'name': 'meta.structure.dictionary.json' 154 | 'patterns': [ 155 | { 'include': '#sid_block' } 156 | { 'include': '#effect_block' } 157 | { 'include': '#principal_block' } 158 | { 'include': '#action_block' } 159 | { 'include': '#resource_block' } 160 | { 'include': '#condition_block' } 161 | { 162 | 'match': '[^\\s\\n]' 163 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 164 | } 165 | ] 166 | 'sid_block': 167 | 'begin': '(?i:"sid")' 168 | 'beginCaptures': 169 | '0': 170 | 'name': 'punctuation.definition.string.begin.json' 171 | 'end': '(,)|(?=\\})' 172 | 'endCaptures': 173 | '0': 174 | 'name': 'punctuation.definition.string.end.json' 175 | 'name': 'string.quoted.double.json' 176 | 'patterns': [ 177 | { 178 | 'begin': ':' 179 | 'beginCaptures': 180 | '0': 181 | 'name': 'punctuation.separator.dictionary.key-value.json' 182 | 'end': '(?=,)|(?=\\})' 183 | 'endCaptures': 184 | '0': 185 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 186 | 'name': 'string.quoted.double.json' 187 | 'patterns': [ 188 | { 189 | 'match': '"[a-zA-Z0-9]*"' 190 | 'name': 'entity.other.attribute-name' 191 | } 192 | { 193 | 'match': '[^\\s\\n]' 194 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 195 | } 196 | ] 197 | } 198 | ] 199 | 'effect_block': 200 | 'begin': '(?i:"effect")' 201 | 'beginCaptures': 202 | '0': 203 | 'name': 'punctuation.definition.string.begin.json' 204 | 'end': '(,)|(?=\\})' 205 | 'endCaptures': 206 | '0': 207 | 'name': 'punctuation.definition.string.end.json' 208 | 'name': 'string.quoted.double.json' 209 | 'patterns': [ 210 | { 211 | 'begin': ':' 212 | 'beginCaptures': 213 | '0': 214 | 'name': 'punctuation.separator.dictionary.key-value.json' 215 | 'end': '(?=,)|(?=\\})' 216 | 'endCaptures': 217 | '0': 218 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 219 | 'name': 'string.quoted.double.json' 220 | 'patterns': [ 221 | { 222 | 'match': '(?i:"allow"|"deny")' 223 | 'name': 'entity.other.attribute-name' 224 | } 225 | { 226 | 'match': '[^\\s\\n]' 227 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 228 | } 229 | ] 230 | } 231 | ] 232 | 'principal_block': 233 | 'begin': '(?i:"principal"|"notprincipal")' 234 | 'beginCaptures': 235 | '0': 236 | 'name': 'punctuation.definition.string.begin.json' 237 | 'end': '(,)|(?=\\})' 238 | 'endCaptures': 239 | '0': 240 | 'name': 'punctuation.definition.string.end.json' 241 | 'name': 'string.quoted.double.json' 242 | 'patterns': [ 243 | { 244 | 'begin': ':' 245 | 'beginCaptures': 246 | '0': 247 | 'name': 'punctuation.separator.dictionary.key-value.json' 248 | 'end': '(?=,)|(?=\\})' 249 | 'endCaptures': 250 | '0': 251 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 252 | 'name': 'string.quoted.double.json' 253 | 'patterns': [ 254 | { 255 | 'match': '"\\*"' 256 | 'name': 'entity.other.attribute-name' 257 | } 258 | { 'include': '#principal_map' } 259 | { 260 | 'match': '[^\\s\\n]' 261 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 262 | } 263 | ] 264 | } 265 | ] 266 | 'principal_map': 267 | 'begin': '\\{' 268 | 'beginCaptures': 269 | '0': 270 | 'name': 'punctuation.definition.dictionary.begin.json' 271 | 'end': '\\}' 272 | 'endCaptures': 273 | '0': 274 | 'name': 'punctuation.definition.dictionary.end.json' 275 | 'name': 'meta.structure.dictionary.json' 276 | 'patterns': [ 277 | { 'include': '#principal_map_entry' } 278 | { 279 | 'match': '[^\\s\\n]' 280 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 281 | } 282 | ] 283 | 'principal_map_entry': 284 | 'begin': '(?i:"aws"|"federated"|"service")' 285 | 'beginCaptures': 286 | '0': 287 | 'name': 'punctuation.definition.string.begin.json' 288 | 'end': '(,)|(?=\\})' 289 | 'endCaptures': 290 | '0': 291 | 'name': 'punctuation.definition.string.end.json' 292 | 'name': 'string.quoted.double.json' 293 | 'patterns': [ 294 | { 295 | 'begin': ':' 296 | 'beginCaptures': 297 | '0': 298 | 'name': 'punctuation.separator.dictionary.key-value.json' 299 | 'end': '(?=,)|(?=\\})' 300 | 'endCaptures': 301 | '0': 302 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 303 | 'name': 'string.quoted.double.json' 304 | 'patterns': [ 305 | { 'include': '#arn' } 306 | { 'include': '#principal_array' } 307 | ] 308 | } 309 | ] 310 | 'principal_array': 311 | 'begin': '\\[' 312 | 'beginCaptures': 313 | '0': 314 | 'name': 'punctuation.definition.array.begin.json' 315 | 'end': '(,?)[\\s\\n]*(\\])' 316 | 'endCaptures': 317 | '1': 318 | 'name': 'invalid.illegal.trailing-array-separator.json' 319 | '2': 320 | 'name': 'punctuation.definition.array.end.json' 321 | 'name': 'meta.structure.array.json' 322 | 'patterns': [ 323 | { 'include': '#arn' } 324 | { 325 | 'match': ',' 326 | 'name': 'punctuation.separator.array.json' 327 | } 328 | { 'include': '#error' } 329 | ] 330 | 'action_block': 331 | 'begin': '(?i:"action"|"notaction")' 332 | 'beginCaptures': 333 | '0': 334 | 'name': 'punctuation.definition.string.begin.json' 335 | 'end': '(,)|(?=\\})' 336 | 'endCaptures': 337 | '0': 338 | 'name': 'punctuation.definition.string.end.json' 339 | 'name': 'string.quoted.double.json' 340 | 'patterns': [ 341 | { 342 | 'begin': ':' 343 | 'beginCaptures': 344 | '0': 345 | 'name': 'punctuation.separator.dictionary.key-value.json' 346 | 'end': '(?=,)|(?=\\})' 347 | 'endCaptures': 348 | '0': 349 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 350 | 'name': 'string.quoted.double.json' 351 | 'patterns': [ 352 | { 'include': '#action' } 353 | { 'include': '#action_array' } 354 | { 355 | 'match': '[^\\s\\n]' 356 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 357 | } 358 | ] 359 | } 360 | ] 361 | 'action_array': 362 | 'begin': '\\[' 363 | 'beginCaptures': 364 | '0': 365 | 'name': 'punctuation.definition.array.begin.json' 366 | 'end': '(,?)[\\s\\n]*(\\])' 367 | 'endCaptures': 368 | '1': 369 | 'name': 'invalid.illegal.trailing-array-separator.json' 370 | '2': 371 | 'name': 'punctuation.definition.array.end.json' 372 | 'name': 'meta.structure.array.json' 373 | 'patterns': [ 374 | { 375 | 'include': '#action' 376 | } 377 | { 378 | 'match': ',' 379 | 'name': 'punctuation.separator.array.json' 380 | } 381 | { 'include': '#error' } 382 | ] 383 | 'action': 384 | 'begin': '"' 385 | 'beginCaptures': 386 | '0': 387 | 'name': 'entity.other.attribute-name' 388 | 'end': '"' 389 | 'endCaptures': 390 | '0': 391 | 'name': 'entity.other.attribute-name' 392 | 'patterns': [ 393 | { 394 | 'match': '(?<=")(?i:dms|mobiletargeting|acm|tag|ecr|execute-api|apigateway|discovery|appstream|batch|lex|polly|application-autoscaling|autoscaling|budgets|devicefarm|elasticloadbalancing|cloudhsm|elasticbeanstalk|route53|cloudformation|codepipeline|clouddirectory|cloudsearch|cloudtrail|config|codecommit|ec2|codedeploy|elasticfilesystem|elastictranscoder|cloudwatch|events|health|iam|importexport|snowball|kinesis|sdb|lambda|mobilehub|ssm|swf|storagegateway|sqs|ses|redshift|rds|elasticmapreduce|glue|greengrass|sns|s3|ec2|dynamodb|dax|glacier|cloudfront|sts|workdocs|ds|elasticache|logs|cognito-identity|cognito-sync|cognito-idp|mobileanalytics|route53domains|kms|aws-portal|codestar|directconnect|aws-marketplace|aws-marketplace|aws-marketplace-management|servicecatalog|shield|states|trustedadvisor|opsworks|opsworks-cm|workmail|ecs|lightsail|machinelearning|rekognition|workspaces|wam|datapipeline|codebuild|cur|organizations|es|waf|waf-regional|inspector|kinesisanalytics|firehose|iot|gamelift|mechanicalturk|xray|athena|pricing)' 395 | 'name': 'entity.name.tag' 396 | } 397 | { 398 | 'match': '(?<=:)(?i:addtagstoresource|createendpoint|createreplicationinstance|createreplicationsubnetgroup|createreplicationtask|deleteendpoint|deletereplicationinstance|deletereplicationsubnetgroup|deletereplicationtask|describeaccountattributes|describeconnections|describeendpointtypes|describeendpoints|describeorderablereplicationinstances|describerefreshschemasstatus|describereplicationinstances|describereplicationsubnetgroups|describereplicationtasks|describeschemas|describetablestatistics|listtagsforresource|modifyendpoint|modifyreplicationinstance|modifyreplicationsubnetgroup|refreshschemas|removetagsfromresource|startreplicationtask|stopreplicationtask|testconnection|createimportjob|createcampaign|createsegment|deleteadmchannel|deleteapnschannel|deleteapnssandboxchannel|deletecampaign|deletegcmchannel|deletesegment|getadmchannel|getapnschannel|getapnssandboxchannel|getapplicationsettings|getcampaign|getcampaignactivities|getcampaigns|getcampaignversion|getcampaignversions|getendpoint|getgcmchannel|getimportjob|getimportjobs|getreports|getsegment|getsegmentimportjobs|getsegments|getsegmentversion|getsegmentversions|updateadmchannel|updateapnschannel|updateapnssandboxchannel|updateapplicationsettings|updatecampaign|updateendpoint|updateendpointsbatch|updategcmchannel|updatesegment|addtagstocertificate|deletecertificate|describecertificate|getcertificate|importcertificate|listcertificates|listtagsforcertificate|removetagsfromcertificate|requestcertificate|resendvalidationemail|addresourcetags|getresources|gettagkeys|gettagvalues|removeresourcetags|tagresources|untagresources|batchchecklayeravailability|batchdeleteimage|batchgetimage|completelayerupload|createrepository|deleterepository|deleterepositorypolicy|describerepositories|getauthorizationtoken|getdownloadurlforlayer|getrepositorypolicy|initiatelayerupload|listimages|putimage|setrepositorypolicy|uploadlayerpart|invoke|invalidatecache|delete|get|head|options|patch|post|put|createtags|deletetags|describeagents|describeconfigurations|describeexportconfigurations|describetags|exportconfigurations|listconfigurations|startdatacollectionbyagentids|stopdatacollectionbyagentids|associatefleet|createfleet|createdirectoryconfig|createstack|createstreamingurl|deletedirectoryconfig|deletefleet|deletestack|describedirectoryconfigs|describefleets|describeimages|describesessions|describestacks|disassociatefleet|expiresession|listassociatedfleets|listassociatedstacks|startfleet|stopfleet|updatedirectoryconfig|updatefleet|updatestack|canceljob|createcomputeenvironment|createjobqueue|deletecomputeenvironment|deletejobqueue|deregisterjobdefinition|describecomputeenvironments|describejobdefinitions|describejobqueues|describejobs|listjobs|registerjobdefinition|submitjob|terminatejob|updatecomputeenvironment|updatejobqueue|createbotversion|createintentversion|createslottypeversion|deletebot|deletebotalias|deletebotchannelassociation|deletebotversion|deleteintent|deleteintentversion|deleteslottype|deleteslottypeversion|deleteutterances|getbot|getbotalias|getbotaliases|getbotchannelassociation|getbotchannelassociations|getbuiltinintent|getbuiltinintents|getbuiltinslottypes|getbots|getbotversions|getintent|getintents|getintentversions|getslottype|getslottypes|getslottypeversions|getutterancesview|postcontent|posttext|putbot|putbotalias|putintent|putslottype|deletelexicon|describevoices|getlexicon|listlexicons|putlexicon|synthesizespeech|deletescalingpolicy|deregisterscalabletarget|describescalabletargets|describescalingactivities|describescalingpolicies|putscalingpolicy|registerscalabletarget|attachinstances|attachloadbalancers|completelifecycleaction|createautoscalinggroup|createlaunchconfiguration|createorupdatetags|deleteautoscalinggroup|deletelaunchconfiguration|deletelifecyclehook|deletenotificationconfiguration|deletepolicy|deletescheduledaction|deletetags|describeaccountlimits|describeadjustmenttypes|describeautoscalinggroups|describeautoscalinginstances|describeautoscalingnotificationtypes|describelaunchconfigurations|describelifecyclehooktypes|describelifecyclehooks|describeloadbalancers|describemetriccollectiontypes|describenotificationconfigurations|describepolicies|describescalingactivities|describescalingprocesstypes|describescheduledactions|describetags|describeterminationpolicytypes|detachinstances|detachloadbalancers|disablemetricscollection|enablemetricscollection|enterstandby|executepolicy|exitstandby|putlifecyclehook|putnotificationconfiguration|putscalingpolicy|putscheduledupdategroupaction|recordlifecycleactionheartbeat|resumeprocesses|setdesiredcapacity|setinstancehealth|setinstanceprotection|suspendprocesses|terminateinstanceinautoscalinggroup|updateautoscalinggroup|viewbudget|modifybudget|createdevicepool|createnetworkprofile|createproject|createremoteaccesssession|createupload|deletedevicepool|deletenetworkprofile|deleteproject|deleteremoteaccesssession|deleterun|deleteupload|getaccountsettings|getdevice|getdevicepool|getdevicepoolcompatibility|getjob|getnetworkprofile|getofferingstatus|getproject|getremoteaccesssession|getrun|getsuite|gettest|getupload|installtoremoteaccesssession|listartifacts|listdevicepools|listdevices|listjobs|listnetworkprofiles|listofferingtransactions|listofferings|listprojects|listremoteaccesssessions|listruns|listsamples|listsuites|listtests|listuniqueproblems|listuploads|purchaseoffering|renewoffering|schedulerun|stopremoteaccesssession|stoprun|updatedevicepool|updatenetworkprofile|updateproject|addtags|applysecuritygroupstoloadbalancer|attachloadbalancertosubnets|configurehealthcheck|createappcookiestickinesspolicy|createlistener|createlbcookiestickinesspolicy|createloadbalancer|createloadbalancerlisteners|createloadbalancerpolicy|createrule|createtargetgroup|deletelistener|deleteloadbalancer|deleteloadbalancerlisteners|deleteloadbalancerpolicy|deleterule|deletetargetgroup|deregisterinstancesfromloadbalancer|deregistertargets|describeinstancehealth|describelisteners|describeloadbalancerattributes|describeloadbalancerpolicytypes|describeloadbalancerpolicies|describeloadbalancers|describerules|describesslpolicies|describetags|describetargetgroupattributes|describetargetgroups|describetargethealth|detachloadbalancerfromsubnets|disableavailabilityzonesforloadbalancer|enableavailabilityzonesforloadbalancer|modifylistener|modifyloadbalancerattributes|modifyrule|modifytargetgroup|modifytargetgroupattributes|registertargets|registerinstanceswithloadbalancer|removetags|setloadbalancerlistenersslcertificate|setloadbalancerpoliciesforbackendserver|setloadbalancerpoliciesoflistener|setrulepriorities|setsecuritygroups|setsubnets|addtagstoresource|createlunaclient|createhapg|createhsm|deletelunaclient|deletehapg|deletehsm|describelunaclient|describehapg|describehsm|getconfig|listavailablezones|listlunaclients|listhapgs|listhsms|listtagsforresource|modifylunaclient|modifyhapg|modifyhsm|removetagsfromresource|addtags|applyenvironmentmanagedaction|checkdnsavailability|createapplication|createapplicationversion|createconfigurationtemplate|createenvironment|createstoragelocation|deleteapplication|deleteapplicationversion|deleteconfigurationtemplate|deleteenvironmentconfiguration|describeapplicationversions|describeapplications|describeconfigurationoptions|describeconfigurationsettings|describeenvironmenthealth|describeenvironmentmanagedactions|describeenvironmentmanagedactionhistory|describeenvironmentresources|describeenvironments|describeevents|describeinstanceshealth|listavailablesolutionstacks|listtagsforresource|rebuildenvironment|removetags|requestenvironmentinfo|restartappserver|retrieveenvironmentinfo|swapenvironmentcnames|terminateenvironment|updateapplication|updateapplicationresourcelifecycle|updateapplicationversion|updateconfigurationtemplate|updateenvironment|validateconfigurationsettings|associatevpcwithhostedzone|changeresourcerecordsets|changetagsforresource|createhealthcheck|createhostedzone|createreusabledelegationset|createtrafficpolicy|createtrafficpolicyinstance|createtrafficpolicyversion|createvpcassociationauthorization|deletehealthcheck|deletehostedzone|deletereusabledelegationset|deletetrafficpolicy|deletetrafficpolicyinstance|deletevpcassociationauthorization|disabledomainautorenew|disassociatevpcfromhostedzone|enabledomainautorenew|getchange|getcheckeripranges|getgeolocation|gethealthcheck|gethealthcheckcount|gethealthchecklastfailurereason|gethealthcheckstatus|gethostedzone|gethostedzonecount|getreusabledelegationset|gettrafficpolicy|gettrafficpolicyinstance|gettrafficpolicyinstancecount|listgeolocations|listhealthchecks|listhostedzones|listhostedzonesbyname|listresourcerecordsets|listreusabledelegationsets|listtagsforresource|listtagsforresources|listtrafficpolicies|listtrafficpolicyinstances|listtrafficpolicyinstancesbyhostedzone|listtrafficpolicyinstancesbypolicy|listtrafficpolicyversions|listvpcassociationauthorizations|testdnsanswer|updatehealthcheck|updatehostedzonecomment|updatetrafficpolicycomment|updatetrafficpolicyinstance|cancelupdatestack|continueupdaterollback|createchangeset|createstack|createuploadbucket|deletestack|describeaccountlimits|describechangeset|describestackevents|describestackresource|describestackresources|describestacks|estimatetemplatecost|executechangeset|getstackpolicy|gettemplate|gettemplatesummary|listchangesets|liststackresources|liststacks|previewstackupdate|setstackpolicy|signalresource|updatestack|validatetemplate|acknowledgejob|acknowledgethirdpartyjob|createcustomactiontype|createpipeline|deletecustomactiontype|deletepipeline|disablestagetransition|enablestagetransition|getjobdetails|getpipeline|getpipelineexecution|getpipelinestate|getthirdpartyjobdetails|listactiontypes|listpipelines|listpipelineexecutions|pollforjobs|pollforthirdpartyjobs|putactionrevision|putapprovalresult|putjobfailureresult|putjobsuccessresult|putthirdpartyjobfailureresult|putthirdpartyjobsuccessresult|retrystageexecution|startpipelineexecution|updatepipeline|addfacettoobject|applyschema|attachobject|attachpolicy|attachtoindex|batchread|batchwrite|createdirectory|createfacet|createindex|createobject|createschema|deletedirectory|deletefacet|deleteobject|deleteschema|detachfromindex|detachobject|detachpolicy|disabledirectory|enabledirectory|getdirectory|getfacet|getobjectinformation|getschemaasjson|listappliedschemaarns|listattachedindices|listdevelopmentschemaarns|listdirectories|listfacetattributes|listfacetnames|listindex|listobjectattributes|listobjectchildren|listobjectparents|listobjectpolicies|listpolicyattachments|listpublishedschemaarns|listtagsforresource|lookuppolicy|publishschema|putschemafromjson|removefacetfromobject|tagresource|untagresource|updatefacet|updateobjectattributes|updateschema|buildsuggesters|createdomain|defineanalysisscheme|defineexpression|defineindexfield|defineindexfields|definesuggester|deleteanalysisscheme|deletedomain|deleteexpression|deleteindexfield|deletesuggester|describeanalysisschemes|describeavailabilityoptions|describedomains|describeexpressions|describeindexfields|describescalingparameters|describeserviceaccesspolicies|describesuggesters|document|indexdocuments|listdomainnames|search|suggest|updateavailabilityoptions|updatescalingparameters|updateserviceaccesspolicies|addtags|createtrail|deletetrail|describetrails|geteventselectors|gettrailstatus|listpublickeys|listtags|lookupevents|puteventselectors|removetags|startlogging|stoplogging|updatetrail|deleteconfigrule|deleteconfigurationrecorder|deletedeliverychannel|deleteevaluationresults|deliverconfigsnapshot|describecompliancebyconfigrule|describecompliancebyresource|describeconfigruleevaluationstatus|describeconfigrules|describeconfigurationrecorderstatus|describeconfigurationrecorders|describedeliverychannelstatus|describedeliverychannels|getcompliancedetailsbyconfigrule|getcompliancedetailsbyresource|getcompliancesummarybyconfigrule|getcompliancesummarybyresourcetype|getresourceconfighistory|getresources|gettagkeys|listdiscoveredresources|putconfigrule|putconfigurationrecorder|putdeliverychannel|putevaluations|startconfigrulesevaluation|startconfigurationrecorder|stopconfigurationrecorder|batchgetrepositories|createbranch|deletebranch|createrepository|deleterepository|getblob|getbranch|getcommit|getdifferences|getobjectidentifier|getreferences|getrepository|getrepositorytriggers|gettree|gitpull|gitpush|listbranches|listrepositories|putrepositorytriggers|testrepositorytriggers|updatedefaultbranch|updaterepositorydescription|updaterepositoryname|cancelspotfleetrequests|describespotfleetinstances|describespotfleetrequests|describespotfleetrequesthistory|modifyspotfleetrequest|requestspotfleet|addtagstoonpremisesinstances|batchgetapplicationrevisions|batchgetapplications|batchgetdeploymentgroups|batchgetdeploymentinstances|batchgetdeployments|batchgetonpremisesinstances|createapplication|createdeployment|createdeploymentconfig|createdeploymentgroup|deleteapplication|deletedeploymentconfig|deletedeploymentgroup|deregisteronpremisesinstance|getapplication|getapplicationrevision|getdeployment|getdeploymentconfig|getdeploymentgroup|getdeploymentinstance|getonpremisesinstance|listapplicationrevisions|listapplications|listdeploymentconfigs|listdeploymentgroups|listdeploymentinstances|listdeployments|listonpremisesinstances|registerapplicationrevision|registeronpremisesinstance|removetagsfromonpremisesinstances|stopdeployment|updateapplication|updatedeploymentgroup|createfilesystem|createtags|describetags|deletetags|createmounttarget|modifymounttargetsecuritygroups|describemounttargetsecuritygroups|describefilesystems|describemounttargets|deletemounttarget|deletefilesystem|canceljob|createjob|createpipeline|createpreset|deletepipeline|deletepreset|listjobsbypipeline|listjobsbystatus|listpipelines|listpresets|readjob|readpipeline|readpreset|testrole|updatepipeline|updatepipelinenotifications|updatepipelinestatus|deletealarms|describealarmhistory|describealarms|describealarmsformetric|disablealarmactions|enablealarmactions|getmetricdata|getmetricstatistics|listmetrics|putmetricalarm|putmetricdata|setalarmstate|deleterule|describerule|disablerule|enablerule|listrulenamesbytarget|listrules|listtargetsbyrule|putevents|putrule|puttargets|removetargets|testeventpattern|describeaffectedentities|describeentityaggregates|describeeventaggregates|describeevents|describeeventdetails|describeeventtypes|addroletoinstanceprofile|addusertogroup|addclientidtoopenidconnectprovider|attachgrouppolicy|attachrolepolicy|attachuserpolicy|changepassword|createaccesskey|createaccountalias|creategroup|createinstanceprofile|createloginprofile|createopenidconnectprovider|createpolicy|createpolicyversion|createrole|createsamlprovider|createservicelinkedrole|createservicespecificcredential|createuser|createvirtualmfadevice|deactivatemfadevice|deleteaccesskey|deleteaccountalias|deleteaccountpasswordpolicy|deletegroup|deletegrouppolicy|deleteinstanceprofile|deleteloginprofile|deleteopenidconnectprovider|deletepolicy|deletepolicyversion|deleterole|deleterolepolicy|deletesamlprovider|deletesshpublickey|deleteservercertificate|deleteservicelinkedrole|deleteservicespecificcredential|deletesigningcertificate|deleteuser|deleteuserpolicy|deletevirtualmfadevice|detachgrouppolicy|detachrolepolicy|detachuserpolicy|enablemfadevice|generatecredentialreport|generateservicelastaccesseddetails|getaccesskeylastused|getaccountauthorizationdetails|getaccountpasswordpolicy|getaccountsummary|getcontextkeysforcustompolicy|getcontextkeysforprincipalpolicy|getcredentialreport|getgroup|getgrouppolicy|getinstanceprofile|getloginprofile|getopenidconnectprovider|getpolicy|getpolicyversion|getrole|getrolepolicy|getsamlprovider|getsshpublickey|getservercertificate|getservicelastaccesseddetails|getservicelastaccesseddetailswithentities|getservicelinkedroledeletionstatus|getuser|getuserpolicy|listaccesskeys|listaccountaliases|listattachedgrouppolicies|listattachedrolepolicies|listattacheduserpolicies|listentitiesforpolicy|listgrouppolicies|listgroups|listgroupsforuser|listinstanceprofiles|listinstanceprofilesforrole|listmfadevices|listopenidconnectproviders|listpolicies|listpoliciesgrantingserviceaccess|listpolicyversions|listrolepolicies|listroles|listsamlproviders|listsshpublickeys|listservercertificates|listservicespecificcredentials|listsigningcertificates|listuserpolicies|listusers|listvirtualmfadevices|passrole|putgrouppolicy|putrolepolicy|putuserpolicy|removeclientidfromopenidconnectprovider|removerolefrominstanceprofile|removeuserfromgroup|resetservicespecificcredential|resyncmfadevice|setdefaultpolicyversion|simulatecustompolicy|simulateprincipalpolicy|updateaccesskey|updateaccountpasswordpolicy|updateassumerolepolicy|updategroup|updateloginprofile|updateopenidconnectproviderthumbprint|updateroledescription|updatesamlprovider|updatesshpublickey|updateservercertificate|updateservicespecificcredential|updatesigningcertificate|updateuser|uploadsshpublickey|uploadservercertificate|uploadsigningcertificate|createjob|updatejob|canceljob|listjobs|getstatus|getshippinglabel|cancelcluster|canceljob|createaddress|createcluster|createjob|describeaddress|describeaddresses|describecluster|describejob|getjobmanifest|getjobunlockcode|getsnowballusage|listclusterjobs|listclusters|listjobs|updatecluster|updatejob|addtagstostream|createstream|decreasestreamretentionperiod|deletestream|describelimits|describestream|disableenhancedmonitoring|enableenhancedmonitoring|getsharditerator|getrecords|increasestreamretentionperiod|liststreams|listtagsforstream|mergeshards|putrecord|putrecords|removetagsfromstream|splitshard|startstreamencryption|stopstreamencryption|updateshardcount|batchdeleteattributes|batchputattributes|createdomain|deleteattributes|deletedomain|domainmetadata|getattributes|listdomains|putattributes|select|addpermission|createalias|createeventsourcemapping|createfunction|deletealias|deleteeventsourcemapping|deletefunction|getaccountsettings|enablereplication|getalias|geteventsourcemapping|getfunction|getfunctionconfiguration|getpolicy|invokeasync|invokefunction|listaliases|listeventsourcemappings|listfunctions|listtags|listversionsbyfunction|publishversion|removepermission|tagresource|untagresource|updatealias|updateeventsourcemapping|updatefunctioncode|updatefunctionconfiguration|createproject|createservicerole|deleteproject|describebundle|generateprojectparameters|getproject|getprojectsnapshot|exportbundle|exportproject|listavailableconnectors|listavailablefeatures|listavailableregions|listbundles|listprojects|synchronizeproject|updateproject|validateproject|verifyservicerole|addtagstoresource|cancelcommand|createactivation|createassociation|createassociationbatch|createdocument|createmaintenancewindow|createpatchbaseline|deleteactivation|deleteassociation|deletedocument|deletemaintenancewindow|deleteparameter|deletepatchbaseline|deregistermanagedinstance|deregisterpatchbaselineforpatchgroup|deregistertargetfrommaintenancewindow|deregistertaskfrommaintenancewindow|describeactivations|describeassociation|describeautomationexecutions|describeavailablepatches|describedocument|describedocumentpermission|describeeffectiveinstanceassociations|describeeffectivepatchesforpatchbaseline|describeinstanceassociationsstatus|describeinstanceinformation|describeinstancepatches|describeinstancepatchstates|describeinstancepatchstatesforpatchgroup|describemaintenancewindowexecutions|describemaintenancewindowexecutiontaskinvocations|describemaintenancewindowexecutiontasks|describemaintenancewindows|describemaintenancewindowtargets|describemaintenancewindowtasks|describeparameters|describepatchbaselines|describepatchgroups|describepatchgroupstate|getautomationexecution|getcommandinvocation|getdefaultpatchbaseline|getdeployablepatchsnapshotforinstance|getinventory|getinventoryschema|getdocument|getmaintenancewindow|getmaintenancewindowexecution|getmaintenancewindowexecutiontask|getmanifest|getparameterhistory|getparameter|getparameters|getparametersbypath|getpatchbaseline|getpatchbaselineforpatchgroup|listassociationversions|listassociations|listcommandinvocations|listcommands|listdocuments|listdocumentversions|listinstanceassociations|listinventoryentries|listtagsforresource|modifydocumentpermission|putcomplianceitems|putinventory|putparameter|registerdefaultpatchbaseline|registerpatchbaselineforpatchgroup|registertargetwithmaintenancewindow|registertaskwithmaintenancewindow|removetagsfromresource|sendcommand|startassociationsonce|startautomationexecution|stopautomationexecution|updateassociation|updateassociationstatus|updatedocument|updatedocumentdefaultversion|updateinstanceassociationstatus|updatemaintenancewindow|updatemaintenancewindowtarget|updatemaintenancewindowtask|updatemanagedinstancerole|updatepatchbaseline|canceltimer|cancelworkflowexecution|completeworkflowexecution|continueasnewworkflowexecution|countclosedworkflowexecutions|countopenworkflowexecutions|countpendingactivitytasks|countpendingdecisiontasks|deprecateactivitytype|deprecatedomain|deprecateworkflowtype|describeactivitytype|describedomain|describeworkflowexecution|describeworkflowtype|failworkflowexecution|getworkflowexecutionhistory|listactivitytypes|listclosedworkflowexecutions|listdomains|listopenworkflowexecutions|listworkflowtypes|pollforactivitytask|pollfordecisiontask|recordactivitytaskheartbeat|recordmarker|registeractivitytype|registerdomain|registerworkflowtype|requestcancelactivitytask|requestcancelexternalworkflowexecution|requestcancelworkflowexecution|respondactivitytaskcanceled|respondactivitytaskcompleted|respondactivitytaskfailed|responddecisiontaskcompleted|scheduleactivitytask|signalexternalworkflowexecution|signalworkflowexecution|startchildworkflowexecution|starttimer|startworkflowexecution|terminateworkflowexecution|activategateway|addcache|adduploadbuffer|addworkingstorage|cancelarchival|cancelretrieval|createcachediscsivolume|createnfsfileshare|createsnapshot|createsnapshotfromvolumerecoverypoint|createstorediscsivolume|createtapes|createtapewithbarcode|deletebandwidthratelimit|deletechapcredentials|deletefileshare|deletegateway|deletesnapshotschedule|deletetape|deletetapearchive|deletevolume|describebandwidthratelimit|describecache|describecachediscsivolumes|describechapcredentials|describenfsfileshares|describegatewayinformation|describemaintenancestarttime|describesnapshotschedule|describestorediscsivolumes|describetapearchives|describetaperecoverypoints|describetapes|describeuploadbuffer|describevtldevices|describeworkingstorage|disablegateway|listgateways|listlocaldisks|listfileshares|listtagsforresource|listtapes|listvolumerecoverypoints|listvolumes|refreshcache|retrievetapearchive|retrievetaperecoverypoint|setlocalconsolepassword|shutdowngateway|startgateway|updatebandwidthratelimit|updatechapcredentials|updategatewayinformation|updategatewaysoftwarenow|updatemaintenancestarttime|updatenfsfileshare|updatesnapshotschedule|addpermission|changemessagevisibility|changemessagevisibilitybatch|createqueue|deletemessage|deletemessagebatch|deletequeue|getqueueattributes|getqueueurl|listdeadlettersourcequeues|listqueues|purgequeue|receivemessage|removepermission|sendmessage|sendmessagebatch|setqueueattributes|clonereceiptruleset|createreceiptfilter|createreceiptrule|createreceiptruleset|deleteidentity|deleteidentitypolicy|deletereceiptfilter|deletereceiptrule|deletereceiptruleset|deleteverifiedemailaddress|describeactivereceiptruleset|describereceiptrule|describereceiptruleset|getidentitydkimattributes|getidentitynotificationattributes|getidentitypolicies|getidentityverificationattributes|getsendquota|getsendstatistics|listidentities|listidentitypolicies|listreceiptfilters|listreceiptrulesets|listverifiedemailaddresses|putidentitypolicy|reorderreceiptruleset|sendbounce|sendemail|sendrawemail|setactivereceiptruleset|setidentitydkimenabled|setidentitynotificationtopic|setidentityfeedbackforwardingenabled|setreceiptruleposition|updatereceiptrule|verifydomaindkim|verifydomainidentity|verifyemailaddress|verifyemailidentity|authorizeclustersecuritygroupingress|authorizesnapshotaccess|cancelquerysession|copyclustersnapshot|createcluster|createclusteruser|createclusterparametergroup|createclustersecuritygroup|createclustersnapshot|createclustersubnetgroup|createeventsubscription|createhsmclientcertificate|createhsmconfiguration|createtags|deletecluster|deleteclusterparametergroup|deleteclustersecuritygroup|deleteclustersnapshot|deleteclustersubnetgroup|deleteeventsubscription|deletehsmclientcertificate|deletehsmconfiguration|deletetags|describeclusterparametergroups|describeclusterparameters|describeclustersecuritygroups|describeclustersnapshots|describeclustersubnetgroups|describeclusterversions|describeclusters|describedefaultclusterparameters|describeeventcategories|describeeventsubscriptions|describeevents|describehsmclientcertificates|describehsmconfigurations|describeloggingstatus|describeorderableclusteroptions|describereservednodeofferings|describereservednodes|describeresize|describetags|disablelogging|disablesnapshotcopy|enablelogging|enablesnapshotcopy|getclustercredentials|joingroup|modifycluster|modifyclusterparametergroup|modifyclustersubnetgroup|modifyeventsubscription|modifysnapshotcopyretentionperiod|purchasereservednodeoffering|rebootcluster|resetclusterparametergroup|restorefromclustersnapshot|revokeclustersecuritygroupingress|revokesnapshotaccess|rotateencryptionkey|viewqueriesinconsole|addtagstoresource|addsourceidentifiertosubscription|applypendingmaintenanceaction|authorizedbsecuritygroupingress|copydbclustersnapshot|copydbparametergroup|copydbsnapshot|copyoptiongroup|createdbclusterparametergroup|createdbclustersnapshot|createdbcluster|createdbinstance|createdbinstancereadreplica|createdbparametergroup|createdbsecuritygroup|createdbsnapshot|createdbsubnetgroup|createeventsubscription|createoptiongroup|deletedbclusterparametergroup|deletedbclustersnapshot|deletedbcluster|deletedbinstance|deletedbparametergroup|deletedbsecuritygroup|deletedbsnapshot|deletedbsubnetgroup|deleteeventsubscription|deleteoptiongroup|describeaccountattributes|describecertificates|describeenginedefaultclusterparameters|describeenginedefaultparameters|describedbclusterparametergroups|describedbclusterparameters|describedbclustersnapshots|describedbclusters|describedbinstances|describedblogfiles|describedbparametergroups|describedbparameters|describedbsecuritygroups|describedbsnapshotattributes|describedbsnapshots|describedbengineversions|describedbsubnetgroups|describeeventcategories|describeevents|describeeventsubscriptions|describeoptiongroups|describeoptiongroupoptions|describeorderabledbinstanceoptions|describependingmaintenanceactions|describereserveddbinstances|describereserveddbinstancesofferings|downloadcompletedblogfile|downloaddblogfileportion|failoverdbcluster|listtagsforresource|modifydbclusterparametergroup|modifydbcluster|modifydbinstance|modifydbparametergroup|modifydbsnapshotattribute|modifydbsubnetgroup|modifyeventsubscription|modifyoptiongroup|promotereadreplica|purchasereserveddbinstancesoffering|rebootdbinstance|removesourceidentifierfromsubscription|removetagsfromresource|restoredbclusterfromsnapshot|restoredbclustertopointintime|restoredbinstancefromdbsnapshot|restoredbinstancetopointintime|resetdbclusterparametergroup|resetdbparametergroup|revokedbsecuritygroupingress|addinstancegroups|addtags|addjobflowsteps|createsecurityconfiguration|deletesecurityconfiguration|describecluster|describejobflows|describesecurityconfiguration|describestep|listbootstrapactions|listclusters|listinstancegroups|listinstances|listsecurityconfigurations|liststeps|modifyinstancegroups|removetags|runjobflow|setterminationprotection|setvisibletoallusers|terminatejobflows|vieweventsfromallclustersinconsole|batchcreatepartition|batchdeleteconnection|batchdeletepartition|batchdeletetable|batchgetpartition|createclassifier|createconnection|createcrawler|createdatabase|createdevendpoint|createjob|createpartition|createscript|createtable|createtrigger|createuserdefinedfunction|deleteclassifier|deleteconnection|deletecrawler|deletedatabase|deletedevendpoint|deletejob|deletepartition|deletetable|deletetrigger|deleteuserdefinedfunction|getcatalogimportstatus|getclassifier|getclassifiers|getconnection|getconnections|getcrawler|getcrawlers|getcrawlermetrics|getdatabase|getdatabases|getdataflowgraph|getdevendpoint|getdevendpoints|getjob|getjobs|getjobrun|getjobruns|getmapping|getpartition|getpartitions|getplan|gettable|gettableversions|gettables|gettrigger|gettriggers|getuserdefinedfunction|getuserdefinedfunctions|importcatalogtoglue|resetjobbookmark|startcrawler|startcrawlerschedule|startjobrun|starttrigger|stopcrawler|stopcrawlerschedule|stoptrigger|updateclassifier|updateconnection|updatecrawler|updatedatabase|updatedevendpoint|updatejob|updatepartition|updatetable|updatetrigger|updateuserdefinedfunction|associateroletogroup|associateserviceroletoaccount|createcoredefinition|createcoredefinitionversion|createdeployment|createdevicedefinition|createdevicedefinitionversion|createfunctiondefinition|createfunctiondefinitionversion|creategroup|creategroupcertificateauthority|creategroupversion|createloggerdefinition|createloggerdefinitionversion|createsubscriptiondefinition|createsubscriptiondefinitionversion|deletecoredefinition|deletedevicedefinition|deletefunctiondefinition|deletegroup|deleteloggerdefinition|deletesubscriptiondefinition|disassociaterolefromgroup|disassociateservicerolefromaccount|getassociatedrole|getconnectivityinfo|getcoredefinition|getcoredefinitionversion|getdeploymentstatus|getdevicedefinition|getdevicedefinitionversion|getfunctiondefinition|getfunctiondefinitionversion|getgroup|getgroupcertificateauthority|getgroupcertificateconfiguration|getgroupversion|getloggerdefinition|getloggerdefinitionversion|getserviceroleforaccount|getsubscriptiondefinition|getsubscriptiondefinitionversion|listcoredefinitionversions|listcoredefinitions|listdeployments|listdevicedefinitionversions|listdevicedefinitions|listfunctiondefinitionversions|listfunctiondefinitions|listgroupcertificateauthorities|listgroupversions|listgroups|listloggerdefinitionversions|listloggerdefinitions|listsubscriptiondefinitionversions|listsubscriptiondefinitions|resetdeployments|updateconnectivityinfo|updatecoredefinition|updatedevicedefinition|updatefunctiondefinition|updategroup|updategroupcertificateconfiguration|updateloggerdefinition|updatesubscriptiondefinition|addpermission|checkifphonenumberisoptedout|confirmsubscription|createplatformapplication|createplatformendpoint|createtopic|deleteendpoint|deleteplatformapplication|deletetopic|getendpointattributes|getplatformapplicationattributes|getsmsattributes|getsubscriptionattributes|gettopicattributes|listendpointsbyplatformapplication|listphonenumbersoptedout|listplatformapplications|listsubscriptions|listsubscriptionsbytopic|listtopics|optinphonenumber|publish|removepermission|setendpointattributes|setplatformapplicationattributes|setsmsattributes|setsubscriptionattributes|settopicattributes|subscribe|unsubscribe|abortmultipartupload|createbucket|deletebucket|deletebucketpolicy|deletebucketwebsite|deleteobject|deleteobjectversion|getaccelerateconfiguration|getbucketacl|getbucketcors|getbucketlocation|getbucketlogging|getbucketnotification|getbucketpolicy|getbucketrequestpayment|getbuckettagging|getbucketversioning|getbucketwebsite|getlifecycleconfiguration|getobject|getobjectacl|getobjecttagging|getobjecttorrent|getobjectversion|getobjectversionacl|getobjectversiontagging|getobjectversiontorrent|getreplicationconfiguration|listallmybuckets|listbucket|listbucketmultipartuploads|listbucketversions|listmultipartuploadparts|putaccelerateconfiguration|putbucketacl|putbucketcors|putbucketlogging|putbucketnotification|putbucketpolicy|putbucketrequestpayment|putbuckettagging|putbucketversioning|putbucketwebsite|putlifecycleconfiguration|putreplicationconfiguration|putobject|putobjectacl|putobjecttagging|putobjectversionacl|putobjectversiontagging|replicatedelete|replicateobject|restoreobject|acceptreservedinstancesexchangequote|acceptvpcpeeringconnection|allocateaddress|allocatehosts|assignipv6addresses|assignprivateipaddresses|associateaddress|associatedhcpoptions|associateiaminstanceprofile|associateroutetable|associatesubnetcidrblock|associatevpccidrblock|attachclassiclinkvpc|attachinternetgateway|attachnetworkinterface|attachvolume|attachvpngateway|authorizesecuritygroupegress|authorizesecuritygroupingress|bundleinstance|cancelbundletask|cancelconversiontask|cancelexporttask|cancelimporttask|cancelreservedinstanceslisting|cancelspotfleetrequests|cancelspotinstancerequests|confirmproductinstance|copyimage|copysnapshot|createcustomergateway|createdhcpoptions|createegressonlyinternetgateway|createflowlogs|createfpgaimage|createimage|createinstanceexporttask|createinternetgateway|createkeypair|createnatgateway|createnetworkacl|createnetworkaclentry|createnetworkinterface|createnetworkinterfacepermission|createplacementgroup|createreservedinstanceslisting|createroute|createroutetable|createsecuritygroup|createsnapshot|createspotdatafeedsubscription|createsubnet|createtags|createvolume|createvpc|createvpcendpoint|createvpcpeeringconnection|createvpnconnection|createvpnconnectionroute|createvpngateway|deletecustomergateway|deletedhcpoptions|deleteegressonlyinternetgateway|deleteflowlogs|deleteinternetgateway|deletekeypair|deletenatgateway|deletenetworkacl|deletenetworkaclentry|deletenetworkinterface|deleteplacementgroup|deleteroute|deleteroutetable|deletesecuritygroup|deletesnapshot|deletespotdatafeedsubscription|deletesubnet|deletetags|deletevolume|deletevpc|deletevpcendpoints|deletevpcpeeringconnection|deletevpnconnection|deletevpnconnectionroute|deletevpngateway|deregisterimage|describeaccountattributes|describeaddresses|describeavailabilityzones|describebundletasks|describeclassiclinkinstances|describeconversiontasks|describecustomergateways|describedhcpoptions|describeegressonlyinternetgateways|describeexporttasks|describeflowlogs|describefpgaimages|describehosts|describehostreservations|describehostreservationofferings|describeiaminstanceprofileassociations|describeidentityidformat|describeidformat|describeimageattribute|describeimages|describeimportimagetasks|describeimportsnapshottasks|describeinstanceattribute|describeinstancestatus|describeinstances|describeinternetgateways|describekeypairs|describemovingaddresses|describenatgateways|describenetworkacls|describenetworkinterfaceattribute|describenetworkinterfaces|describeplacementgroups|describeprefixlists|describeregions|describereservedinstances|describereservedinstanceslistings|describereservedinstancesmodifications|describereservedinstancesofferings|describeroutetables|describesecuritygroups|describesnapshotattribute|describesnapshots|describespotdatafeedsubscription|describespotfleetinstances|describespotfleetrequesthistory|describespotfleetrequests|describespotinstancerequests|describespotpricehistory|describestalesecuritygroups|describesubnets|describetags|describevolumeattribute|describevolumesmodifications|describevolumestatus|describevolumes|describevpcattribute|describevpcclassiclink|describevpcendpointservices|describevpcendpoints|describevpcpeeringconnections|describevpcs|describevpnconnections|describevpngateways|detachclassiclinkvpc|detachinternetgateway|detachnetworkinterface|detachvolume|detachvpngateway|disablevgwroutepropagation|disablevpcclassiclink|disablevpcclassiclinkdnssupport|describevpcclassiclinkdnssupport|disassociateaddress|disassociateiaminstanceprofile|disassociateroutetable|disassociatesubnetcidrblock|disassociatevpccidrblock|enablevgwroutepropagation|enablevolumeio|enablevpcclassiclink|enablevpcclassiclinkdnssupport|getconsoleoutput|getconsolescreenshot|gethostreservationpurchasepreview|getpassworddata|getreservedinstancesexchangequote|importimage|importinstance|importkeypair|importsnapshot|importvolume|modifyhosts|modifyidentityidformat|modifyidformat|modifyimageattribute|modifyinstanceattribute|modifyinstanceplacement|modifynetworkinterfaceattribute|modifyreservedinstances|modifysnapshotattribute|modifyspotfleetrequest|modifysubnetattribute|modifyvolume|modifyvolumeattribute|modifyvpcattribute|modifyvpcendpoint|modifyvpcpeeringconnectionoptions|monitorinstances|moveaddresstovpc|purchasehostreservation|purchasereservedinstancesoffering|purchasescheduledinstances|rebootinstances|registerimage|rejectvpcpeeringconnection|releaseaddress|releasehosts|replaceiaminstanceprofileassociation|replacenetworkaclassociation|replacenetworkaclentry|replaceroute|replaceroutetableassociation|reportinstancestatus|requestspotfleet|requestspotinstances|resetimageattribute|resetinstanceattribute|resetnetworkinterfaceattribute|resetsnapshotattribute|restoreaddresstoclassic|revokesecuritygroupegress|revokesecuritygroupingress|runinstances|runscheduledinstances|startinstances|stopinstances|terminateinstances|unassignipv6addresses|unassignprivateipaddresses|unmonitorinstances|updatesecuritygroupruledescriptionsegress|updatesecuritygroupruledescriptionsingress|batchgetitem|batchwriteitem|createtable|deleteitem|deletetable|describelimits|describereservedcapacity|describereservedcapacityofferings|describestream|describetable|getitem|getrecords|getsharditerator|liststreams|listtables|listtagsofresource|purchasereservedcapacityofferings|putitem|query|scan|tagresource|updateitem|updatetable|untagresource|batchgetitem|batchwriteitem|createcluster|createparametergroup|createsubnetgroup|decreasereplicationfactor|defineattributelist|defineattributelistid|definekeyschema|deletecluster|deleteitem|deleteparametergroup|deletesubnetgroup|describeclusters|describedefaultparameters|describeevents|describeparametergroups|describeparameters|describesubnetgroups|endpoints|getitem|increasereplicationfactor|listtags|putitem|query|rebootnode|scan|tagresource|untagresource|updatecluster|updateitem|updateparametergroup|updatesubnetgroup|abortvaultlock|addtagstovault|abortmultipartupload|completemultipartupload|completevaultlock|createvault|deletearchive|deletevault|deletevaultaccesspolicy|deletevaultnotifications|describejob|describevault|getdataretrievalpolicy|getjoboutput|getvaultaccesspolicy|getvaultlock|getvaultnotifications|initiatejob|initiatemultipartupload|initiatevaultlock|listjobs|listmultipartuploads|listparts|listtagsforvault|listvaults|removetagsfromvault|setdataretrievalpolicy|setvaultaccesspolicy|setvaultnotifications|uploadarchive|uploadmultipartpart|createcloudfrontoriginaccessidentity|createdistribution|createinvalidation|createstreamingdistribution|deletecloudfrontoriginaccessidentity|deletedistribution|deletestreamingdistribution|getcloudfrontoriginaccessidentity|getcloudfrontoriginaccessidentityconfig|getdistribution|getdistributionconfig|getinvalidation|getstreamingdistribution|getstreamingdistributionconfig|listcloudfrontoriginaccessidentities|listdistributions|listdistributionsbywebaclid|listinvalidations|liststreamingdistributions|updatecloudfrontoriginaccessidentity|updatedistribution|updatestreamingdistribution|assumerole|assumerolewithsaml|assumerolewithwebidentity|decodeauthorizationmessage|getfederationtoken|getsessiontoken|activateuser|addusertogroup|checkalias|createinstance|deactivateuser|deleteinstance|deregisterdirectory|describeavailabledirectories|describeinstances|registerdirectory|removeuserfromgroup|updateinstancealias|addiproutes|addtagstoresource|cancelschemaextension|connectdirectory|createalias|createcomputer|createconditionalforwarder|createdirectory|createmicrosoftad|createsnapshot|createtrust|deleteconditionalforwarder|deletedirectory|deletesnapshot|deletetrust|deregistereventtopic|describeconditionalforwarders|describedirectories|describeeventtopics|describesnapshots|describetrusts|disableradius|disablesso|enableradius|enablesso|getdirectorylimits|getsnapshotlimits|listiproutes|listtagsforresource|listschemaextensions|registereventtopic|removeiproutes|removetagsfromresource|restorefromsnapshot|startschemaextension|updateconditionalforwarder|updateradius|verifytrust|addtagstoresource|authorizecachesecuritygroupingress|copysnapshot|createcachecluster|createcacheparametergroup|createcachesecuritygroup|createcachesubnetgroup|createreplicationgroup|createsnapshot|deletecachecluster|deletecacheparametergroup|deletecachesecuritygroup|deletecachesubnetgroup|deletereplicationgroup|deletesnapshot|describecacheclusters|describecacheengineversions|describecacheparametergroups|describecacheparameters|describecachesecuritygroups|describecachesubnetgroups|describeenginedefaultparameters|describeevents|describereplicationgroups|describereservedcachenodes|describereservedcachenodesofferings|describesnapshots|listallowednodetypemodifications|listtagsforresource|modifycachecluster|modifycacheparametergroup|modifycachesubnetgroup|modifyreplicationgroup|purchasereservedcachenodesoffering|rebootcachecluster|removetagsfromresource|resetcacheparametergroup|revokecachesecuritygroupingress|cancelexporttask|createexporttask|createloggroup|createlogstream|deletedestination|deleteloggroup|deletelogstream|deletemetricfilter|deleteretentionpolicy|deletesubscriptionfilter|describedestinations|describeexporttasks|describeloggroups|describelogstreams|describemetricfilters|describesubscriptionfilters|filterlogevents|getlogevents|putdestination|putdestinationpolicy|putlogevents|putmetricfilter|putretentionpolicy|putsubscriptionfilter|testmetricfilter|createidentitypool|deleteidentitypool|deleteidentities|describeidentity|describeidentitypool|getidentitypoolroles|getopenidtokenfordeveloperidentity|listidentities|listidentitypools|lookupdeveloperidentity|mergedeveloperidentities|setidentitypoolroles|unlinkdeveloperidentity|updateidentitypool|bulkpublish|deletedataset|describedataset|describeidentityusage|describeidentitypoolusage|getbulkpublishdetails|getcognitoevents|getidentitypoolconfiguration|listdatasets|listidentitypoolusage|listrecords|registerdevice|setcognitoevents|setidentitypoolconfiguration|subscribetodataset|updaterecords|unsubscribefromdataset|addcustomattributes|adminaddusertogroup|adminconfirmsignup|admincreateuser|admindeleteuser|admindeleteuserattributes|admindisableuser|adminenableuser|adminforgetdevice|admingetdevice|admingetuser|admininitiateauth|adminlistdevices|adminlistgroupsforuser|adminremoveuserfromgroup|adminresetuserpassword|adminrespondtoauthchallenge|adminsetusersettings|adminupdatedevicestatus|adminupdateuserattributes|adminuserglobalsignout|creategroup|createuserimportjob|createuserpool|createuserpoolclient|deletegroup|deleteuserpool|deleteuserpoolclient|describeuserimportjob|describeuserpool|describeuserpoolclient|getcsvheader|getgroup|listgroups|listuserimportjobs|listuserpoolclients|listuserpools|listusers|listusersingroup|startuserimportjob|stopuserimportjob|updategroup|updateuserpool|updateuserpoolclient|putevents|getreports|getfinancialreports|checkdomainavailability|deletedomain|deletetagsfordomain|disabledomainautorenew|disabledomaintransferlock|enabledomainautorenew|enabledomaintransferlock|getcontactreachabilitystatus|getdomaindetail|getdomainsuggestions|getoperationdetail|listdomains|listoperations|listtagsfordomain|registerdomain|renewdomain|resendcontactreachabilityemail|retrievedomainauthcode|transferdomain|updatedomaincontact|updatedomaincontactprivacy|updatedomainnameservers|updatetagsfordomain|viewbilling|cancelkeydeletion|createalias|creategrant|createkey|decrypt|deletealias|deleteimportedkeymaterial|describekey|disablekey|disablekeyrotation|enablekey|enablekeyrotation|encrypt|generatedatakey|generatedatakeywithoutplaintext|generaterandom|getkeypolicy|getkeyrotationstatus|getparametersforimport|importkeymaterial|listaliases|listgrants|listkeypolicies|listkeys|listresourcetags|listretirablegrants|putkeypolicy|reencryptfrom|reencryptto|reencrypt*|revokegrant|schedulekeydeletion|tagresource|untagresource|updatealias|updatekeydescription|modifyaccount|modifybilling|modifypaymentmethods|viewaccount|viewbilling|viewpaymentmethods|viewusage|associateteammember|createproject|createuserprofile|deleteextendedaccess|deleteproject|deleteuserprofile|describeproject|describeuserprofile|disassociateteammember|getextendedaccess|listprojects|listresources|listteammembers|listuserprofiles|putextendedaccess|updateproject|updateteammember|updateuserprofile|verifyservicerole|allocateconnectiononinterconnect|allocateprivatevirtualinterface|allocatepublicvirtualinterface|confirmconnection|confirmprivatevirtualinterface|confirmpublicvirtualinterface|createconnection|createinterconnect|createprivatevirtualinterface|createpublicvirtualinterface|deleteconnection|deleteinterconnect|deletevirtualinterface|describeconnections|describeconnectionsoninterconnect|describeinterconnects|describelocations|describevirtualgateways|describevirtualinterfaces|subscribe|unsubscribe|viewsubscriptions|meterusage|batchmeterusage|resolvecustomer|uploadfiles|viewmarketing|viewreports|viewsupport|acceptportfolioshare|associateprincipalwithportfolio|associateproductwithportfolio|createconstraint|createportfolio|createportfolioshare|createproduct|createprovisioningartifact|deleteconstraint|deleteportfolio|deleteportfolioshare|deleteproduct|deleteprovisioningartifact|describeconstraint|describeportfolio|describeproduct|describeproductasadmin|describeproductview|describeprovisioningartifact|describeprovisioningparameters|describerecord|disassociateprincipalfromportfolio|disassociateproductfromportfolio|listacceptedportfolioshares|listconstraintsforportfolio|listlaunchpaths|listportfolioaccess|listportfolios|listportfoliosforproduct|listprincipalsforportfolio|listprovisioningartifacts|listrecordhistory|provisionproduct|rejectportfolioshare|scanprovisionedproducts|searchproducts|searchproductsasadmin|terminateprovisionedproduct|updateconstraint|updateportfolio|updateproduct|updateprovisionedproduct|updateprovisioningartifact|createprotection|createsubscription|deleteprotection|deletesubscription|describeattack|describeprotection|describesubscription|listattacks|listprotections|createactivity|createstatemachine|deleteactivity|deletestatemachine|describeactivity|describeexecution|describestatemachine|getactivitytask|getexecutionhistory|listactivities|listexecutions|liststatemachines|sendtaskfailure|sendtaskheartbeat|sendtasksuccess|startexecution|stopexecution|describecheckitems|describecheckrefreshstatuses|describechecksummaries|describenotificationpreferences|excludecheckitems|includecheckitems|refreshcheck|updatenotificationpreferences|assigninstance|assignvolume|associateelasticip|attachelasticloadbalancer|clonestack|createapp|createdeployment|createinstance|createlayer|createstack|createuserprofile|deleteapp|deleteinstance|deletelayer|deletestack|deleteuserprofile|deregisterecscluster|deregisterelasticip|deregisterinstance|deregistervolume|describeapps|describecommands|describedeployments|describeecsclusters|describeelasticips|describeelasticloadbalancers|describeinstances|describelayers|describeloadbasedautoscaling|describepermissions|describeraidarrays|describerdsdbinstances|describeserviceerrors|describestackprovisioningparameters|describestacksummary|describestacks|describetimebasedautoscaling|describeuserprofiles|describevolumes|detachelasticloadbalancer|disassociateelasticip|gethostnamesuggestion|grantaccess|rebootinstance|registerecscluster|registerelasticip|registerinstance|registerrdsdbinstance|registervolume|setloadbasedautoscaling|setpermission|settimebasedautoscaling|startinstance|startstack|stopinstance|stopstack|unassigninstance|unassignvolume|updateapp|updateelasticip|updateinstance|updatelayer|updatemyuserprofile|updaterdsdbinstance|updatestack|updateuserprofile|updatevolume|associatenode|createbackup|createserver|deletebackup|deleteserver|describeaccountattributes|describebackups|describeevents|describenodeassociationstatus|describeservers|disassociatenode|restoreserver|startmaintenance|updateserver|updateserverengineattributes|addmemberstogroup|creategroup|createmaildomain|createmailuser|createorganization|deleteorganization|deletemaildomain|deletemobiledevice|describedirectories|describekmskeys|describeorganizations|describemaildomains|describemailgroups|describemailusers|disablemailgroups|disablemailusers|enablemaildomain|enablemailusers|enablemailgroups|getmaildomaindetails|getmailgroupdetails|getmailuserdetails|getmobiledevicedetails|getmobiledevicesforuser|getmobilepolicydetails|listmembersinmailgroup|removemembersfromgroup|resetuserpassword|searchmembers|setadmin|setdefaultmaildomain|setmailgroupdetails|setmailuserdetails|setmobilepolicydetails|wipemobiledevice|createcluster|createservice|deletecluster|deleteservice|deregistercontainerinstance|deregistertaskdefinition|describeclusters|describecontainerinstances|describeservices|describetaskdefinition|describetasks|discoverpollendpoint|listclusters|listcontainerinstances|listservices|listtaskdefinitionfamilies|listtaskdefinitions|listtasks|poll|registercontainerinstance|registertaskdefinition|runtask|starttask|stoptask|starttelemetrysession|submitcontainerstatechange|submittaskstatechange|updatecontaineragent|updateservice|allocatestaticip|attachstaticip|closeinstancepublicports|createdomain|createdomainentry|createinstancesnapshot|createinstances|createinstancesfromsnapshot|createkeypair|deletedomain|deletedomainentry|deleteinstance|deleteinstancesnapshot|deletekeypair|detachstaticip|downloaddefaultkeypair|getactivenames|getblueprints|getbundles|getdomain|getdomains|getinstance|getinstanceaccessdetails|getinstancemetricdata|getinstanceportstates|getinstancesnapshot|getinstancesnapshots|getinstancestate|getinstances|getkeypair|getkeypairs|getoperation|getoperations|getoperationsforresource|getregions|getstaticip|getstaticips|importkeypair|isvpcpeered|openinstancepublicports|peervpc|rebootinstance|releasestaticip|startinstance|stopinstance|unpeervpc|updatedomainentry|addtags|createbatchprediction|createdatasourcefromrds|createdatasourcefromredshift|createdatasourcefroms3|createevaluation|createmlmodel|createrealtimeendpoint|deletebatchprediction|deletedatasource|deleteevaluation|deletemlmodel|deleterealtimeendpoint|deletetags|describebatchpredictions|describedatasources|describeevaluations|describemlmodels|describetags|getbatchprediction|getdatasource|getevaluation|getmlmodel|predict|updatebatchprediction|updatedatasource|updateevaluation|updatemlmodel|comparefaces|createcollection|deletecollection|deletefaces|detectfaces|detectlabels|detectmoderationlabels|indexfaces|listcollections|listfaces|searchfaces|searchfacesbyimage|createtags|createworkspaces|deletetags|describetags|describeworkspacebundles|describeworkspacesconnectionstatus|describeworkspacedirectories|describeworkspaces|modifyworkspaceproperties|startworkspaces|stopworkspaces|rebootworkspaces|rebuildworkspaces|terminateworkspaces|authenticatepackager|activatepipeline|addtags|createpipeline|deactivatepipeline|deletepipeline|describeobjects|describepipelines|evaluateexpression|getaccountlimits|getpipelinedefinition|listpipelines|pollfortask|putaccountlimits|putpipelinedefinition|queryobjects|removetags|reporttaskprogress|reporttaskrunnerheartbeat|setstatus|settaskstatus|validatepipelinedefinition|batchgetbuilds|batchgetprojects|createproject|deleteproject|listbuilds|listbuildsforproject|listconnectedoauthaccounts|listprojects|listrepositories|persistoauthtoken|startbuild|stopbuild|updateproject|deletereportdefinition|describereportdefinitions|putreportdefinition|accepthandshake|attachpolicy|cancelhandshake|createaccount|createorganization|createorganizationalunit|createpolicy|declinehandshake|deleteorganization|deleteorganizationalunit|deletepolicy|describeaccount|describecreateaccountstatus|describehandshake|describeorganization|describeorganizationalunit|describepolicy|detachpolicy|disablepolicytype|enableallfeatures|enablepolicytype|inviteaccounttoorganization|leaveorganization|listaccounts|listaccountsforparent|listchildren|listcreateaccountstatus|listhandshakesforaccount|listhandshakesfororganization|listorganizationalunitsforparent|listparents|listpolicies|listpoliciesfortarget|listroots|listtargetsforpolicy|moveaccount|removeaccountfromorganization|updateorganizationalunit|updatepolicy|addtags|createelasticsearchdomain|deleteelasticsearchdomain|describeelasticsearchdomain|describeelasticsearchdomains|describeelasticsearchdomainconfig|listdomainnames|listtags|removetags|updateelasticsearchdomainconfig|createbytematchset|createipset|createrule|createratebasedrule|createsizeconstraintset|createsqlinjectionmatchset|createwebacl|createxssmatchset|deletebytematchset|deleteipset|deleterule|deleteratebasedrule|deletesizeconstraintset|deletesqlinjectionmatchset|deletewebacl|deletexssmatchset|getbytematchset|getchangetoken|getchangetokenstatus|getipset|getrule|getratebasedrule|getratebasedrulemanagedkeys|getsampledrequests|getsizeconstraintset|getsqlinjectionmatchset|getwebacl|getxssmatchset|listbytematchsets|listipsets|listrules|listratebasedules|listsizeconstraintsets|listsqlinjectionmatchsets|listwebacls|listxssmatchsets|updatebytematchset|updateipset|updaterule|updateratebasedrule|updatesizeconstraintset|updatesqlinjectionmatchset|updatewebacl|updatexssmatchset|associatewebacl|createbytematchset|createipset|createrule|createratebasedrule|createsizeconstraintset|createsqlinjectionmatchset|createwebacl|createxssmatchset|deletebytematchset|deleteipset|deleterule|deleteratebasedrule|deletesizeconstraintset|deletesqlinjectionmatchset|deletewebacl|deletexssmatchset|disassociatewebacl|getbytematchset|getchangetoken|getchangetokenstatus|getipset|getrule|getratebasedrule|getratebasedrulemanagedkeys|getsampledrequests|getsizeconstraintset|getsqlinjectionmatchset|getwebacl|getwebaclforresource|getxssmatchset|listbytematchsets|listipsets|listresourcesforwebacl|listrules|listratebasedules|listsizeconstraintsets|listsqlinjectionmatchsets|listwebacls|listxssmatchsets|updatebytematchset|updateipset|updaterule|updateratebasedrule|updatesizeconstraintset|updatesqlinjectionmatchset|updatewebacl|updatexssmatchset|addattributestofindings|createassessmenttarget|createassessmenttemplate|createresourcegroup|deleteassessmentrun|deleteassessmenttarget|deleteassessmenttemplate|describeassessmentruns|describeassessmenttargets|describeassessmenttemplates|describecrossaccountaccessrole|describefindings|describeresourcegroups|describerulespackages|gettelemetrymetadata|listassessmentrunagents|listassessmentruns|listassessmenttargets|listassessmenttemplates|listeventsubscriptions|listfindings|listrulespackages|listtagsforresource|previewagents|registercrossaccountaccessrole|removeattributesfromfindings|settagsforresource|startassessmentrun|stopassessmentrun|subscribetoevent|unsubscribefromevent|updateassessmenttarget|addapplicationinput|addapplicationoutput|addapplicationreferencedatasource|createapplication|deleteapplication|deleteapplicationoutput|deleteapplicationreferencedatasource|describeapplication|discoverinputschema|getapplicationstate|listapplications|startapplication|stopapplication|updateapplication|createdeliverystream|deletedeliverystream|describedeliverystream|listdeliverystreams|putrecord|putrecordbatch|updatedestination|acceptcertificatetransfer|attachprincipalpolicy|attachthingprincipal|cancelcertificatetransfer|connect|createcertificatefromcsr|createkeysandcertificate|createpolicy|createpolicyversion|creatething|createthingtype|createtopicrule|deletecacertificate|deletecertificate|deletepolicy|deletepolicyversion|deleteregistrationcode|deletething|deletethingshadow|deletethingtype|deletetopicrule|deprecatethingtype|describecacertificate|describecertificate|describeendpoint|describething|describethingtype|detachprincipalpolicy|detachthingprincipal|disabletopicrule|enabletopicrule|getloggingoptions|getpolicy|getpolicyversion|getregistrationcode|getthingshadow|gettopicrule|listcacertificates|listcertificates|listcertificatesbyca|listoutgoingcertificates|listpolicies|listpolicyprincipals|listpolicyversions|listprincipalpolicies|listprincipalthings|listthingprincipals|listthings|listthingtypes|listtopicrules|publish|receive|registercacertificate|registercertificate|rejectcertificatetransfer|replacetopicrule|setdefaultpolicyversion|setloggingoptions|subscribe|transfercertificate|updatecacertificate|updatecertificate|updatething|updatethingshadow|createalias|createbuild|createfleet|creategamesession|createplayersession|createplayersessions|deletealias|deletebuild|deletefleet|deletescalingpolicy|describealias|describebuild|describeec2instancelimits|describefleetattributes|describefleetcapacity|describefleetevents|describefleetportsettings|describefleetutilization|describegamesessions|describegamesessiondetails|describeinstances|describeplayersessions|describeruntimeconfiguration|describescalingpolicies|getgamesessionlogurl|getinstanceaccess|listaliases|listbuilds|listfleets|putscalingpolicy|searchgamesessions|requestuploadcredentials|resolvealias|updatealias|updatebuild|updatefleetattributes|updatefleetcapacity|updatefleetportsettings|updategamesession|updateruntimeconfiguration|acceptqualificationrequest|approveassignment|approverejectedassignment|assignqualification|associatequalificationwithworker|blockworker|createhittype|changehittypeofhit|createhit|createhitwithhittype|createqualificationtype|createworkerblock|deletehit|deletequalificationtype|deleteworkerblock|disablehit|disassociatequalificationfromworker|disposehit|disposequalificationtype|extendhit|forceexpirehit|getaccountbalance|getassignment|getassignmentsforhit|getblockedworkers|getbonuspayments|getfileuploadurl|gethit|gethitsforqualificationtype|getqualificationrequests|getqualificationscore|getqualificationtype|getqualificationsforqualificationtype|getrequesterstatistic|getrequesterworkerstatistic|getreviewresultsforhit|getreviewablehits|grantbonus|grantqualification|listassignmentsforhit|listbonuspayments|listhits|listhitsforqualificationtype|listqualificationrequests|listqualificationtypes|listreviewablehits|listreviewpolicyresultsforhit|listworkerblocks|listworkerswithqualificationtype|notifyworkers|registerhittype|rejectassignment|rejectqualificationrequest|revokequalification|searchhits|searchqualificationtypes|sendbonus|sendtesteventnotification|sethitasreviewing|sethittypenotification|unblockworker|updateexpirationforhit|updatehitreviewstatus|updatehittypeofhit|updatenotificationsettings|updatequalificationscore|updatequalificationtype|batchgettraces|getservicegraph|gettracegraph|gettracesummaries|puttelemetryrecords|puttracesegments|batchgetnamedquery|batchgetqueryexecution|cancelqueryexecution|createnamedquery|deletenamedquery|getcatalogs|getexecutionengine|getexecutionengines|getnamedquery|getnamespace|getnamespaces|getqueryexecution|getqueryexecutions|getqueryresults|gettable|gettables|listnamedqueries|listqueryexecutions|runquery|startqueryexecution|stopqueryexecution|describeservices|getattributevalues|getproducts)(?=")' 399 | 'name': 'entity.name.tag' 400 | } 401 | { 402 | 'match': ':' 403 | 'name': 'entity.other.attribute-name' 404 | } 405 | { 406 | 'match': '[a-zA-Z0-9\\*]*' 407 | 'name': 'entity.other.attribute-name' 408 | } 409 | { 'include': '#error' } 410 | ] 411 | 'resource_block': 412 | 'begin': '(?i:"resource"|"notresource")' 413 | 'beginCaptures': 414 | '0': 415 | 'name': 'punctuation.definition.string.begin.json' 416 | 'end': '(,)|(?=\\})' 417 | 'endCaptures': 418 | '0': 419 | 'name': 'punctuation.definition.string.end.json' 420 | 'name': 'string.quoted.double.json' 421 | 'patterns': [ 422 | { 423 | 'begin': ':' 424 | 'beginCaptures': 425 | '0': 426 | 'name': 'punctuation.separator.dictionary.key-value.json' 427 | 'end': '(?=,)|(?=\\})' 428 | 'endCaptures': 429 | '0': 430 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 431 | 'name': 'string.quoted.double.json' 432 | 'patterns': [ 433 | { 'include': '#arn' } 434 | { 'include': '#resource_array' } 435 | { 436 | 'match': '[^\\s\\n]' 437 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 438 | } 439 | ] 440 | } 441 | ] 442 | 'resource_array': 443 | 'begin': '\\[' 444 | 'beginCaptures': 445 | '0': 446 | 'name': 'punctuation.definition.array.begin.json' 447 | 'end': '(,?)[\\s\\n]*(\\])' 448 | 'endCaptures': 449 | '1': 450 | 'name': 'invalid.illegal.trailing-array-separator.json' 451 | '2': 452 | 'name': 'punctuation.definition.array.end.json' 453 | 'name': 'meta.structure.array.json' 454 | 'patterns': [ 455 | { 'include': '#arn' } 456 | { 457 | 'match': ',' 458 | 'name': 'punctuation.separator.array.json' 459 | } 460 | { 'include': '#error' } 461 | ] 462 | 'condition_block': 463 | 'begin': '(?i:"condition")' 464 | 'beginCaptures': 465 | '0': 466 | 'name': 'punctuation.definition.string.begin.json' 467 | 'end': '(,)|(?=\\})' 468 | 'endCaptures': 469 | '0': 470 | 'name': 'punctuation.definition.string.end.json' 471 | 'name': 'string.quoted.double.json' 472 | 'patterns': [ 473 | { 474 | 'begin': ':' 475 | 'beginCaptures': 476 | '0': 477 | 'name': 'punctuation.separator.dictionary.key-value.json' 478 | 'end': '(?=,)|(?=\\})' 479 | 'endCaptures': 480 | '0': 481 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 482 | 'name': 'string.quoted.double.json' 483 | 'patterns': [ 484 | { 485 | 'include': '#condition_map' 486 | } 487 | { 488 | 'match': '[^\\s\\n]' 489 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 490 | } 491 | ] 492 | } 493 | ] 494 | 'condition_map': 495 | 'begin': '\\{' 496 | 'beginCaptures': 497 | '0': 498 | 'name': 'punctuation.definition.dictionary.begin.json' 499 | 'end': '\\}' 500 | 'endCaptures': 501 | '0': 502 | 'name': 'punctuation.definition.dictionary.end.json' 503 | 'name': 'meta.structure.dictionary.json' 504 | 'patterns': [ 505 | { 'include': '#condition_type_entry' } 506 | { 507 | 'match': '[^\\s\\n]' 508 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 509 | } 510 | ] 511 | 'condition_type_entry': 512 | 'begin': '(?i:"[a-zA-Z0-9]*")' 513 | 'beginCaptures': 514 | '0': 515 | 'name': 'punctuation.definition.string.begin.json' 516 | 'end': '(,)|(?=\\})' 517 | 'endCaptures': 518 | '0': 519 | 'name': 'punctuation.definition.string.end.json' 520 | 'name': 'string.quoted.double.json' 521 | 'patterns': [ 522 | { 523 | 'begin': ':' 524 | 'beginCaptures': 525 | '0': 526 | 'name': 'punctuation.separator.dictionary.key-value.json' 527 | 'end': '(?=,)|(?=\\})' 528 | 'endCaptures': 529 | '0': 530 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 531 | 'name': 'string.quoted.double.json' 532 | 'patterns': [ 533 | { 534 | 'include': '#condition_key_map' 535 | } 536 | ] 537 | } 538 | ] 539 | 'condition_key_map': 540 | 'begin': '\\{' 541 | 'beginCaptures': 542 | '0': 543 | 'name': 'punctuation.definition.dictionary.begin.json' 544 | 'end': '\\}' 545 | 'endCaptures': 546 | '0': 547 | 'name': 'punctuation.definition.dictionary.end.json' 548 | 'name': 'meta.structure.dictionary.json' 549 | 'patterns': [ 550 | { 551 | 'include': '#condition_key_entry' 552 | } 553 | { 554 | 'match': '[^\\s\\n]' 555 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 556 | } 557 | ] 558 | 'condition_key_entry': 559 | 'begin': '(?i:"[a-zA-Z0-9:]*")' 560 | 'beginCaptures': 561 | '0': 562 | 'name': 'punctuation.definition.string.begin.json' 563 | 'end': '(,)|(?=\\})' 564 | 'endCaptures': 565 | '0': 566 | 'name': 'punctuation.definition.string.end.json' 567 | 568 | 'patterns': [ 569 | { 570 | 'begin': ':' 571 | 'beginCaptures': 572 | '0': 573 | 'name': 'punctuation.separator.dictionary.key-value.json' 574 | 'end': '(?=,)|(?=\\})' 575 | 'endCaptures': 576 | '0': 577 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 578 | 'name': 'string.quoted.double.json' 579 | 'patterns': [ 580 | { 581 | 'include': '#condition' 582 | } 583 | { 584 | 'include': '#condition_array' 585 | } 586 | ] 587 | } 588 | ] 589 | 'condition_array': 590 | 'begin': '\\[' 591 | 'beginCaptures': 592 | '0': 593 | 'name': 'punctuation.definition.array.begin.json' 594 | 'end': '(,?)[\\s\\n]*(\\])' 595 | 'endCaptures': 596 | '1': 597 | 'name': 'invalid.illegal.trailing-array-separator.json' 598 | '2': 599 | 'name': 'punctuation.definition.array.end.json' 600 | 'name': 'meta.structure.array.json' 601 | 'patterns': [ 602 | { 603 | 'include': '#condition' 604 | } 605 | { 606 | 'match': ',' 607 | 'name': 'punctuation.separator.array.json' 608 | } 609 | { 'include': '#error' } 610 | ] 611 | 'condition': 612 | 'match': '"[^"]*"' 613 | 'name': 'entity.other.attribute-name' 614 | 'arn': 615 | 'match': '"[^"]*"' 616 | 'name': 'entity.other.attribute-name' 617 | 'error': 618 | 'match': '[^\\s\\]]' 619 | 'name': 'invalid.illegal.expected-array-separator.json' 620 | -------------------------------------------------------------------------------- /lib/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'faraday', '~> 0.9.2' 4 | gem 'pry', '~> 0.10.4' 5 | -------------------------------------------------------------------------------- /lib/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | coderay (1.1.2) 5 | faraday (0.9.2) 6 | multipart-post (>= 1.2, < 3) 7 | method_source (0.8.2) 8 | multipart-post (2.0.0) 9 | pry (0.10.4) 10 | coderay (~> 1.1.0) 11 | method_source (~> 0.8.1) 12 | slop (~> 3.4) 13 | slop (3.6.0) 14 | 15 | PLATFORMS 16 | ruby 17 | 18 | DEPENDENCIES 19 | faraday (~> 0.9.2) 20 | pry (~> 0.10.4) 21 | 22 | BUNDLED WITH 23 | 1.16.0 24 | -------------------------------------------------------------------------------- /lib/generate-grammars.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'json' 4 | require 'faraday' 5 | 6 | def get_service_map 7 | download = Faraday.get 'https://awsiamconsole.s3.amazonaws.com/iam/assets/js/bundles/policies.js' 8 | File.write './policies.js', download.body 9 | end 10 | 11 | def parse_service_map 12 | policies = File.read('./policies.js') 13 | # Extract the ServiceMap 14 | index = policies.index 'serviceMap' 15 | chars = policies[index..-1].split '' 16 | # Pull the following object 17 | obj = [] 18 | lb=rb=0 19 | chars.each do |c| 20 | lb += 1 if c== '{' 21 | rb += 1 if c== '}' 22 | obj.push c 23 | break if lb>0 and lb==rb 24 | end 25 | # Turn Javascript Object into JSON (FML -- can't aws just give us the JSON?) 26 | service_map = obj.join.gsub(/\s/, '') 27 | # Cleanup Exceptions 28 | service_map.gsub!(/HasResource:\!([0-9]+)/, 'HasResource:"!\1"') 29 | service_map.gsub!(/ARNRegex:("[^"]*")/, 'ARNRegex:"REMOVED"') 30 | # turn objects into strings e.g. test:[] => "test":[] 31 | service_map.gsub!(/([a-zA-Z0-9_]+):([\[{0-9"])/, '"\1":\2') 32 | service_map = '{' + service_map + '}' 33 | File.write('service_map.json', service_map) 34 | JSON.load(service_map) 35 | end 36 | 37 | def generate_grammar service_map 38 | # extract fields 39 | cson = File.read './policy.cson' 40 | service_count = service_map['serviceMap'].keys.length 41 | 42 | # Get Services 43 | prefixes = service_map['serviceMap'].values.collect { |v| v['StringPrefix'] } 44 | service_list = prefixes.join('|').downcase 45 | cson.gsub! '{{SERVICE_LIST}}', service_list 46 | puts service_list 47 | 48 | # Get Actions 49 | actions = service_map['serviceMap'].values.collect {|v|v['Actions']}.flatten 50 | action_list = actions.join('|').downcase 51 | cson.gsub! '{{ACTION_LIST}}', action_list 52 | puts action_list 53 | 54 | File.write '../grammars/generated-policy.cson', cson 55 | end 56 | 57 | def get_service_snippet service, actions 58 | 59 | snippet = [] 60 | snippet.push " 'All #{service} Actions':" 61 | snippet.push " 'prefix': '#{service}:'" 62 | snippet.push " 'body': \"\"\"" 63 | actions.each do |a| 64 | snippet.push " \"#{service}:#{a}\"," 65 | end 66 | snippet.push " \"\"\"\n\n" 67 | snippet.join "\n" 68 | end 69 | 70 | def generate_snippets service_map 71 | 72 | cson = File.read './snippets.cson' 73 | 74 | service_map['serviceMap'].keys.each do |k| 75 | service = service_map['serviceMap'][k]['StringPrefix'] 76 | actions = service_map['serviceMap'][k]['Actions'] 77 | snippet = get_service_snippet service, actions 78 | cson += snippet 79 | end 80 | 81 | File.write '../snippets/generated-snippets.cson', cson 82 | end 83 | 84 | get_service_map 85 | service_map = parse_service_map 86 | # Grammar 87 | generate_grammar service_map 88 | # Snippets 89 | generate_snippets service_map 90 | -------------------------------------------------------------------------------- /lib/policy.cson: -------------------------------------------------------------------------------- 1 | 'scopeName': 'policy.json' 2 | 'fileTypes': [ 3 | 'policy' 4 | 'policy.json' 5 | 'iam' 6 | 'iam.json' 7 | ] 8 | 'name': 'policy' 9 | 'patterns': [ 10 | { 'include': '#policy' } 11 | ] 12 | 'repository': 13 | 'policy': 14 | 'begin': '\\{' 15 | 'beginCaptures': 16 | '0': 17 | 'name': 'punctuation.definition.dictionary.begin.json' 18 | 'end': '\\}' 19 | 'endCaptures': 20 | '0': 21 | 'name': 'punctuation.definition.dictionary.end.json' 22 | 'name': 'meta.structure.dictionary.json' 23 | 'patterns': [ 24 | { 'include': '#id_block' } 25 | { 'include': '#version_block' } 26 | { 'include': '#statement_block' } 27 | { 28 | 'match': '[^\\s\\n]' 29 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 30 | } 31 | ] 32 | 'id_block': 33 | 'begin': '(?i:"id")' 34 | 'beginCaptures': 35 | '0': 36 | 'name': 'punctuation.definition.string.begin.json' 37 | 'end': '(,)|(?=\\})' 38 | 'endCaptures': 39 | '0': 40 | 'name': 'punctuation.definition.string.end.json' 41 | 'name': 'string.quoted.double.json' 42 | 'patterns': [ 43 | { 44 | 'begin': ':' 45 | 'beginCaptures': 46 | '0': 47 | 'name': 'punctuation.separator.dictionary.key-value.json' 48 | 'end': '(?=,)|(?=\\})' 49 | 'endCaptures': 50 | '0': 51 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 52 | 'name': 'string.quoted.double.json' 53 | 'patterns': [ 54 | { 55 | 'match': '"[a-zA-Z0-9\\-_]*"' 56 | 'name': 'entity.other.attribute-name' 57 | } 58 | { 59 | 'match': '[^\\s\\n]' 60 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 61 | } 62 | ] 63 | } 64 | ] 65 | 'version_block': 66 | 'begin': '(?i:"version")' 67 | 'beginCaptures': 68 | '0': 69 | 'name': 'punctuation.definition.string.begin.json' 70 | 'end': '(,)|(?=\\})' 71 | 'endCaptures': 72 | '0': 73 | 'name': 'punctuation.definition.string.end.json' 74 | 'name': 'string.quoted.double.json' 75 | 'patterns': [ 76 | { 77 | 'begin': ':' 78 | 'beginCaptures': 79 | '0': 80 | 'name': 'punctuation.separator.dictionary.key-value.json' 81 | 'end': '(?=,)|(?=\\})' 82 | 'endCaptures': 83 | '0': 84 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 85 | 'name': 'string.quoted.double.json' 86 | 'patterns': [ 87 | { 88 | 'match': '("2008-10-17"|"2012-10-17")' 89 | 'name': 'entity.other.attribute-name' 90 | } 91 | { 92 | 'match': '[^\\s\\n]' 93 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 94 | } 95 | ] 96 | } 97 | ] 98 | 'statement_block': 99 | 'begin': '(?i:"statement")' 100 | 'beginCaptures': 101 | '0': 102 | 'name': 'punctuation.definition.string.begin.json' 103 | 'end': '(,)|(?=\\})' 104 | 'endCaptures': 105 | '0': 106 | 'name': 'punctuation.definition.string.end.json' 107 | 'name': 'string.quoted.double.json' 108 | 'patterns': [ 109 | { 110 | 'begin': ':' 111 | 'beginCaptures': 112 | '0': 113 | 'name': 'punctuation.separator.dictionary.key-value.json' 114 | 'end': '(?=,)|(?=\\})' 115 | 'endCaptures': 116 | '0': 117 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 118 | 'name': 'string.quoted.double.json' 119 | 'patterns': [ 120 | { 'include': '#statement_array' } 121 | ] 122 | } 123 | ] 124 | 'statement_array': 125 | 'begin': '\\[' 126 | 'beginCaptures': 127 | '0': 128 | 'name': 'punctuation.definition.array.begin.json' 129 | 'end': '(,?)[\\s\\n]*(\\])' 130 | 'endCaptures': 131 | '1': 132 | 'name': 'invalid.illegal.trailing-array-separator.json' 133 | '2': 134 | 'name': 'punctuation.definition.array.end.json' 135 | 'name': 'meta.structure.array.json' 136 | 'patterns': [ 137 | { 'include': '#statement' } 138 | { 139 | 'match': ',' 140 | 'name': 'punctuation.separator.array.json' 141 | } 142 | { 'include': '#error' } 143 | ] 144 | 'statement': 145 | 'begin': '\\{' 146 | 'beginCaptures': 147 | '0': 148 | 'name': 'punctuation.definition.dictionary.begin.json' 149 | 'end': '\\}' 150 | 'endCaptures': 151 | '0': 152 | 'name': 'punctuation.definition.dictionary.end.json' 153 | 'name': 'meta.structure.dictionary.json' 154 | 'patterns': [ 155 | { 'include': '#sid_block' } 156 | { 'include': '#effect_block' } 157 | { 'include': '#principal_block' } 158 | { 'include': '#action_block' } 159 | { 'include': '#resource_block' } 160 | { 'include': '#condition_block' } 161 | { 162 | 'match': '[^\\s\\n]' 163 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 164 | } 165 | ] 166 | 'sid_block': 167 | 'begin': '(?i:"sid")' 168 | 'beginCaptures': 169 | '0': 170 | 'name': 'punctuation.definition.string.begin.json' 171 | 'end': '(,)|(?=\\})' 172 | 'endCaptures': 173 | '0': 174 | 'name': 'punctuation.definition.string.end.json' 175 | 'name': 'string.quoted.double.json' 176 | 'patterns': [ 177 | { 178 | 'begin': ':' 179 | 'beginCaptures': 180 | '0': 181 | 'name': 'punctuation.separator.dictionary.key-value.json' 182 | 'end': '(?=,)|(?=\\})' 183 | 'endCaptures': 184 | '0': 185 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 186 | 'name': 'string.quoted.double.json' 187 | 'patterns': [ 188 | { 189 | 'match': '"[a-zA-Z0-9]*"' 190 | 'name': 'entity.other.attribute-name' 191 | } 192 | { 193 | 'match': '[^\\s\\n]' 194 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 195 | } 196 | ] 197 | } 198 | ] 199 | 'effect_block': 200 | 'begin': '(?i:"effect")' 201 | 'beginCaptures': 202 | '0': 203 | 'name': 'punctuation.definition.string.begin.json' 204 | 'end': '(,)|(?=\\})' 205 | 'endCaptures': 206 | '0': 207 | 'name': 'punctuation.definition.string.end.json' 208 | 'name': 'string.quoted.double.json' 209 | 'patterns': [ 210 | { 211 | 'begin': ':' 212 | 'beginCaptures': 213 | '0': 214 | 'name': 'punctuation.separator.dictionary.key-value.json' 215 | 'end': '(?=,)|(?=\\})' 216 | 'endCaptures': 217 | '0': 218 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 219 | 'name': 'string.quoted.double.json' 220 | 'patterns': [ 221 | { 222 | 'match': '(?i:"allow"|"deny")' 223 | 'name': 'entity.other.attribute-name' 224 | } 225 | { 226 | 'match': '[^\\s\\n]' 227 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 228 | } 229 | ] 230 | } 231 | ] 232 | 'principal_block': 233 | 'begin': '(?i:"principal"|"notprincipal")' 234 | 'beginCaptures': 235 | '0': 236 | 'name': 'punctuation.definition.string.begin.json' 237 | 'end': '(,)|(?=\\})' 238 | 'endCaptures': 239 | '0': 240 | 'name': 'punctuation.definition.string.end.json' 241 | 'name': 'string.quoted.double.json' 242 | 'patterns': [ 243 | { 244 | 'begin': ':' 245 | 'beginCaptures': 246 | '0': 247 | 'name': 'punctuation.separator.dictionary.key-value.json' 248 | 'end': '(?=,)|(?=\\})' 249 | 'endCaptures': 250 | '0': 251 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 252 | 'name': 'string.quoted.double.json' 253 | 'patterns': [ 254 | { 255 | 'match': '"\\*"' 256 | 'name': 'entity.other.attribute-name' 257 | } 258 | { 'include': '#principal_map' } 259 | { 260 | 'match': '[^\\s\\n]' 261 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 262 | } 263 | ] 264 | } 265 | ] 266 | 'principal_map': 267 | 'begin': '\\{' 268 | 'beginCaptures': 269 | '0': 270 | 'name': 'punctuation.definition.dictionary.begin.json' 271 | 'end': '\\}' 272 | 'endCaptures': 273 | '0': 274 | 'name': 'punctuation.definition.dictionary.end.json' 275 | 'name': 'meta.structure.dictionary.json' 276 | 'patterns': [ 277 | { 'include': '#principal_map_entry' } 278 | { 279 | 'match': '[^\\s\\n]' 280 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 281 | } 282 | ] 283 | 'principal_map_entry': 284 | 'begin': '(?i:"aws"|"federated"|"service")' 285 | 'beginCaptures': 286 | '0': 287 | 'name': 'punctuation.definition.string.begin.json' 288 | 'end': '(,)|(?=\\})' 289 | 'endCaptures': 290 | '0': 291 | 'name': 'punctuation.definition.string.end.json' 292 | 'name': 'string.quoted.double.json' 293 | 'patterns': [ 294 | { 295 | 'begin': ':' 296 | 'beginCaptures': 297 | '0': 298 | 'name': 'punctuation.separator.dictionary.key-value.json' 299 | 'end': '(?=,)|(?=\\})' 300 | 'endCaptures': 301 | '0': 302 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 303 | 'name': 'string.quoted.double.json' 304 | 'patterns': [ 305 | { 'include': '#arn' } 306 | { 'include': '#principal_array' } 307 | ] 308 | } 309 | ] 310 | 'principal_array': 311 | 'begin': '\\[' 312 | 'beginCaptures': 313 | '0': 314 | 'name': 'punctuation.definition.array.begin.json' 315 | 'end': '(,?)[\\s\\n]*(\\])' 316 | 'endCaptures': 317 | '1': 318 | 'name': 'invalid.illegal.trailing-array-separator.json' 319 | '2': 320 | 'name': 'punctuation.definition.array.end.json' 321 | 'name': 'meta.structure.array.json' 322 | 'patterns': [ 323 | { 'include': '#arn' } 324 | { 325 | 'match': ',' 326 | 'name': 'punctuation.separator.array.json' 327 | } 328 | { 'include': '#error' } 329 | ] 330 | 'action_block': 331 | 'begin': '(?i:"action"|"notaction")' 332 | 'beginCaptures': 333 | '0': 334 | 'name': 'punctuation.definition.string.begin.json' 335 | 'end': '(,)|(?=\\})' 336 | 'endCaptures': 337 | '0': 338 | 'name': 'punctuation.definition.string.end.json' 339 | 'name': 'string.quoted.double.json' 340 | 'patterns': [ 341 | { 342 | 'begin': ':' 343 | 'beginCaptures': 344 | '0': 345 | 'name': 'punctuation.separator.dictionary.key-value.json' 346 | 'end': '(?=,)|(?=\\})' 347 | 'endCaptures': 348 | '0': 349 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 350 | 'name': 'string.quoted.double.json' 351 | 'patterns': [ 352 | { 'include': '#action' } 353 | { 'include': '#action_array' } 354 | { 355 | 'match': '[^\\s\\n]' 356 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 357 | } 358 | ] 359 | } 360 | ] 361 | 'action_array': 362 | 'begin': '\\[' 363 | 'beginCaptures': 364 | '0': 365 | 'name': 'punctuation.definition.array.begin.json' 366 | 'end': '(,?)[\\s\\n]*(\\])' 367 | 'endCaptures': 368 | '1': 369 | 'name': 'invalid.illegal.trailing-array-separator.json' 370 | '2': 371 | 'name': 'punctuation.definition.array.end.json' 372 | 'name': 'meta.structure.array.json' 373 | 'patterns': [ 374 | { 375 | 'include': '#action' 376 | } 377 | { 378 | 'match': ',' 379 | 'name': 'punctuation.separator.array.json' 380 | } 381 | { 'include': '#error' } 382 | ] 383 | 'action': 384 | 'begin': '"' 385 | 'beginCaptures': 386 | '0': 387 | 'name': 'entity.other.attribute-name' 388 | 'end': '"' 389 | 'endCaptures': 390 | '0': 391 | 'name': 'entity.other.attribute-name' 392 | 'patterns': [ 393 | { 394 | 'match': '(?<=")(?i:{{SERVICE_LIST}})' 395 | 'name': 'entity.name.tag' 396 | } 397 | { 398 | 'match': '(?<=:)(?i:{{ACTION_LIST}})(?=")' 399 | 'name': 'entity.name.tag' 400 | } 401 | { 402 | 'match': ':' 403 | 'name': 'entity.other.attribute-name' 404 | } 405 | { 406 | 'match': '[a-zA-Z0-9\\*]*' 407 | 'name': 'entity.other.attribute-name' 408 | } 409 | { 'include': '#error' } 410 | ] 411 | 'resource_block': 412 | 'begin': '(?i:"resource"|"notresource")' 413 | 'beginCaptures': 414 | '0': 415 | 'name': 'punctuation.definition.string.begin.json' 416 | 'end': '(,)|(?=\\})' 417 | 'endCaptures': 418 | '0': 419 | 'name': 'punctuation.definition.string.end.json' 420 | 'name': 'string.quoted.double.json' 421 | 'patterns': [ 422 | { 423 | 'begin': ':' 424 | 'beginCaptures': 425 | '0': 426 | 'name': 'punctuation.separator.dictionary.key-value.json' 427 | 'end': '(?=,)|(?=\\})' 428 | 'endCaptures': 429 | '0': 430 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 431 | 'name': 'string.quoted.double.json' 432 | 'patterns': [ 433 | { 'include': '#arn' } 434 | { 'include': '#resource_array' } 435 | { 436 | 'match': '[^\\s\\n]' 437 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 438 | } 439 | ] 440 | } 441 | ] 442 | 'resource_array': 443 | 'begin': '\\[' 444 | 'beginCaptures': 445 | '0': 446 | 'name': 'punctuation.definition.array.begin.json' 447 | 'end': '(,?)[\\s\\n]*(\\])' 448 | 'endCaptures': 449 | '1': 450 | 'name': 'invalid.illegal.trailing-array-separator.json' 451 | '2': 452 | 'name': 'punctuation.definition.array.end.json' 453 | 'name': 'meta.structure.array.json' 454 | 'patterns': [ 455 | { 'include': '#arn' } 456 | { 457 | 'match': ',' 458 | 'name': 'punctuation.separator.array.json' 459 | } 460 | { 'include': '#error' } 461 | ] 462 | 'condition_block': 463 | 'begin': '(?i:"condition")' 464 | 'beginCaptures': 465 | '0': 466 | 'name': 'punctuation.definition.string.begin.json' 467 | 'end': '(,)|(?=\\})' 468 | 'endCaptures': 469 | '0': 470 | 'name': 'punctuation.definition.string.end.json' 471 | 'name': 'string.quoted.double.json' 472 | 'patterns': [ 473 | { 474 | 'begin': ':' 475 | 'beginCaptures': 476 | '0': 477 | 'name': 'punctuation.separator.dictionary.key-value.json' 478 | 'end': '(?=,)|(?=\\})' 479 | 'endCaptures': 480 | '0': 481 | 'name': 'invalid.illegal.traili ng-dictionary-separator.json' 482 | 'name': 'string.quoted.double.json' 483 | 'patterns': [ 484 | { 485 | 'include': '#condition_map' 486 | } 487 | { 488 | 'match': '[^\\s\\n]' 489 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 490 | } 491 | ] 492 | } 493 | ] 494 | 'condition_map': 495 | 'begin': '\\{' 496 | 'beginCaptures': 497 | '0': 498 | 'name': 'punctuation.definition.dictionary.begin.json' 499 | 'end': '\\}' 500 | 'endCaptures': 501 | '0': 502 | 'name': 'punctuation.definition.dictionary.end.json' 503 | 'name': 'meta.structure.dictionary.json' 504 | 'patterns': [ 505 | { 'include': '#condition_type_entry' } 506 | { 507 | 'match': '[^\\s\\n]' 508 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 509 | } 510 | ] 511 | 'condition_type_entry': 512 | 'begin': '(?i:"[a-zA-Z0-9]*")' 513 | 'beginCaptures': 514 | '0': 515 | 'name': 'punctuation.definition.string.begin.json' 516 | 'end': '(,)|(?=\\})' 517 | 'endCaptures': 518 | '0': 519 | 'name': 'punctuation.definition.string.end.json' 520 | 'name': 'string.quoted.double.json' 521 | 'patterns': [ 522 | { 523 | 'begin': ':' 524 | 'beginCaptures': 525 | '0': 526 | 'name': 'punctuation.separator.dictionary.key-value.json' 527 | 'end': '(?=,)|(?=\\})' 528 | 'endCaptures': 529 | '0': 530 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 531 | 'name': 'string.quoted.double.json' 532 | 'patterns': [ 533 | { 534 | 'include': '#condition_key_map' 535 | } 536 | ] 537 | } 538 | ] 539 | 'condition_key_map': 540 | 'begin': '\\{' 541 | 'beginCaptures': 542 | '0': 543 | 'name': 'punctuation.definition.dictionary.begin.json' 544 | 'end': '\\}' 545 | 'endCaptures': 546 | '0': 547 | 'name': 'punctuation.definition.dictionary.end.json' 548 | 'name': 'meta.structure.dictionary.json' 549 | 'patterns': [ 550 | { 551 | 'include': '#condition_key_entry' 552 | } 553 | { 554 | 'match': '[^\\s\\n]' 555 | 'name': 'invalid.illegal.unrecognized-string-escape.json' 556 | } 557 | ] 558 | 'condition_key_entry': 559 | 'begin': '(?i:"[a-zA-Z0-9:]*")' 560 | 'beginCaptures': 561 | '0': 562 | 'name': 'punctuation.definition.string.begin.json' 563 | 'end': '(,)|(?=\\})' 564 | 'endCaptures': 565 | '0': 566 | 'name': 'punctuation.definition.string.end.json' 567 | 568 | 'patterns': [ 569 | { 570 | 'begin': ':' 571 | 'beginCaptures': 572 | '0': 573 | 'name': 'punctuation.separator.dictionary.key-value.json' 574 | 'end': '(?=,)|(?=\\})' 575 | 'endCaptures': 576 | '0': 577 | 'name': 'invalid.illegal.trailing-dictionary-separator.json' 578 | 'name': 'string.quoted.double.json' 579 | 'patterns': [ 580 | { 581 | 'include': '#condition' 582 | } 583 | { 584 | 'include': '#condition_array' 585 | } 586 | ] 587 | } 588 | ] 589 | 'condition_array': 590 | 'begin': '\\[' 591 | 'beginCaptures': 592 | '0': 593 | 'name': 'punctuation.definition.array.begin.json' 594 | 'end': '(,?)[\\s\\n]*(\\])' 595 | 'endCaptures': 596 | '1': 597 | 'name': 'invalid.illegal.trailing-array-separator.json' 598 | '2': 599 | 'name': 'punctuation.definition.array.end.json' 600 | 'name': 'meta.structure.array.json' 601 | 'patterns': [ 602 | { 603 | 'include': '#condition' 604 | } 605 | { 606 | 'match': ',' 607 | 'name': 'punctuation.separator.array.json' 608 | } 609 | { 'include': '#error' } 610 | ] 611 | 'condition': 612 | 'match': '"[^"]*"' 613 | 'name': 'entity.other.attribute-name' 614 | 'arn': 615 | 'match': '"[^"]*"' 616 | 'name': 'entity.other.attribute-name' 617 | 'error': 618 | 'match': '[^\\s\\]]' 619 | 'name': 'invalid.illegal.expected-array-separator.json' 620 | -------------------------------------------------------------------------------- /lib/snippets.cson: -------------------------------------------------------------------------------- 1 | '.policy.json': 2 | 3 | 'Id': 4 | 'prefix': 'Id' 5 | 'body': '"Id" : "StatementId"' 6 | 7 | 'Version': 8 | 'prefix': 'Version' 9 | 'body': '"Version" : "2012-10-17"' 10 | 11 | 'Statement': 12 | 'prefix': 'Statement' 13 | 'body': """ 14 | "Statement" : [ 15 | { 16 | "Effect": "Allow", 17 | "Action": [ 18 | "${1:ec2:...}" 19 | ], 20 | "Resource": "${2:arn:...}", 21 | "Condition": {$3} 22 | } 23 | ] 24 | """ 25 | 26 | 'IP Condition': 27 | 'prefix': 'IpAddress' 28 | 'body': """ 29 | "IpAddress": { 30 | "aws:SourceIp": [ 31 | "${1:1.2.3.4/25}" 32 | ] 33 | } 34 | """ 35 | 36 | 'IP Condition If Exists': 37 | 'prefix': 'IpAddressIfExists' 38 | 'body': """ 39 | "IpAddressIfExists": { 40 | "aws:SourceIp": [ 41 | "${1:1.2.3.4/25}" 42 | ] 43 | } 44 | """ 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iam-syntax", 3 | "author": "Rob Witoff ", 4 | "version": "0.1.5", 5 | "description": "Syntax Highlighting for IAM Policies", 6 | "repository": "git@github.com:witoff/atom-iam-syntax.git", 7 | "keywords": [ 8 | "aws", 9 | "iam", 10 | "policy", 11 | "grammar", 12 | "syntax" 13 | ], 14 | "license": "TBD", 15 | "engines": { 16 | "atom": ">=1.0.0 <2.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /policy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/witoff/atom-iam-syntax/e042b7a4bfb5bda699f5607492c7c9fcbdd16505/policy.gif -------------------------------------------------------------------------------- /settings/language-policy.cson: -------------------------------------------------------------------------------- 1 | '.policy.json' 2 | -------------------------------------------------------------------------------- /spec/policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Id" : "StatementId", 3 | "Version" : "2012-10-17", 4 | "Statement" : [ 5 | { 6 | "Effect": "Allow", 7 | "Action": [ 8 | "ec2:RunInstances", 9 | "xray:BatchGetTraces", 10 | "xray:GetServiceGraph", 11 | "xray:GetTraceGraph", 12 | "xray:GetTraceSummaries", 13 | "xray:PutTelemetryRecords", 14 | "xray:PutTraceSegments", 15 | ], 16 | "Resource": "*", 17 | "Condition": { 18 | "IpAddress": { 19 | "aws:SourceIp": [ 20 | "1.2.3.4/25" 21 | ] 22 | } 23 | } 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /spec/reference.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Effect": "Allow", 6 | "Action": [ 7 | "test:test", 8 | "*", 9 | "s3:*" 10 | "s3:ListBucket", 11 | "s3:ListBucketMultipartUploads", 12 | "s3:PutObject", 13 | "s3:PutObjectAcl", 14 | "s3:PutObjectAclVersion", 15 | ], 16 | "Resource": "arn:aws:s3:::app-my-bucket/*", 17 | "Principal": { 18 | "aws" : "1234567890" 19 | }, 20 | "Condition": { 21 | "StringEqualsifExists": { 22 | "aws:sourceVpce": [ 23 | "vpce-12345678" 24 | ] 25 | }, 26 | "IpAddressIfExists": { 27 | "aws:SourceIp": [ 28 | "1.2.3.4/25" 29 | ] 30 | } 31 | } 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /spec/reference.policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Effect": "Allow", 6 | "Action": [ 7 | "test:test", 8 | "*", 9 | "s3:*" 10 | "s3:ListBucket", 11 | "s3:ListBucketMultipartUploads", 12 | "s3:PutObject", 13 | "s3:PutObjectAcl", 14 | "s3:PutObjectAclVersion", 15 | ], 16 | "Resource": "arn:aws:s3:::app-my-bucket/*", 17 | "Principal": { 18 | "aws" : "1234567890" 19 | }, 20 | "Condition": { 21 | "StringEqualsifExists": { 22 | "aws:sourceVpce": [ 23 | "vpce-12345678" 24 | ] 25 | }, 26 | "IpAddressIfExists": { 27 | "aws:SourceIp": [ 28 | "1.2.3.4/25" 29 | ] 30 | } 31 | } 32 | } 33 | ] 34 | } 35 | --------------------------------------------------------------------------------