@kensio/yulin 1.20.16 → 1.20.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/dist/service/aws/caller/sim-aws-ambient-caller.d.ts +23 -0
  2. package/dist/service/aws/caller/sim-aws-ambient-caller.js +12 -0
  3. package/dist/service/aws/caller/sim-aws-caller-resolver.d.ts +17 -6
  4. package/dist/service/aws/caller/sim-aws-caller-resolver.js +21 -26
  5. package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +6 -0
  6. package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +3 -0
  7. package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts +6 -0
  8. package/dist/service/aws/factory/sim-aws-account-service-cache.js +5 -1
  9. package/dist/service/aws/factory/sim-aws-registered-service-builder.js +3 -1
  10. package/dist/service/aws/factory/sim-aws-service-factory.js +9 -1
  11. package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts +4 -0
  12. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +4 -1
  13. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-deployer.js +2 -1
  14. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.d.ts +11 -2
  15. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.js +2 -1
  16. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts +6 -0
  17. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +11 -0
  18. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js +17 -15
  19. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts +12 -0
  20. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.js +2 -1
  21. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.d.ts +23 -0
  22. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.js +30 -0
  23. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cfn-value-adapter.js +8 -0
  24. package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.d.ts +29 -12
  25. package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.js +51 -20
  26. package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.d.ts +19 -0
  27. package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.js +6 -0
  28. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.d.ts +7 -0
  29. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.js +9 -2
  30. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.d.ts +2 -0
  31. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.js +2 -1
  32. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +6 -0
  33. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +4 -1
  34. package/dist/service/cloudformation/stack/sim-cfn-stack.js +2 -1
  35. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +6 -0
  36. package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts +5 -0
  37. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.d.ts +37 -0
  38. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.js +50 -0
  39. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.d.ts +25 -0
  40. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.js +21 -0
  41. package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.d.ts +28 -0
  42. package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.js +48 -0
  43. package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.d.ts +8 -0
  44. package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.js +13 -0
  45. package/dist/service/cloudfront/cff/sim-cf-function-commands.d.ts +52 -0
  46. package/dist/service/cloudfront/cff/sim-cf-function-commands.js +51 -0
  47. package/dist/service/cloudfront/cff/sim-cff-configuration.d.ts +41 -0
  48. package/dist/service/cloudfront/cff/sim-cff-configuration.js +34 -0
  49. package/dist/service/cloudfront/cff/sim-cff-stage.d.ts +23 -0
  50. package/dist/service/cloudfront/cff/sim-cff-stage.js +30 -0
  51. package/dist/service/cloudfront/cff/sim-cloudfront-function.d.ts +6 -1
  52. package/dist/service/cloudfront/cff/sim-cloudfront-function.js +6 -0
  53. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.d.ts +27 -0
  54. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.js +42 -0
  55. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.d.ts +24 -0
  56. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.js +32 -0
  57. package/dist/service/cloudfront/cfn/distro/{sim-cfn-cf-distro-response-headers-policy.d.ts → sim-cfn-cf-distro-behavior-policies.d.ts} +8 -7
  58. package/dist/service/cloudfront/cfn/distro/{sim-cfn-cf-distro-response-headers-policy.js → sim-cfn-cf-distro-behavior-policies.js} +11 -37
  59. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts +6 -5
  60. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js +8 -7
  61. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.d.ts +23 -0
  62. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.js +50 -0
  63. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.d.ts +1 -0
  64. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js +10 -0
  65. package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +1 -0
  66. package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts +2 -0
  67. package/dist/service/cloudfront/command/create-function/create-function.handler.js +7 -1
  68. package/dist/service/cloudfront/command/function/sim-cf-describe-function.d.ts +22 -0
  69. package/dist/service/cloudfront/command/function/sim-cf-describe-function.js +32 -0
  70. package/dist/service/cloudfront/command/function/sim-cf-function-access.d.ts +48 -0
  71. package/dist/service/cloudfront/command/function/sim-cf-function-access.js +48 -0
  72. package/dist/service/cloudfront/command/function/sim-cf-function-command.types.d.ts +97 -0
  73. package/dist/service/cloudfront/command/function/sim-cf-function-command.types.js +10 -0
  74. package/dist/service/cloudfront/command/function/sim-cf-function-lookup.d.ts +12 -0
  75. package/dist/service/cloudfront/command/function/sim-cf-function-lookup.js +21 -0
  76. package/dist/service/cloudfront/command/function/sim-cf-function-summary.d.ts +11 -0
  77. package/dist/service/cloudfront/command/function/sim-cf-function-summary.js +30 -0
  78. package/dist/service/cloudfront/command/function/sim-cf-get-function.d.ts +23 -0
  79. package/dist/service/cloudfront/command/function/sim-cf-get-function.js +33 -0
  80. package/dist/service/cloudfront/command/function/sim-cf-list-functions.d.ts +22 -0
  81. package/dist/service/cloudfront/command/function/sim-cf-list-functions.js +38 -0
  82. package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts +2 -0
  83. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.d.ts +18 -0
  84. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.js +30 -0
  85. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.d.ts +28 -0
  86. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.js +41 -0
  87. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.d.ts +2 -2
  88. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js +6 -3
  89. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.d.ts +0 -10
  90. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.js +0 -19
  91. package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.d.ts +2 -0
  92. package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.js +4 -2
  93. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.d.ts +3 -3
  94. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.js +5 -5
  95. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.d.ts +3 -3
  96. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.js +4 -4
  97. package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts +3 -1
  98. package/dist/service/cloudfront/distribution/sim-cf-distribution-reconfigurer.d.ts +2 -0
  99. package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts +21 -0
  100. package/dist/service/cloudfront/error/sim-cloudfront.error.js +25 -0
  101. package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store-access.js +2 -10
  102. package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store.js +2 -1
  103. package/dist/service/cloudfront/sdk/sim-cloudfront-sdk-command-router.js +12 -0
  104. package/dist/service/cloudfront/sim-cf-authorize.d.ts +16 -0
  105. package/dist/service/cloudfront/sim-cf-authorize.js +19 -0
  106. package/dist/service/cloudfront/sim-cf-etag.d.ts +7 -0
  107. package/dist/service/cloudfront/sim-cf-etag.js +10 -0
  108. package/dist/service/cloudfront/sim-cloudfront-commands.d.ts +8 -12
  109. package/dist/service/cloudfront/sim-cloudfront-commands.js +8 -17
  110. package/dist/service/cloudfront/sim-cloudfront-policies.d.ts +43 -0
  111. package/dist/service/cloudfront/sim-cloudfront-policies.js +53 -0
  112. package/dist/service/cloudfront/sim-cloudfront.d.ts +13 -17
  113. package/dist/service/cloudfront/sim-cloudfront.js +22 -25
  114. package/dist/service/ecr/authorize/sim-ecr-authorizer.d.ts +31 -0
  115. package/dist/service/ecr/authorize/sim-ecr-authorizer.js +38 -0
  116. package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.d.ts +11 -2
  117. package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.js +11 -2
  118. package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.d.ts +4 -2
  119. package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.js +8 -9
  120. package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.d.ts +7 -0
  121. package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.js +9 -0
  122. package/dist/service/ecr/sim-ecr.d.ts +7 -0
  123. package/dist/service/ecr/sim-ecr.js +16 -4
  124. package/dist/service/ecs/command/authorize/sim-ecs-authorizer.d.ts +12 -0
  125. package/dist/service/ecs/command/authorize/sim-ecs-authorizer.js +21 -0
  126. package/dist/service/ecs/command/register-task-definition/register-task-definition.handler.js +1 -0
  127. package/dist/service/ecs/sim-ecs-service-principal.d.ts +8 -0
  128. package/dist/service/ecs/sim-ecs-service-principal.js +8 -0
  129. package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.d.ts +12 -0
  130. package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.js +21 -0
  131. package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.d.ts +13 -0
  132. package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.js +9 -0
  133. package/dist/service/eventbridge/command/target/sim-event-bridge-put-targets.js +1 -0
  134. package/dist/service/firehose/command/authorize/sim-firehose-authorizer.d.ts +12 -0
  135. package/dist/service/firehose/command/authorize/sim-firehose-authorizer.js +20 -0
  136. package/dist/service/firehose/command/sim-firehose-delivery-stream-access.d.ts +4 -0
  137. package/dist/service/firehose/command/sim-firehose-delivery-stream-access.js +6 -0
  138. package/dist/service/firehose/command/stream/sim-firehose-create-delivery-stream.js +3 -1
  139. package/dist/service/firehose/sim-firehose-service-principal.d.ts +8 -0
  140. package/dist/service/firehose/sim-firehose-service-principal.js +8 -0
  141. package/dist/service/firehose/source/sim-firehose-source.d.ts +5 -0
  142. package/dist/service/firehose/source/sim-firehose-source.js +5 -0
  143. package/dist/service/glue/cfn/database/sim-cfn-glue-database-properties.js +2 -2
  144. package/dist/service/glue/cfn/sim-cfn-glue-generated-name.d.ts +10 -0
  145. package/dist/service/glue/cfn/sim-cfn-glue-generated-name.js +25 -0
  146. package/dist/service/glue/cfn/table/sim-cfn-glue-table-properties.js +2 -3
  147. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts +33 -2
  148. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js +33 -2
  149. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.d.ts +4 -3
  150. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.js +9 -3
  151. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.d.ts +14 -5
  152. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.js +16 -12
  153. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.d.ts +9 -3
  154. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.js +5 -3
  155. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts +9 -71
  156. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js +2 -1
  157. package/dist/service/iam/authorize/context/sim-iam-auth-z-input.d.ts +87 -0
  158. package/dist/service/iam/authorize/context/sim-iam-auth-z-input.js +1 -0
  159. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts +11 -3
  160. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js +20 -8
  161. package/dist/service/iam/authorize/match/sim-iam-principal-match.d.ts +29 -8
  162. package/dist/service/iam/authorize/match/sim-iam-principal-match.js +38 -13
  163. package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.d.ts +74 -0
  164. package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.js +92 -0
  165. package/dist/service/iam/authorize/sim-iam-account-auth-z.d.ts +14 -5
  166. package/dist/service/iam/authorize/sim-iam-account-auth-z.js +6 -4
  167. package/dist/service/iam/authorize/sim-iam-authorizer.d.ts +3 -1
  168. package/dist/service/iam/authorize/sim-iam-authorizer.js +2 -1
  169. package/dist/service/iam/authorize/sim-iam-inter-service-auth-z.d.ts +1 -1
  170. package/dist/service/iam/authorize/sim-iam-wildcard.js +39 -4
  171. package/dist/service/iam/cfn/managed-policy/sim-cfn-iam-managed-policy-creator.js +2 -1
  172. package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.d.ts +16 -0
  173. package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.js +36 -0
  174. package/dist/service/iam/cfn/role/sim-cfn-iam-role-properties-parser.js +9 -8
  175. package/dist/service/iam/cfn/sim-cfn-iam-optional-string.d.ts +17 -0
  176. package/dist/service/iam/cfn/sim-cfn-iam-optional-string.js +17 -0
  177. package/dist/service/iam/cfn/user/sim-cfn-iam-user-properties-parser.js +4 -8
  178. package/dist/service/iam/command/policy/create-policy/create-policy-input-resolver.js +2 -0
  179. package/dist/service/iam/command/policy/put-role-policy/put-role-policy.handler.js +5 -0
  180. package/dist/service/iam/command/policy/put-user-policy/put-user-policy.handler.js +5 -0
  181. package/dist/service/iam/command/role/create-role/create-role.handler.js +4 -1
  182. package/dist/service/iam/error/sim-iam.error.d.ts +11 -0
  183. package/dist/service/iam/error/sim-iam.error.js +13 -0
  184. package/dist/service/iam/index.d.ts +1 -0
  185. package/dist/service/iam/policy/sim-iam-policy-document-of-size.d.ts +18 -0
  186. package/dist/service/iam/policy/sim-iam-policy-document-of-size.js +41 -0
  187. package/dist/service/iam/role/sim-iam-deploy-role.d.ts +56 -0
  188. package/dist/service/iam/role/sim-iam-deploy-role.js +50 -0
  189. package/dist/service/iam/role/sim-iam-role-with-policy.factory.d.ts +3 -1
  190. package/dist/service/iam/sim-iam-account-parts.d.ts +8 -0
  191. package/dist/service/iam/sim-iam-account-parts.js +1 -0
  192. package/dist/service/iam/sim-iam.d.ts +12 -2
  193. package/dist/service/iam/sim-iam.js +12 -0
  194. package/dist/service/iam/validate/size/sim-iam-policy-document-size.d.ts +57 -0
  195. package/dist/service/iam/validate/size/sim-iam-policy-document-size.js +71 -0
  196. package/dist/service/kms/command/authorize/sim-kms-authorizer.d.ts +3 -1
  197. package/dist/service/kms/command/authorize/sim-kms-authorizer.js +4 -1
  198. package/dist/service/kms/command/sim-kms-request-options.d.ts +11 -0
  199. package/dist/service/kms/key/sim-kms-key-policy.d.ts +5 -4
  200. package/dist/service/kms/key/sim-kms-key-policy.js +4 -3
  201. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.d.ts +2 -2
  202. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.js +4 -3
  203. package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.d.ts +10 -0
  204. package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.js +25 -0
  205. package/dist/service/lambda/command/authorize/sim-lambda-resource-policies.d.ts +1 -1
  206. package/dist/service/lambda/command/create-function/create-function-authorizer.d.ts +9 -2
  207. package/dist/service/lambda/command/create-function/create-function-authorizer.js +16 -2
  208. package/dist/service/lambda/command/create-function/create-function.handler.js +1 -1
  209. package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.d.ts +7 -2
  210. package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.js +14 -2
  211. package/dist/service/lambda/command/update-function-configuration/update-function-configuration.handler.js +1 -1
  212. package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +10 -1
  213. package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +25 -1
  214. package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.d.ts +13 -0
  215. package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.js +18 -0
  216. package/dist/service/lambda/sim-lambda-service-principal.d.ts +7 -0
  217. package/dist/service/lambda/sim-lambda-service-principal.js +7 -0
  218. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.d.ts +46 -0
  219. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.js +49 -0
  220. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.d.ts +5 -0
  221. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.js +6 -0
  222. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.d.ts +5 -0
  223. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.js +6 -0
  224. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.d.ts +5 -0
  225. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.js +6 -0
  226. package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.d.ts +9 -2
  227. package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.js +34 -5
  228. package/dist/service/logs/cfn/sim-logs-cfn-resource-deleter.js +1 -1
  229. package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.d.ts +4 -0
  230. package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.js +9 -4
  231. package/dist/service/logs/sim-logs-commands.d.ts +3 -0
  232. package/dist/service/logs/sim-logs-commands.js +4 -0
  233. package/dist/service/logs/sim-logs.js +6 -1
  234. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.d.ts +2 -2
  235. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.js +4 -3
  236. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.d.ts +12 -0
  237. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.js +22 -0
  238. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.d.ts +1 -1
  239. package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.d.ts +10 -1
  240. package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.js +19 -1
  241. package/dist/service/scheduler/command/schedule/sim-scheduler-create-schedule.js +1 -0
  242. package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.d.ts +8 -0
  243. package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.js +9 -0
  244. package/dist/service/scheduler/command/schedule/sim-scheduler-update-schedule.js +1 -0
  245. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.d.ts +15 -0
  246. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.js +22 -0
  247. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.d.ts +4 -10
  248. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.js +13 -31
  249. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.d.ts +17 -0
  250. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.js +30 -0
  251. package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.d.ts +6 -0
  252. package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.js +8 -3
  253. package/dist/service/sns/command/authorize/sim-sns-topic-resource-policies.d.ts +1 -1
  254. package/dist/service/sqs/command/authorize/sim-sqs-queue-resource-policies.d.ts +1 -1
  255. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.d.ts +16 -0
  256. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.js +23 -0
  257. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.d.ts +2 -4
  258. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.js +5 -5
  259. package/dist/service/ssm/parameter/sim-ssm-kms-crypto.d.ts +6 -4
  260. package/dist/service/ssm/parameter/sim-ssm-kms-crypto.js +4 -4
  261. package/dist/service/ssm/parameter/sim-ssm-parameter-arn.d.ts +17 -0
  262. package/dist/service/ssm/parameter/sim-ssm-parameter-arn.js +20 -0
  263. package/dist/service/ssm/parameter/sim-ssm-parameter-kms.d.ts +15 -9
  264. package/dist/service/ssm/parameter/sim-ssm-parameter-kms.js +20 -10
  265. package/dist/service/ssm/parameter/sim-ssm-parameter-name.js +3 -12
  266. package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.d.ts +41 -0
  267. package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.js +64 -0
  268. package/dist/service/stepfunctions/command/machine/sim-state-machine-create.d.ts +5 -2
  269. package/dist/service/stepfunctions/command/machine/sim-state-machine-create.js +6 -2
  270. package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.d.ts +26 -0
  271. package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.js +29 -0
  272. package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.d.ts +7 -0
  273. package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.js +12 -3
  274. package/dist/service/stepfunctions/command/machine/sim-state-machine-update.d.ts +19 -0
  275. package/dist/service/stepfunctions/command/machine/{sim-state-machine-writes.js → sim-state-machine-update.js} +3 -14
  276. package/dist/service/stepfunctions/sim-step-functions.d.ts +8 -2
  277. package/dist/service/stepfunctions/sim-step-functions.js +26 -9
  278. package/dist/service/sts/command/assume-role/assume-role.handler.d.ts +5 -0
  279. package/dist/service/sts/command/assume-role/assume-role.handler.js +1 -0
  280. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.d.ts +5 -0
  281. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.js +1 -0
  282. package/dist/service/sts/sim-sts.d.ts +9 -0
  283. package/dist/service/sts/sim-sts.js +4 -0
  284. package/dist/util/memo/bounded-memo.d.ts +36 -0
  285. package/dist/util/memo/bounded-memo.js +58 -0
  286. package/docs/sdk/README.md +3 -1
  287. package/docs/services/cloudformation/README.md +196 -11
  288. package/docs/services/cloudfront/README.md +230 -6
  289. package/docs/services/cloudwatch/README.md +6 -4
  290. package/docs/services/cognito/README.md +8 -7
  291. package/docs/services/dynamodb/README.md +6 -5
  292. package/docs/services/ecs/README.md +20 -9
  293. package/docs/services/elbv2/README.md +6 -2
  294. package/docs/services/eventbridge/README.md +9 -1
  295. package/docs/services/firehose/README.md +9 -3
  296. package/docs/services/glue/README.md +6 -0
  297. package/docs/services/iam/README.md +322 -27
  298. package/docs/services/kinesis/README.md +3 -2
  299. package/docs/services/kms/README.md +7 -2
  300. package/docs/services/lambda/README.md +76 -2
  301. package/docs/services/logs/README.md +16 -2
  302. package/docs/services/s3/README.md +7 -2
  303. package/docs/services/scheduler/README.md +12 -4
  304. package/docs/services/secretsmanager/README.md +6 -3
  305. package/docs/services/ses/README.md +3 -1
  306. package/docs/services/sns/README.md +5 -5
  307. package/docs/services/sqs/README.md +5 -5
  308. package/docs/services/ssm/README.md +40 -16
  309. package/docs/services/stepfunctions/README.md +11 -2
  310. package/docs/services/wafv2/README.md +5 -3
  311. package/package.json +1 -1
  312. package/dist/service/stepfunctions/command/machine/sim-state-machine-writes.d.ts +0 -25
@@ -0,0 +1,41 @@
1
+ import { jsonStringify } from "../../../util/type-guard/json.js";
2
+ /**
3
+ * Build a policy document IAM would measure at exactly this many characters.
4
+ *
5
+ * A test about IAM's character limits has a size to state rather than a
6
+ * statement. Padding an ARN leaves a document IAM would otherwise take, so the
7
+ * size is the only thing the command is being asked about. The size is the one
8
+ * IAM counts, of the document written compactly, and a caller is free to
9
+ * indent what it hands over.
10
+ */
11
+ export function simIamPolicyDocumentOfSize(characters) {
12
+ return padded(characters, (padding) => ({
13
+ Version: "2012-10-17",
14
+ Statement: {
15
+ Effect: "Allow",
16
+ Action: "s3:GetObject",
17
+ Resource: `arn:aws:s3:::reports-bucket/${padding}`,
18
+ },
19
+ }));
20
+ }
21
+ /**
22
+ * Build a Role trust policy document of exactly this many characters.
23
+ *
24
+ * A trust policy carries a Principal and no Resource, so it is padded through
25
+ * a Sid instead.
26
+ */
27
+ export function simIamTrustPolicyDocumentOfSize(characters) {
28
+ return padded(characters, (padding) => ({
29
+ Version: "2012-10-17",
30
+ Statement: {
31
+ Sid: padding,
32
+ Effect: "Allow",
33
+ Principal: { Service: "lambda.amazonaws.com" },
34
+ Action: "sts:AssumeRole",
35
+ },
36
+ }));
37
+ }
38
+ function padded(characters, make) {
39
+ const unpadded = jsonStringify(make("")).length;
40
+ return make("x".repeat(characters - unpadded));
41
+ }
@@ -0,0 +1,56 @@
1
+ import type { SimArnPrincipal } from "../../aws/caller/sim-aws-caller.js";
2
+ import type { SimPutRolePolicyCommand, SimPutRolePolicyCommandOutput } from "../command/policy/put-role-policy/put-role-policy.command.js";
3
+ import type { SimCreateRoleCommand, SimCreateRoleCommandOutput } from "../command/role/create-role/create-role.command.js";
4
+ import type { SimIamPolicyDocument } from "../policy/sim-iam-policy.js";
5
+ /**
6
+ * A permissions policy for a deploy Role.
7
+ *
8
+ * The parsed document a CDK app answers with, or the JSON string a template,
9
+ * a file or the SDK carries it as.
10
+ */
11
+ export type SimIamDeployRolePolicy = SimIamPolicyDocument | string;
12
+ /**
13
+ * What making a Role for a deployment to run as takes.
14
+ */
15
+ export interface SimIamDeployRoleInput {
16
+ /**
17
+ * The name to create the Role under.
18
+ */
19
+ readonly roleName: string;
20
+ /**
21
+ * What the deployment is allowed to do.
22
+ *
23
+ * Several documents go on the Role as several inline policies. A policy
24
+ * split in two to stay under IAM's size cap is passed on whole.
25
+ */
26
+ readonly policyDocument: SimIamDeployRolePolicy | readonly SimIamDeployRolePolicy[];
27
+ }
28
+ /**
29
+ * The IAM commands making a deploy Role takes.
30
+ */
31
+ interface SimIamDeployRoleCommands {
32
+ createRole(command: SimCreateRoleCommand): Promise<SimCreateRoleCommandOutput>;
33
+ putRolePolicy(command: SimPutRolePolicyCommand): Promise<SimPutRolePolicyCommandOutput>;
34
+ }
35
+ /**
36
+ * Makes the Role a simulated CloudFormation deployment runs as.
37
+ *
38
+ * A project that scopes its own deploy permissions has the policy document
39
+ * already and wants a caller to pass to `deployTemplate`, `deployTemplateFile`
40
+ * or `deployCdkOut`. Getting from one to the other is a Role with the trust
41
+ * CloudFormation needs, the document on it, and the Role's ARN. The trust is
42
+ * the same every time and the ARN follows from the name. Neither is asked for.
43
+ */
44
+ export declare class SimIamDeployRoleMaker {
45
+ private readonly commands;
46
+ constructor(commands: SimIamDeployRoleCommands);
47
+ /**
48
+ * Create the Role and answer with the caller a deployment names it by.
49
+ *
50
+ * Each document goes on as an inline policy of its own, under a numbered
51
+ * name. A policy split in two to fit IAM's cap has no second name of its
52
+ * own.
53
+ */
54
+ make(input: SimIamDeployRoleInput): Promise<SimArnPrincipal>;
55
+ }
56
+ export {};
@@ -0,0 +1,50 @@
1
+ import { jsonStringify } from "../../../util/type-guard/json.js";
2
+ /**
3
+ * The trust a Role needs for CloudFormation to deploy as it.
4
+ */
5
+ const deploymentTrustPolicy = jsonStringify({
6
+ Version: "2012-10-17",
7
+ Statement: {
8
+ Effect: "Allow",
9
+ Principal: { Service: "cloudformation.amazonaws.com" },
10
+ Action: "sts:AssumeRole",
11
+ },
12
+ });
13
+ /**
14
+ * Makes the Role a simulated CloudFormation deployment runs as.
15
+ *
16
+ * A project that scopes its own deploy permissions has the policy document
17
+ * already and wants a caller to pass to `deployTemplate`, `deployTemplateFile`
18
+ * or `deployCdkOut`. Getting from one to the other is a Role with the trust
19
+ * CloudFormation needs, the document on it, and the Role's ARN. The trust is
20
+ * the same every time and the ARN follows from the name. Neither is asked for.
21
+ */
22
+ export class SimIamDeployRoleMaker {
23
+ commands;
24
+ constructor(commands) {
25
+ this.commands = commands;
26
+ }
27
+ /**
28
+ * Create the Role and answer with the caller a deployment names it by.
29
+ *
30
+ * Each document goes on as an inline policy of its own, under a numbered
31
+ * name. A policy split in two to fit IAM's cap has no second name of its
32
+ * own.
33
+ */
34
+ async make(input) {
35
+ const creation = await this.commands.createRole({
36
+ input: {
37
+ RoleName: input.roleName,
38
+ AssumeRolePolicyDocument: deploymentTrustPolicy,
39
+ },
40
+ });
41
+ await Promise.all([input.policyDocument].flat().map((document, index) => this.commands.putRolePolicy({
42
+ input: {
43
+ RoleName: input.roleName,
44
+ PolicyName: `${input.roleName}-policy-${index + 1}`,
45
+ PolicyDocument: typeof document === "string" ? document : jsonStringify(document),
46
+ },
47
+ })));
48
+ return { kind: "arn", arn: creation.Role.Arn };
49
+ }
50
+ }
@@ -19,7 +19,9 @@ export interface SimIamRoleWithPolicyInput {
19
19
  *
20
20
  * A simulation given a default caller attributes these two commands to it,
21
21
  * and a Role being created for that caller has no policies to allow them
22
- * yet. Naming the Account root here is how such a test bootstraps.
22
+ * yet. Naming the Account root here is one way for such a test to bootstrap.
23
+ * Calling inside `simAws.runAs(simAws.account().rootPrincipal, ...)` is the
24
+ * other, and covers everything else the block does as well.
23
25
  */
24
26
  readonly caller?: SimAwsCaller | undefined;
25
27
  }
@@ -2,6 +2,7 @@ import { type BackgroundScheduler } from "../../util/background/background.js";
2
2
  import type { SimAwsAccountId } from "../aws/sim-aws-account.js";
3
3
  import type { SimAwsAccountRegionScope } from "../aws/sim-aws-account-region-scope.js";
4
4
  import type { SimAwsDefaultCaller } from "../aws/caller/sim-aws-caller.js";
5
+ import type { SimAwsAmbientCaller } from "../aws/caller/sim-aws-ambient-caller.js";
5
6
  import { SimIamAccountAuthZ } from "./authorize/sim-iam-account-auth-z.js";
6
7
  import type { SimIamInterServiceAuthZ } from "./authorize/sim-iam-inter-service-auth-z.js";
7
8
  import { SimIamCommandHandlers } from "./command/sim-iam-command-handlers.js";
@@ -27,6 +28,13 @@ export interface SimIamProperties {
27
28
  * decided as the Account root, which is what a standalone SimIam does.
28
29
  */
29
30
  readonly defaultCaller?: SimAwsDefaultCaller | undefined;
31
+ /**
32
+ * Where a request naming no caller looks before the default.
33
+ *
34
+ * A SimAws passes on the run-as block it is inside, if any. A standalone
35
+ * SimIam has no run-as around it and leaves this out.
36
+ */
37
+ readonly ambientCaller?: SimAwsAmbientCaller | undefined;
30
38
  /**
31
39
  * Resolves the IAM of other Accounts in the same simulation.
32
40
  *
@@ -48,6 +48,7 @@ export class SimIamAccountParts {
48
48
  users: this.users,
49
49
  credentialIdentityResolver: credentialRegistry,
50
50
  defaultCaller: properties.defaultCaller,
51
+ ambientCaller: properties.ambientCaller,
51
52
  iamResolver: properties.iamResolver,
52
53
  scpResolver: properties.scpResolver,
53
54
  });
@@ -3,7 +3,7 @@ import type { SimAwsAccountId } from "../aws/sim-aws-account.js";
3
3
  import type { SimIamManagedPolicy } from "./policy/sim-iam-policy.js";
4
4
  import type { SimIamRole, SimIamRoleName } from "./role/sim-iam-role.js";
5
5
  import type { SimIamUser, SimIamUsername } from "./user/sim-iam-user.js";
6
- import type { SimIamAuthorizationInput } from "./authorize/context/sim-iam-auth-z-context-builder.js";
6
+ import type { SimIamAuthorizationInput } from "./authorize/context/sim-iam-auth-z-input.js";
7
7
  import type { SimIamPolicyDecision } from "./authorize/sim-iam-decision.js";
8
8
  import type * as simIamCommands from "./command/sim-iam-command.types.js";
9
9
  import type { SimIamRequestOptions } from "./command/sim-iam-request-options.js";
@@ -11,11 +11,12 @@ import type { SimCfnServiceResourceFactory } from "../cloudformation/resource/fa
11
11
  import type { SimIamInterServiceAuthZ } from "./authorize/sim-iam-inter-service-auth-z.js";
12
12
  import type { SimIamAccountIdentityPolicies } from "./authorize/identity/sim-iam-account-identity-policies.js";
13
13
  import type { SimIamAuthZPolicySource } from "./authorize/context/sim-iam-auth-z-context.js";
14
- import type { SimAwsPrincipal } from "../aws/caller/sim-aws-caller.js";
14
+ import type { SimArnPrincipal, SimAwsPrincipal } from "../aws/caller/sim-aws-caller.js";
15
15
  import type { SimSdkCommandRouter } from "../../sdk/index.js";
16
16
  import type { SimIamCredentialRegistry } from "./credential/sim-iam-credential-registry.js";
17
17
  import type { SimIamSessionManager } from "./credential/session/sim-iam-session-manager.js";
18
18
  import { type SimIamProperties } from "./sim-iam-account-parts.js";
19
+ import { type SimIamDeployRoleInput } from "./role/sim-iam-deploy-role.js";
19
20
  /**
20
21
  * Simulated IAM service facade. Handles SDK commands. Emulates AWS behaviour
21
22
  * and state.
@@ -52,6 +53,7 @@ export declare class SimIam implements SimIamInterServiceAuthZ, SimIamAccountIde
52
53
  private readonly commands;
53
54
  private readonly accountAuthZ;
54
55
  private readonly sdkRouter;
56
+ private readonly deployRoles;
55
57
  constructor(properties?: SimIamProperties);
56
58
  /**
57
59
  * Evaluate an IAM authorization attempt against policies relevant to the
@@ -140,6 +142,14 @@ export declare class SimIam implements SimIamInterServiceAuthZ, SimIamAccountIde
140
142
  * Handle an IAM CreateAccessKey command.
141
143
  */
142
144
  createAccessKey(command: simIamCommands.SimCreateAccessKeyCommand, options?: SimIamRequestOptions): Promise<simIamCommands.SimCreateAccessKeyCommandOutput>;
145
+ /**
146
+ * Make a Role for a CloudFormation deployment to run as.
147
+ *
148
+ * The Role is trusted by `cloudformation.amazonaws.com` and allowed what the
149
+ * policy documents allow. What comes back goes straight to `caller` on
150
+ * `deployTemplate`, `deployTemplateFile` or `deployCdkOut`.
151
+ */
152
+ makeDeployRole(input: SimIamDeployRoleInput): Promise<SimArnPrincipal>;
143
153
  /**
144
154
  * Get this service's CloudFormation Resource factory.
145
155
  */
@@ -1,6 +1,7 @@
1
1
  import { SimIamCloudFormationResourceFactory } from "./cfn/sim-cfn-iam-resource-factory.js";
2
2
  import { SimIamSdkCommandRouter } from "./sdk/sim-iam-sdk-command-router.js";
3
3
  import { SimIamAccountParts, } from "./sim-iam-account-parts.js";
4
+ import { SimIamDeployRoleMaker, } from "./role/sim-iam-deploy-role.js";
4
5
  /**
5
6
  * Simulated IAM service facade. Handles SDK commands. Emulates AWS behaviour
6
7
  * and state.
@@ -37,6 +38,7 @@ export class SimIam {
37
38
  commands;
38
39
  accountAuthZ;
39
40
  sdkRouter = new SimIamSdkCommandRouter(this);
41
+ deployRoles = new SimIamDeployRoleMaker(this);
40
42
  constructor(properties = {}) {
41
43
  const parts = new SimIamAccountParts(properties);
42
44
  this.accountId = parts.accountId;
@@ -176,6 +178,16 @@ export class SimIam {
176
178
  async createAccessKey(command, options) {
177
179
  return await this.commands.users.createAccessKey(command, options);
178
180
  }
181
+ /**
182
+ * Make a Role for a CloudFormation deployment to run as.
183
+ *
184
+ * The Role is trusted by `cloudformation.amazonaws.com` and allowed what the
185
+ * policy documents allow. What comes back goes straight to `caller` on
186
+ * `deployTemplate`, `deployTemplateFile` or `deployCdkOut`.
187
+ */
188
+ async makeDeployRole(input) {
189
+ return await this.deployRoles.make(input);
190
+ }
179
191
  /**
180
192
  * Get this service's CloudFormation Resource factory.
181
193
  */
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The longest managed policy document IAM will take.
3
+ *
4
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html
5
+ */
6
+ export declare const maxSimIamManagedPolicyCharacters = 6144;
7
+ /**
8
+ * The longest inline policy document IAM will take on a Role or a User.
9
+ */
10
+ export declare const maxSimIamInlinePolicyCharacters = 10240;
11
+ /**
12
+ * The longest trust policy document IAM will take on a Role.
13
+ *
14
+ * This one is adjustable, up to 8,192 characters. A simulation holds the
15
+ * default an account carries until it asks for more.
16
+ */
17
+ export declare const maxSimIamTrustPolicyCharacters = 2048;
18
+ /**
19
+ * The Role or the User an inline policy is being put onto.
20
+ */
21
+ export interface SimIamPolicyDocumentHolder {
22
+ /**
23
+ * What IAM calls the holder in the message, `role` or `user`.
24
+ */
25
+ readonly kind: "role" | "user";
26
+ /**
27
+ * The holder's name.
28
+ */
29
+ readonly name: string;
30
+ }
31
+ /**
32
+ * Measure a policy document the way IAM does, which leaves whitespace out.
33
+ *
34
+ * A document indented for a reader therefore counts the same as the one line
35
+ * `JSON.stringify` produces, and a template can be written either way.
36
+ */
37
+ export declare function simIamPolicyDocumentSize(policyDocument: string): number;
38
+ /**
39
+ * Refuse a managed policy document over the character limit.
40
+ *
41
+ * A policy past the limit cannot be deployed, and the account keeps whichever
42
+ * version last fit. The permission the document was grown to grant then goes
43
+ * missing weeks later, at a distance from the change that lost it. Refusing
44
+ * the document here puts the fault beside the policy that carries it.
45
+ *
46
+ * The requiredness check refuses an absent document. This one has nothing to
47
+ * measure.
48
+ */
49
+ export declare function assertSimIamManagedPolicyWithinSizeLimit(policyDocument: string | undefined): void;
50
+ /**
51
+ * Refuse an inline policy document over the character limit.
52
+ */
53
+ export declare function assertSimIamInlinePolicyWithinSizeLimit(policyDocument: string | undefined, holder: SimIamPolicyDocumentHolder): void;
54
+ /**
55
+ * Refuse a Role trust policy document over the character limit.
56
+ */
57
+ export declare function assertSimIamTrustPolicyWithinSizeLimit(policyDocument: string | undefined, roleName: string): void;
@@ -0,0 +1,71 @@
1
+ import { SimIamLimitExceeded } from "../../error/sim-iam.error.js";
2
+ /**
3
+ * The longest managed policy document IAM will take.
4
+ *
5
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html
6
+ */
7
+ export const maxSimIamManagedPolicyCharacters = 6144;
8
+ /**
9
+ * The longest inline policy document IAM will take on a Role or a User.
10
+ */
11
+ export const maxSimIamInlinePolicyCharacters = 10_240;
12
+ /**
13
+ * The longest trust policy document IAM will take on a Role.
14
+ *
15
+ * This one is adjustable, up to 8,192 characters. A simulation holds the
16
+ * default an account carries until it asks for more.
17
+ */
18
+ export const maxSimIamTrustPolicyCharacters = 2048;
19
+ /**
20
+ * Measure a policy document the way IAM does, which leaves whitespace out.
21
+ *
22
+ * A document indented for a reader therefore counts the same as the one line
23
+ * `JSON.stringify` produces, and a template can be written either way.
24
+ */
25
+ export function simIamPolicyDocumentSize(policyDocument) {
26
+ return policyDocument.replaceAll(/\s/gu, "").length;
27
+ }
28
+ /**
29
+ * Refuse a managed policy document over the character limit.
30
+ *
31
+ * A policy past the limit cannot be deployed, and the account keeps whichever
32
+ * version last fit. The permission the document was grown to grant then goes
33
+ * missing weeks later, at a distance from the change that lost it. Refusing
34
+ * the document here puts the fault beside the policy that carries it.
35
+ *
36
+ * The requiredness check refuses an absent document. This one has nothing to
37
+ * measure.
38
+ */
39
+ export function assertSimIamManagedPolicyWithinSizeLimit(policyDocument) {
40
+ if (policyDocument === undefined ||
41
+ simIamPolicyDocumentSize(policyDocument) <= maxSimIamManagedPolicyCharacters) {
42
+ return;
43
+ }
44
+ throw new SimIamLimitExceeded(`Cannot exceed quota for PolicySize: ${String(maxSimIamManagedPolicyCharacters)}`);
45
+ }
46
+ /**
47
+ * Refuse an inline policy document over the character limit.
48
+ */
49
+ export function assertSimIamInlinePolicyWithinSizeLimit(policyDocument, holder) {
50
+ assertWithinMaximumPolicySize(policyDocument, maxSimIamInlinePolicyCharacters, holder);
51
+ }
52
+ /**
53
+ * Refuse a Role trust policy document over the character limit.
54
+ */
55
+ export function assertSimIamTrustPolicyWithinSizeLimit(policyDocument, roleName) {
56
+ assertWithinMaximumPolicySize(policyDocument, maxSimIamTrustPolicyCharacters, { kind: "role", name: roleName });
57
+ }
58
+ /**
59
+ * IAM reports both of these in bytes, over a count that is really characters
60
+ * with the whitespace taken out. The wording is kept as IAM writes it. A
61
+ * reader searching for the message finds what a real deploy would have told
62
+ * them.
63
+ */
64
+ function assertWithinMaximumPolicySize(policyDocument, maxCharacters, holder) {
65
+ if (policyDocument === undefined ||
66
+ simIamPolicyDocumentSize(policyDocument) <= maxCharacters) {
67
+ return;
68
+ }
69
+ throw new SimIamLimitExceeded(`Maximum policy size of ${String(maxCharacters)} bytes exceeded for ` +
70
+ `${holder.kind} ${holder.name}`);
71
+ }
@@ -20,7 +20,9 @@ interface SimKmsAuthorizerProperties {
20
20
  * Both carry the KMS condition values a key policy can be written against:
21
21
  * `kms:CallerAccount` for the Account the request came from, and
22
22
  * `kms:ViaService` where another service made the request on the caller's
23
- * behalf.
23
+ * behalf. A service passing on the caller's own KMS permissions says so, and
24
+ * a key policy admitting whoever the request came from is then not enough by
25
+ * itself.
24
26
  */
25
27
  export declare class SimKmsAuthorizer {
26
28
  private readonly iam;
@@ -15,7 +15,9 @@ import { SimKmsViaService } from "../../key/sim-kms-via-service.js";
15
15
  * Both carry the KMS condition values a key policy can be written against:
16
16
  * `kms:CallerAccount` for the Account the request came from, and
17
17
  * `kms:ViaService` where another service made the request on the caller's
18
- * behalf.
18
+ * behalf. A service passing on the caller's own KMS permissions says so, and
19
+ * a key policy admitting whoever the request came from is then not enough by
20
+ * itself.
19
21
  */
20
22
  export class SimKmsAuthorizer {
21
23
  iam;
@@ -41,6 +43,7 @@ export class SimKmsAuthorizer {
41
43
  callerConditions: this.callerAccount,
42
44
  resourcePolicies: [key.policy.asResourcePolicy()],
43
45
  requiresResourcePolicyAllow: true,
46
+ withCallerPermissions: options.withCallerPermissions,
44
47
  });
45
48
  if (decision.isDenied) {
46
49
  throw new SimIamAccessDenied({
@@ -20,4 +20,15 @@ export interface SimKmsRequestOptions {
20
20
  * and a policy conditioned on `kms:ViaService` then does not match.
21
21
  */
22
22
  readonly viaService?: string | undefined;
23
+ /**
24
+ * Whether the service named by `viaService` is making the request with the
25
+ * caller's own KMS permissions rather than with its own.
26
+ *
27
+ * Parameter Store decrypts a SecureString this way. A caller holding
28
+ * ssm:GetParameter and no kms:Decrypt is refused even under the aws/ssm key,
29
+ * whose policy admits the Account's principals reaching KMS through Systems
30
+ * Manager. A key policy naming the caller still allows the request on its
31
+ * own, as it does for any other KMS request.
32
+ */
33
+ readonly withCallerPermissions?: boolean | undefined;
23
34
  }
@@ -1,5 +1,5 @@
1
1
  import type { SimAwsAccountId } from "../../aws/sim-aws-account.js";
2
- import type { SimIamResourcePolicyInput } from "../../iam/authorize/context/sim-iam-auth-z-context-builder.js";
2
+ import type { SimIamResourcePolicyInput } from "../../iam/authorize/context/sim-iam-auth-z-input.js";
3
3
  import type { SimIamPolicyDocument } from "../../iam/policy/sim-iam-policy.js";
4
4
  import { type SimKmsViaService } from "./sim-kms-via-service.js";
5
5
  /**
@@ -38,9 +38,10 @@ export declare class SimKmsKeyPolicy {
38
38
  * through the service that owns the key, and it delegates nothing else to
39
39
  * IAM: the second statement covers reading the key's metadata and no more.
40
40
  *
41
- * That is what makes an AWS managed key usable by a caller holding no KMS
42
- * permission at all, and unusable by a caller holding kms:Decrypt on it who
43
- * calls KMS directly.
41
+ * That is what makes an AWS managed key unusable by a caller holding
42
+ * kms:Decrypt on it who calls KMS directly. What the first statement admits
43
+ * is whoever reached KMS through the owning service, which allows the
44
+ * request on its own only where that service used its own permissions.
44
45
  */
45
46
  static awsManaged(keyArn: string, accountId: SimAwsAccountId, viaService: SimKmsViaService): SimKmsKeyPolicy;
46
47
  /**
@@ -53,9 +53,10 @@ export class SimKmsKeyPolicy {
53
53
  * through the service that owns the key, and it delegates nothing else to
54
54
  * IAM: the second statement covers reading the key's metadata and no more.
55
55
  *
56
- * That is what makes an AWS managed key usable by a caller holding no KMS
57
- * permission at all, and unusable by a caller holding kms:Decrypt on it who
58
- * calls KMS directly.
56
+ * That is what makes an AWS managed key unusable by a caller holding
57
+ * kms:Decrypt on it who calls KMS directly. What the first statement admits
58
+ * is whoever reached KMS through the owning service, which allows the
59
+ * request on its own only where that service used its own permissions.
59
60
  */
60
61
  static awsManaged(keyArn, accountId, viaService) {
61
62
  return new SimKmsKeyPolicy(keyArn, {
@@ -48,8 +48,8 @@ export declare class SimCfnLambdaFunctionPropertiesParser {
48
48
  */
49
49
  private roleArn;
50
50
  /**
51
- * The function name defaults to the logical ID, as CloudFormation
52
- * effectively names unnamed functions from it.
51
+ * An unnamed function gets the name CloudFormation generates for it, from
52
+ * the stack name and the logical ID.
53
53
  */
54
54
  private functionName;
55
55
  }
@@ -3,6 +3,7 @@ import { SimCfnLambdaDeadLetterParser } from "./sim-cfn-lambda-dead-letter-parse
3
3
  import { SimCfnLambdaEnvironmentParser } from "./sim-cfn-lambda-environment-parser.js";
4
4
  import { SimCfnLambdaFunctionCodeParser } from "./sim-cfn-lambda-function-code-parser.js";
5
5
  import { SimCfnLambdaPropertyParser } from "./sim-cfn-lambda-property-parser.js";
6
+ import { simCfnLambdaGeneratedFunctionName } from "./sim-cfn-lambda-generated-function-name.js";
6
7
  /**
7
8
  * Map parsed AWS::Lambda::Function properties onto the sim Lambda
8
9
  * CreateFunction command input, with the code input resolved separately so
@@ -74,10 +75,10 @@ export class SimCfnLambdaFunctionPropertiesParser {
74
75
  });
75
76
  }
76
77
  /**
77
- * The function name defaults to the logical ID, as CloudFormation
78
- * effectively names unnamed functions from it.
78
+ * An unnamed function gets the name CloudFormation generates for it, from
79
+ * the stack name and the logical ID.
79
80
  */
80
81
  functionName(resource, properties) {
81
- return (this.propertyParser.optionalString(resource, properties["FunctionName"], "FunctionName") ?? resource.logicalId);
82
+ return (this.propertyParser.optionalString(resource, properties["FunctionName"], "FunctionName") ?? simCfnLambdaGeneratedFunctionName(resource));
82
83
  }
83
84
  }
@@ -0,0 +1,10 @@
1
+ import type { SimCfnResource } from "../../../cloudformation/resource/sim-cfn-resource.js";
2
+ /**
3
+ * The name CloudFormation gives a function whose template does not name it.
4
+ *
5
+ * Sixty-four characters is short for a name made of a stack name and a logical
6
+ * ID, so `SimCfnGeneratedResourceName` usually has to trim one. The case is
7
+ * left alone, since Lambda keeps a name as it was given, and every character a
8
+ * stack name or a logical ID is made of is one a function name allows.
9
+ */
10
+ export declare function simCfnLambdaGeneratedFunctionName(resource: SimCfnResource): string;
@@ -0,0 +1,25 @@
1
+ import { SimCfnGeneratedResourceName } from "../../../cloudformation/resource/name/sim-cfn-generated-resource-name.js";
2
+ /**
3
+ * The longest name Lambda accepts for a function.
4
+ *
5
+ * The 140 characters `CreateFunction` documents are for a full ARN. A bare
6
+ * function name gets 64, and that is what a template generates.
7
+ *
8
+ * https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html
9
+ */
10
+ const maximumNameLength = 64;
11
+ /**
12
+ * The name CloudFormation gives a function whose template does not name it.
13
+ *
14
+ * Sixty-four characters is short for a name made of a stack name and a logical
15
+ * ID, so `SimCfnGeneratedResourceName` usually has to trim one. The case is
16
+ * left alone, since Lambda keeps a name as it was given, and every character a
17
+ * stack name or a logical ID is made of is one a function name allows.
18
+ */
19
+ export function simCfnLambdaGeneratedFunctionName(resource) {
20
+ return new SimCfnGeneratedResourceName({
21
+ stackName: resource.stackName,
22
+ logicalId: resource.logicalId,
23
+ maximumLength: maximumNameLength,
24
+ }).value;
25
+ }
@@ -1,4 +1,4 @@
1
- import type { SimIamResourcePolicyInput } from "../../../iam/authorize/context/sim-iam-auth-z-context-builder.js";
1
+ import type { SimIamResourcePolicyInput } from "../../../iam/authorize/context/sim-iam-auth-z-input.js";
2
2
  import type { SimLambdaPolicyResource } from "../../function/policy/sim-lambda-policy-resource.js";
3
3
  /**
4
4
  * The resource policies IAM should evaluate alongside identity policies for an
@@ -8,18 +8,25 @@ interface CreateFunctionAuthorizerProperties {
8
8
  *
9
9
  * AWS maps the CreateFunction API operation to the lambda:CreateFunction IAM
10
10
  * action. The resource is the function ARN being created.
11
+ *
12
+ * The execution role is a second question. Lambda keeps that Role and runs the
13
+ * function as it later, so the caller is asked whether they may hand it over,
14
+ * against the Role rather than the function. The create action is decided
15
+ * first, which is the order the two answers come in on real AWS.
11
16
  */
12
17
  export declare class CreateFunctionAuthorizer {
13
18
  private static readonly action;
14
19
  private readonly iam;
20
+ private readonly passRole;
15
21
  constructor(properties: CreateFunctionAuthorizerProperties);
16
22
  /**
17
- * Ensure the caller may create a Lambda function with the given ARN.
23
+ * Ensure the caller may create a Lambda function with the given ARN, and may
24
+ * hand Lambda the execution role it names.
18
25
  *
19
26
  * The caller is passed through unchanged so sim IAM can distinguish an
20
27
  * omitted caller, which defaults to Account root, from an explicit anonymous
21
28
  * caller.
22
29
  */
23
- authorize(functionArn: string, caller?: SimAwsCaller): void;
30
+ authorize(functionArn: string, roleArn: string, caller?: SimAwsCaller): void;
24
31
  }
25
32
  export {};
@@ -1,24 +1,37 @@
1
+ import { SimIamPassRoleAuthorizer } from "../../../iam/authorize/pass-role/sim-iam-pass-role-authorizer.js";
1
2
  import { SimIamAccessDenied } from "../../../iam/error/sim-iam.error.js";
3
+ import { simLambdaServicePrincipal } from "../../sim-lambda-service-principal.js";
2
4
  /**
3
5
  * Applies IAM authorization to a Lambda CreateFunction request.
4
6
  *
5
7
  * AWS maps the CreateFunction API operation to the lambda:CreateFunction IAM
6
8
  * action. The resource is the function ARN being created.
9
+ *
10
+ * The execution role is a second question. Lambda keeps that Role and runs the
11
+ * function as it later, so the caller is asked whether they may hand it over,
12
+ * against the Role rather than the function. The create action is decided
13
+ * first, which is the order the two answers come in on real AWS.
7
14
  */
8
15
  export class CreateFunctionAuthorizer {
9
16
  static action = "lambda:CreateFunction";
10
17
  iam;
18
+ passRole;
11
19
  constructor(properties) {
12
20
  this.iam = properties.iam;
21
+ this.passRole = new SimIamPassRoleAuthorizer({
22
+ iam: properties.iam,
23
+ passedToService: simLambdaServicePrincipal,
24
+ });
13
25
  }
14
26
  /**
15
- * Ensure the caller may create a Lambda function with the given ARN.
27
+ * Ensure the caller may create a Lambda function with the given ARN, and may
28
+ * hand Lambda the execution role it names.
16
29
  *
17
30
  * The caller is passed through unchanged so sim IAM can distinguish an
18
31
  * omitted caller, which defaults to Account root, from an explicit anonymous
19
32
  * caller.
20
33
  */
21
- authorize(functionArn, caller) {
34
+ authorize(functionArn, roleArn, caller) {
22
35
  const decision = this.iam.authorize({
23
36
  action: CreateFunctionAuthorizer.action,
24
37
  resource: functionArn,
@@ -32,5 +45,6 @@ export class CreateFunctionAuthorizer {
32
45
  resource: functionArn,
33
46
  });
34
47
  }
48
+ this.passRole.authorize(roleArn, caller);
35
49
  }
36
50
  }