@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.
- package/dist/service/aws/caller/sim-aws-ambient-caller.d.ts +23 -0
- package/dist/service/aws/caller/sim-aws-ambient-caller.js +12 -0
- package/dist/service/aws/caller/sim-aws-caller-resolver.d.ts +17 -6
- package/dist/service/aws/caller/sim-aws-caller-resolver.js +21 -26
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +6 -0
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +3 -0
- package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts +6 -0
- package/dist/service/aws/factory/sim-aws-account-service-cache.js +5 -1
- package/dist/service/aws/factory/sim-aws-registered-service-builder.js +3 -1
- package/dist/service/aws/factory/sim-aws-service-factory.js +9 -1
- package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts +4 -0
- package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +4 -1
- package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-deployer.js +2 -1
- package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.d.ts +11 -2
- package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.js +2 -1
- package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts +6 -0
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +11 -0
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js +17 -15
- package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts +12 -0
- package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.js +2 -1
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.d.ts +23 -0
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.js +30 -0
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cfn-value-adapter.js +8 -0
- package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.d.ts +29 -12
- package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.js +51 -20
- package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.d.ts +19 -0
- package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.js +6 -0
- package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.d.ts +7 -0
- package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.js +9 -2
- package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.d.ts +2 -0
- package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.js +2 -1
- package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +6 -0
- package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +4 -1
- package/dist/service/cloudformation/stack/sim-cfn-stack.js +2 -1
- package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +6 -0
- package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts +5 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.d.ts +37 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.js +50 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.d.ts +25 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.js +21 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.d.ts +28 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.js +48 -0
- package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.d.ts +8 -0
- package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.js +13 -0
- package/dist/service/cloudfront/cff/sim-cf-function-commands.d.ts +52 -0
- package/dist/service/cloudfront/cff/sim-cf-function-commands.js +51 -0
- package/dist/service/cloudfront/cff/sim-cff-configuration.d.ts +41 -0
- package/dist/service/cloudfront/cff/sim-cff-configuration.js +34 -0
- package/dist/service/cloudfront/cff/sim-cff-stage.d.ts +23 -0
- package/dist/service/cloudfront/cff/sim-cff-stage.js +30 -0
- package/dist/service/cloudfront/cff/sim-cloudfront-function.d.ts +6 -1
- package/dist/service/cloudfront/cff/sim-cloudfront-function.js +6 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.d.ts +27 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.js +42 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.d.ts +24 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.js +32 -0
- 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
- package/dist/service/cloudfront/cfn/distro/{sim-cfn-cf-distro-response-headers-policy.js → sim-cfn-cf-distro-behavior-policies.js} +11 -37
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts +6 -5
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js +8 -7
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.d.ts +23 -0
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.js +50 -0
- package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.d.ts +1 -0
- package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js +10 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +1 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts +2 -0
- package/dist/service/cloudfront/command/create-function/create-function.handler.js +7 -1
- package/dist/service/cloudfront/command/function/sim-cf-describe-function.d.ts +22 -0
- package/dist/service/cloudfront/command/function/sim-cf-describe-function.js +32 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-access.d.ts +48 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-access.js +48 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-command.types.d.ts +97 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-command.types.js +10 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-lookup.d.ts +12 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-lookup.js +21 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-summary.d.ts +11 -0
- package/dist/service/cloudfront/command/function/sim-cf-function-summary.js +30 -0
- package/dist/service/cloudfront/command/function/sim-cf-get-function.d.ts +23 -0
- package/dist/service/cloudfront/command/function/sim-cf-get-function.js +33 -0
- package/dist/service/cloudfront/command/function/sim-cf-list-functions.d.ts +22 -0
- package/dist/service/cloudfront/command/function/sim-cf-list-functions.js +38 -0
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts +2 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.d.ts +18 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.js +30 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.d.ts +28 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.js +41 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.d.ts +2 -2
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js +6 -3
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.d.ts +0 -10
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.js +0 -19
- package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.d.ts +2 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.js +4 -2
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.d.ts +3 -3
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.js +5 -5
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.d.ts +3 -3
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.js +4 -4
- package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts +3 -1
- package/dist/service/cloudfront/distribution/sim-cf-distribution-reconfigurer.d.ts +2 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts +21 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.js +25 -0
- package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store-access.js +2 -10
- package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store.js +2 -1
- package/dist/service/cloudfront/sdk/sim-cloudfront-sdk-command-router.js +12 -0
- package/dist/service/cloudfront/sim-cf-authorize.d.ts +16 -0
- package/dist/service/cloudfront/sim-cf-authorize.js +19 -0
- package/dist/service/cloudfront/sim-cf-etag.d.ts +7 -0
- package/dist/service/cloudfront/sim-cf-etag.js +10 -0
- package/dist/service/cloudfront/sim-cloudfront-commands.d.ts +8 -12
- package/dist/service/cloudfront/sim-cloudfront-commands.js +8 -17
- package/dist/service/cloudfront/sim-cloudfront-policies.d.ts +43 -0
- package/dist/service/cloudfront/sim-cloudfront-policies.js +53 -0
- package/dist/service/cloudfront/sim-cloudfront.d.ts +13 -17
- package/dist/service/cloudfront/sim-cloudfront.js +22 -25
- package/dist/service/ecr/authorize/sim-ecr-authorizer.d.ts +31 -0
- package/dist/service/ecr/authorize/sim-ecr-authorizer.js +38 -0
- package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.d.ts +11 -2
- package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.js +11 -2
- package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.d.ts +4 -2
- package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.js +8 -9
- package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.d.ts +7 -0
- package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.js +9 -0
- package/dist/service/ecr/sim-ecr.d.ts +7 -0
- package/dist/service/ecr/sim-ecr.js +16 -4
- package/dist/service/ecs/command/authorize/sim-ecs-authorizer.d.ts +12 -0
- package/dist/service/ecs/command/authorize/sim-ecs-authorizer.js +21 -0
- package/dist/service/ecs/command/register-task-definition/register-task-definition.handler.js +1 -0
- package/dist/service/ecs/sim-ecs-service-principal.d.ts +8 -0
- package/dist/service/ecs/sim-ecs-service-principal.js +8 -0
- package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.d.ts +12 -0
- package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.js +21 -0
- package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.d.ts +13 -0
- package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.js +9 -0
- package/dist/service/eventbridge/command/target/sim-event-bridge-put-targets.js +1 -0
- package/dist/service/firehose/command/authorize/sim-firehose-authorizer.d.ts +12 -0
- package/dist/service/firehose/command/authorize/sim-firehose-authorizer.js +20 -0
- package/dist/service/firehose/command/sim-firehose-delivery-stream-access.d.ts +4 -0
- package/dist/service/firehose/command/sim-firehose-delivery-stream-access.js +6 -0
- package/dist/service/firehose/command/stream/sim-firehose-create-delivery-stream.js +3 -1
- package/dist/service/firehose/sim-firehose-service-principal.d.ts +8 -0
- package/dist/service/firehose/sim-firehose-service-principal.js +8 -0
- package/dist/service/firehose/source/sim-firehose-source.d.ts +5 -0
- package/dist/service/firehose/source/sim-firehose-source.js +5 -0
- package/dist/service/glue/cfn/database/sim-cfn-glue-database-properties.js +2 -2
- package/dist/service/glue/cfn/sim-cfn-glue-generated-name.d.ts +10 -0
- package/dist/service/glue/cfn/sim-cfn-glue-generated-name.js +25 -0
- package/dist/service/glue/cfn/table/sim-cfn-glue-table-properties.js +2 -3
- package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts +33 -2
- package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js +33 -2
- package/dist/service/iam/authorize/allow/sim-iam-allow-statements.d.ts +4 -3
- package/dist/service/iam/authorize/allow/sim-iam-allow-statements.js +9 -3
- package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.d.ts +14 -5
- package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.js +16 -12
- package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.d.ts +9 -3
- package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.js +5 -3
- package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts +9 -71
- package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js +2 -1
- package/dist/service/iam/authorize/context/sim-iam-auth-z-input.d.ts +87 -0
- package/dist/service/iam/authorize/context/sim-iam-auth-z-input.js +1 -0
- package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts +11 -3
- package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js +20 -8
- package/dist/service/iam/authorize/match/sim-iam-principal-match.d.ts +29 -8
- package/dist/service/iam/authorize/match/sim-iam-principal-match.js +38 -13
- package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.d.ts +74 -0
- package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.js +92 -0
- package/dist/service/iam/authorize/sim-iam-account-auth-z.d.ts +14 -5
- package/dist/service/iam/authorize/sim-iam-account-auth-z.js +6 -4
- package/dist/service/iam/authorize/sim-iam-authorizer.d.ts +3 -1
- package/dist/service/iam/authorize/sim-iam-authorizer.js +2 -1
- package/dist/service/iam/authorize/sim-iam-inter-service-auth-z.d.ts +1 -1
- package/dist/service/iam/authorize/sim-iam-wildcard.js +39 -4
- package/dist/service/iam/cfn/managed-policy/sim-cfn-iam-managed-policy-creator.js +2 -1
- package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.d.ts +16 -0
- package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.js +36 -0
- package/dist/service/iam/cfn/role/sim-cfn-iam-role-properties-parser.js +9 -8
- package/dist/service/iam/cfn/sim-cfn-iam-optional-string.d.ts +17 -0
- package/dist/service/iam/cfn/sim-cfn-iam-optional-string.js +17 -0
- package/dist/service/iam/cfn/user/sim-cfn-iam-user-properties-parser.js +4 -8
- package/dist/service/iam/command/policy/create-policy/create-policy-input-resolver.js +2 -0
- package/dist/service/iam/command/policy/put-role-policy/put-role-policy.handler.js +5 -0
- package/dist/service/iam/command/policy/put-user-policy/put-user-policy.handler.js +5 -0
- package/dist/service/iam/command/role/create-role/create-role.handler.js +4 -1
- package/dist/service/iam/error/sim-iam.error.d.ts +11 -0
- package/dist/service/iam/error/sim-iam.error.js +13 -0
- package/dist/service/iam/index.d.ts +1 -0
- package/dist/service/iam/policy/sim-iam-policy-document-of-size.d.ts +18 -0
- package/dist/service/iam/policy/sim-iam-policy-document-of-size.js +41 -0
- package/dist/service/iam/role/sim-iam-deploy-role.d.ts +56 -0
- package/dist/service/iam/role/sim-iam-deploy-role.js +50 -0
- package/dist/service/iam/role/sim-iam-role-with-policy.factory.d.ts +3 -1
- package/dist/service/iam/sim-iam-account-parts.d.ts +8 -0
- package/dist/service/iam/sim-iam-account-parts.js +1 -0
- package/dist/service/iam/sim-iam.d.ts +12 -2
- package/dist/service/iam/sim-iam.js +12 -0
- package/dist/service/iam/validate/size/sim-iam-policy-document-size.d.ts +57 -0
- package/dist/service/iam/validate/size/sim-iam-policy-document-size.js +71 -0
- package/dist/service/kms/command/authorize/sim-kms-authorizer.d.ts +3 -1
- package/dist/service/kms/command/authorize/sim-kms-authorizer.js +4 -1
- package/dist/service/kms/command/sim-kms-request-options.d.ts +11 -0
- package/dist/service/kms/key/sim-kms-key-policy.d.ts +5 -4
- package/dist/service/kms/key/sim-kms-key-policy.js +4 -3
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.d.ts +2 -2
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.js +4 -3
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.d.ts +10 -0
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.js +25 -0
- package/dist/service/lambda/command/authorize/sim-lambda-resource-policies.d.ts +1 -1
- package/dist/service/lambda/command/create-function/create-function-authorizer.d.ts +9 -2
- package/dist/service/lambda/command/create-function/create-function-authorizer.js +16 -2
- package/dist/service/lambda/command/create-function/create-function.handler.js +1 -1
- package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.d.ts +7 -2
- package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.js +14 -2
- package/dist/service/lambda/command/update-function-configuration/update-function-configuration.handler.js +1 -1
- package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +10 -1
- package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +25 -1
- package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.d.ts +13 -0
- package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.js +18 -0
- package/dist/service/lambda/sim-lambda-service-principal.d.ts +7 -0
- package/dist/service/lambda/sim-lambda-service-principal.js +7 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.d.ts +46 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.js +49 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.d.ts +5 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.js +6 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.d.ts +5 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.js +6 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.d.ts +5 -0
- package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.js +6 -0
- package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.d.ts +9 -2
- package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.js +34 -5
- package/dist/service/logs/cfn/sim-logs-cfn-resource-deleter.js +1 -1
- package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.d.ts +4 -0
- package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.js +9 -4
- package/dist/service/logs/sim-logs-commands.d.ts +3 -0
- package/dist/service/logs/sim-logs-commands.js +4 -0
- package/dist/service/logs/sim-logs.js +6 -1
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.d.ts +2 -2
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.js +4 -3
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.d.ts +12 -0
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.js +22 -0
- package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.d.ts +1 -1
- package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.d.ts +10 -1
- package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.js +19 -1
- package/dist/service/scheduler/command/schedule/sim-scheduler-create-schedule.js +1 -0
- package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.d.ts +8 -0
- package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.js +9 -0
- package/dist/service/scheduler/command/schedule/sim-scheduler-update-schedule.js +1 -0
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.d.ts +15 -0
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.js +22 -0
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.d.ts +4 -10
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.js +13 -31
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.d.ts +17 -0
- package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.js +30 -0
- package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.d.ts +6 -0
- package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.js +8 -3
- package/dist/service/sns/command/authorize/sim-sns-topic-resource-policies.d.ts +1 -1
- package/dist/service/sqs/command/authorize/sim-sqs-queue-resource-policies.d.ts +1 -1
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.d.ts +16 -0
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.js +23 -0
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.d.ts +2 -4
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.js +5 -5
- package/dist/service/ssm/parameter/sim-ssm-kms-crypto.d.ts +6 -4
- package/dist/service/ssm/parameter/sim-ssm-kms-crypto.js +4 -4
- package/dist/service/ssm/parameter/sim-ssm-parameter-arn.d.ts +17 -0
- package/dist/service/ssm/parameter/sim-ssm-parameter-arn.js +20 -0
- package/dist/service/ssm/parameter/sim-ssm-parameter-kms.d.ts +15 -9
- package/dist/service/ssm/parameter/sim-ssm-parameter-kms.js +20 -10
- package/dist/service/ssm/parameter/sim-ssm-parameter-name.js +3 -12
- package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.d.ts +41 -0
- package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.js +64 -0
- package/dist/service/stepfunctions/command/machine/sim-state-machine-create.d.ts +5 -2
- package/dist/service/stepfunctions/command/machine/sim-state-machine-create.js +6 -2
- package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.d.ts +26 -0
- package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.js +29 -0
- package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.d.ts +7 -0
- package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.js +12 -3
- package/dist/service/stepfunctions/command/machine/sim-state-machine-update.d.ts +19 -0
- package/dist/service/stepfunctions/command/machine/{sim-state-machine-writes.js → sim-state-machine-update.js} +3 -14
- package/dist/service/stepfunctions/sim-step-functions.d.ts +8 -2
- package/dist/service/stepfunctions/sim-step-functions.js +26 -9
- package/dist/service/sts/command/assume-role/assume-role.handler.d.ts +5 -0
- package/dist/service/sts/command/assume-role/assume-role.handler.js +1 -0
- package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.d.ts +5 -0
- package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.js +1 -0
- package/dist/service/sts/sim-sts.d.ts +9 -0
- package/dist/service/sts/sim-sts.js +4 -0
- package/dist/util/memo/bounded-memo.d.ts +36 -0
- package/dist/util/memo/bounded-memo.js +58 -0
- package/docs/sdk/README.md +3 -1
- package/docs/services/cloudformation/README.md +196 -11
- package/docs/services/cloudfront/README.md +230 -6
- package/docs/services/cloudwatch/README.md +6 -4
- package/docs/services/cognito/README.md +8 -7
- package/docs/services/dynamodb/README.md +6 -5
- package/docs/services/ecs/README.md +20 -9
- package/docs/services/elbv2/README.md +6 -2
- package/docs/services/eventbridge/README.md +9 -1
- package/docs/services/firehose/README.md +9 -3
- package/docs/services/glue/README.md +6 -0
- package/docs/services/iam/README.md +322 -27
- package/docs/services/kinesis/README.md +3 -2
- package/docs/services/kms/README.md +7 -2
- package/docs/services/lambda/README.md +76 -2
- package/docs/services/logs/README.md +16 -2
- package/docs/services/s3/README.md +7 -2
- package/docs/services/scheduler/README.md +12 -4
- package/docs/services/secretsmanager/README.md +6 -3
- package/docs/services/ses/README.md +3 -1
- package/docs/services/sns/README.md +5 -5
- package/docs/services/sqs/README.md +5 -5
- package/docs/services/ssm/README.md +40 -16
- package/docs/services/stepfunctions/README.md +11 -2
- package/docs/services/wafv2/README.md +5 -3
- package/package.json +1 -1
- 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
|
|
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-
|
|
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-
|
|
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
|
|
42
|
-
*
|
|
43
|
-
*
|
|
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
|
|
57
|
-
*
|
|
58
|
-
*
|
|
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
|
-
*
|
|
52
|
-
*
|
|
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
|
-
*
|
|
78
|
-
*
|
|
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
|
|
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-
|
|
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
|
}
|