@kensio/yulin 1.20.14 → 1.20.16

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 (154) hide show
  1. package/README.md +13 -0
  2. package/{dist/config/oxlint/cffjs2.oxlintrc.json → cffjs2.oxlintrc.json} +1 -1
  3. package/dist/config/oxlint/cffjs2.oxlint.config.js +4 -3
  4. package/dist/sdk/module/sim-sdk-module-client-interceptor.d.ts +5 -0
  5. package/dist/sdk/module/sim-sdk-module-client-interceptor.js +14 -0
  6. package/dist/sdk/module/sim-sdk-static-client-factory.d.ts +26 -0
  7. package/dist/sdk/module/sim-sdk-static-client-factory.js +59 -0
  8. package/dist/sdk/send-patch.d.ts +8 -0
  9. package/dist/sdk/send-patch.js +11 -0
  10. package/dist/service/aws/caller/sim-aws-caller-resolver.d.ts +28 -6
  11. package/dist/service/aws/caller/sim-aws-caller-resolver.js +18 -11
  12. package/dist/service/aws/caller/sim-aws-caller.d.ts +9 -0
  13. package/dist/service/aws/caller/sim-aws-resolved-caller.d.ts +19 -0
  14. package/dist/service/aws/caller/sim-aws-resolved-caller.js +26 -0
  15. package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +6 -0
  16. package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +3 -0
  17. package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts +6 -0
  18. package/dist/service/aws/factory/sim-aws-account-service-cache.js +5 -0
  19. package/dist/service/aws/factory/sim-aws-service-factory.d.ts +5 -0
  20. package/dist/service/aws/factory/sim-aws-service-factory.js +6 -0
  21. package/dist/service/aws/sim-aws-properties.d.ts +15 -0
  22. package/dist/service/aws/sim-aws.js +2 -1
  23. package/dist/service/cloudformation/resource/resolve/property/sim-cfn-resource-property-resolver.d.ts +11 -4
  24. package/dist/service/cloudformation/resource/resolve/property/sim-cfn-resource-property-resolver.js +21 -8
  25. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +9 -0
  26. package/dist/service/cloudformation/template/dynamic/make-sim-cfn-dynamic-references.d.ts +2 -0
  27. package/dist/service/cloudformation/template/dynamic/make-sim-cfn-dynamic-references.js +2 -2
  28. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-reference-resolvers.d.ts +10 -0
  29. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-reference-resolvers.js +4 -3
  30. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-reference-scan.d.ts +11 -0
  31. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-reference-scan.js +21 -0
  32. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-references.d.ts +24 -2
  33. package/dist/service/cloudformation/template/dynamic/sim-cfn-dynamic-references.js +50 -11
  34. package/dist/service/cloudformation/template/dynamic/sim-cfn-prefetched-dynamic-references.d.ts +42 -0
  35. package/dist/service/cloudformation/template/dynamic/sim-cfn-prefetched-dynamic-references.js +80 -0
  36. package/dist/service/eventbridge/delivery/sim-event-bridge-delivery-failures.d.ts +16 -0
  37. package/dist/service/eventbridge/delivery/sim-event-bridge-delivery-failures.js +19 -0
  38. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.d.ts +30 -7
  39. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.js +20 -11
  40. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts +2 -1
  41. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js +5 -1
  42. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts +10 -0
  43. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js +15 -3
  44. package/dist/service/iam/authorize/sim-iam-account-auth-z.d.ts +11 -4
  45. package/dist/service/iam/authorize/sim-iam-account-auth-z.js +5 -3
  46. package/dist/service/iam/authorize/sim-iam-authorizer.d.ts +2 -1
  47. package/dist/service/iam/authorize/sim-iam-authorizer.js +1 -0
  48. package/dist/service/iam/command/policy/create-policy/create-policy-input-resolver.js +4 -1
  49. package/dist/service/iam/command/policy/put-role-policy/put-role-policy.handler.js +5 -1
  50. package/dist/service/iam/command/policy/put-user-policy/put-user-policy.handler.js +5 -1
  51. package/dist/service/iam/policy/parse/sim-iam-document-parser.d.ts +4 -1
  52. package/dist/service/iam/policy/parse/sim-iam-document-parser.js +13 -15
  53. package/dist/service/iam/policy/sim-iam-statement-label.d.ts +28 -0
  54. package/dist/service/iam/policy/sim-iam-statement-label.js +17 -0
  55. package/dist/service/iam/policy/sim-iam-statement-strings.d.ts +11 -0
  56. package/dist/service/iam/policy/sim-iam-statement-strings.js +27 -0
  57. package/dist/service/iam/role/sim-iam-role-with-policy.factory.d.ts +9 -0
  58. package/dist/service/iam/role/sim-iam-role-with-policy.factory.js +4 -2
  59. package/dist/service/iam/sim-iam-account-parts.d.ts +8 -0
  60. package/dist/service/iam/sim-iam-account-parts.js +1 -0
  61. package/dist/service/iam/validate/sim-iam-policy-document-validator.d.ts +9 -2
  62. package/dist/service/iam/validate/sim-iam-policy-document-validator.js +37 -19
  63. package/dist/service/lambda/function/code/sim-lambda-vm-zip-function.factory.d.ts +7 -0
  64. package/dist/service/lambda/function/code/sim-lambda-vm-zip-function.factory.js +1 -0
  65. package/dist/service/lambda/function/code/vm/sdk/sim-lambda-provided-sdk-module.d.ts +19 -0
  66. package/dist/service/lambda/function/code/vm/sdk/sim-lambda-provided-sdk-module.js +78 -0
  67. package/dist/service/lambda/function/code/vm/sdk/sim-lambda-sdk-packages-not-installed.error.d.ts +15 -0
  68. package/dist/service/lambda/function/code/vm/sdk/sim-lambda-sdk-packages-not-installed.error.js +27 -0
  69. package/dist/service/lambda/function/code/vm/sdk/sim-lambda-vm-sdk-module-provider.d.ts +9 -0
  70. package/dist/service/lambda/function/code/vm/sdk/sim-sdk-lambda-vm-module-provider.d.ts +10 -0
  71. package/dist/service/lambda/function/code/vm/sdk/sim-sdk-lambda-vm-module-provider.js +28 -34
  72. package/dist/service/lambda/function/code/vm/sim-lambda-host-modules.d.ts +15 -0
  73. package/dist/service/lambda/function/code/vm/sim-lambda-host-modules.js +31 -0
  74. package/dist/service/lambda/function/code/vm/sim-lambda-vm-module-resolver.d.ts +7 -0
  75. package/dist/service/lambda/function/code/vm/sim-lambda-vm-module-resolver.js +15 -0
  76. package/dist/service/lambda/function/code/vm/sim-lambda-vm-modules.js +5 -4
  77. package/dist/service/s3/command/put-bucket-policy/put-bucket-policy.handler.js +4 -1
  78. package/dist/service/scheduler/delivery/sim-scheduler-delivery-failures.d.ts +16 -0
  79. package/dist/service/scheduler/delivery/sim-scheduler-delivery-failures.js +19 -0
  80. package/dist/service/scheduler/index.d.ts +1 -1
  81. package/dist/service/scheduler/index.js +1 -1
  82. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-dynamic-reference-resolver.d.ts +13 -15
  83. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-dynamic-reference-resolver.js +22 -43
  84. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-reference-stand-in.d.ts +9 -0
  85. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-reference-stand-in.js +14 -0
  86. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-reference-value.d.ts +12 -0
  87. package/dist/service/secretsmanager/cfn/dynamic/sim-cfn-secrets-manager-reference-value.js +29 -0
  88. package/dist/service/ssm/cfn/dynamic/sim-cfn-ssm-dynamic-reference-resolver.d.ts +22 -6
  89. package/dist/service/ssm/cfn/dynamic/sim-cfn-ssm-dynamic-reference-resolver.js +39 -24
  90. package/dist/service/ssm/cfn/dynamic/sim-cfn-ssm-secure-dynamic-reference-resolver.d.ts +10 -5
  91. package/dist/service/ssm/cfn/dynamic/sim-cfn-ssm-secure-dynamic-reference-resolver.js +10 -8
  92. package/dist/service/ssm/sim-ssm.d.ts +10 -2
  93. package/dist/service/ssm/sim-ssm.js +12 -4
  94. package/dist/service/sts/auth-z/assume-role-auth-z-coordinator.d.ts +9 -2
  95. package/dist/service/sts/auth-z/assume-role-auth-z-coordinator.js +2 -2
  96. package/dist/service/sts/auth-z/assume-role-source-account-auth-z.d.ts +10 -4
  97. package/dist/service/sts/auth-z/assume-role-source-account-auth-z.js +8 -7
  98. package/dist/service/sts/auth-z/assume-role-target-auth-z.d.ts +2 -2
  99. package/dist/service/sts/auth-z/assume-role-trust-policy-authorizer.d.ts +6 -2
  100. package/dist/service/sts/auth-z/assume-role-trust-policy-authorizer.js +14 -11
  101. package/dist/service/sts/command/assume-role/assume-role.handler.d.ts +5 -1
  102. package/dist/service/sts/command/assume-role/assume-role.handler.js +5 -2
  103. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.d.ts +5 -1
  104. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.js +4 -1
  105. package/dist/service/sts/service-role/sim-service-role.js +5 -1
  106. package/dist/service/sts/sim-sts.d.ts +9 -1
  107. package/dist/service/sts/sim-sts.js +4 -0
  108. package/docs/README.md +54 -0
  109. package/docs/ai-skill/README.md +69 -0
  110. package/docs/cli/README.md +284 -0
  111. package/docs/factories/README.md +140 -0
  112. package/docs/lint/README.md +176 -0
  113. package/docs/non-aws-dependencies/README.md +261 -0
  114. package/docs/sdk/README.md +272 -0
  115. package/docs/serve/README.md +1126 -0
  116. package/docs/services/acm/README.md +823 -0
  117. package/docs/services/apigateway/README.md +1919 -0
  118. package/docs/services/apigatewayv2/README.md +2678 -0
  119. package/docs/services/athena/README.md +1044 -0
  120. package/docs/services/bedrock/README.md +350 -0
  121. package/docs/services/cloudformation/README.md +3440 -0
  122. package/docs/services/cloudfront/README.md +2874 -0
  123. package/docs/services/cloudwatch/README.md +420 -0
  124. package/docs/services/cognito/README.md +4923 -0
  125. package/docs/services/dynamodb/README.md +3784 -0
  126. package/docs/services/ecr/README.md +302 -0
  127. package/docs/services/ecs/README.md +2010 -0
  128. package/docs/services/elbv2/README.md +1897 -0
  129. package/docs/services/eventbridge/README.md +1110 -0
  130. package/docs/services/firehose/README.md +805 -0
  131. package/docs/services/glue/README.md +501 -0
  132. package/docs/services/iam/README.md +1283 -0
  133. package/docs/services/kinesis/README.md +454 -0
  134. package/docs/services/kms/README.md +659 -0
  135. package/docs/services/lambda/README.md +3645 -0
  136. package/docs/services/logs/README.md +868 -0
  137. package/docs/services/organizations/README.md +574 -0
  138. package/docs/services/personalize/README.md +835 -0
  139. package/docs/services/rekognition/README.md +1070 -0
  140. package/docs/services/route53/README.md +1783 -0
  141. package/docs/services/s3/README.md +3024 -0
  142. package/docs/services/scheduler/README.md +806 -0
  143. package/docs/services/secretsmanager/README.md +667 -0
  144. package/docs/services/ses/README.md +1011 -0
  145. package/docs/services/sns/README.md +1904 -0
  146. package/docs/services/sqs/README.md +1185 -0
  147. package/docs/services/ssm/README.md +1072 -0
  148. package/docs/services/stepfunctions/README.md +1332 -0
  149. package/docs/services/sts/README.md +245 -0
  150. package/docs/services/wafv2/README.md +1378 -0
  151. package/docs/terraform/README.md +248 -0
  152. package/docs/time/README.md +284 -0
  153. package/llms.txt +59 -0
  154. package/package.json +9 -5
@@ -0,0 +1,245 @@
1
+ # Simulated STS
2
+
3
+ Yulin includes a simulated STS (Security Token Service) for tests and local development.
4
+
5
+ Sim STS is used through `SimAws` as `simAws.sts()`, scoped to the Account making the assume request.
6
+ It simulates assuming IAM Roles. An assume request is evaluated against
7
+ [simulated IAM](https://yulinsim.dev/services/iam/) policies, and a request that passes issues temporary session credentials
8
+ that the rest of the simulated environment authenticates like real AWS credentials.
9
+
10
+ ## Basic usage
11
+
12
+ Create a Role whose trust policy allows the Account to assume it, then assume it through STS. An
13
+ omitted caller defaults to the Account root principal.
14
+
15
+ ```typescript sim-sts-assume-role
16
+ /**
17
+ * Assuming a simulated IAM Role through simulated STS.
18
+ */
19
+
20
+ import { CreateRoleCommand } from "@aws-sdk/client-iam";
21
+ import { AssumeRoleCommand } from "@aws-sdk/client-sts";
22
+ import { SimAws } from "@kensio/yulin";
23
+
24
+ const simAws = new SimAws();
25
+ const account = simAws.account("123456789012");
26
+
27
+ await account.iam().createRole(
28
+ new CreateRoleCommand({
29
+ RoleName: "TargetRole",
30
+ AssumeRolePolicyDocument: JSON.stringify({
31
+ Version: "2012-10-17",
32
+ Statement: {
33
+ Effect: "Allow",
34
+ Principal: { AWS: "arn:aws:iam::123456789012:root" },
35
+ Action: "sts:AssumeRole",
36
+ },
37
+ }),
38
+ }),
39
+ );
40
+
41
+ const assumeRoleOutput = await account.sts().assumeRole(
42
+ new AssumeRoleCommand({
43
+ RoleArn: "arn:aws:iam::123456789012:role/TargetRole",
44
+ RoleSessionName: "test-session",
45
+ }),
46
+ );
47
+
48
+ console.log(assumeRoleOutput.AssumedRoleUser?.Arn);
49
+ console.log(assumeRoleOutput.Credentials?.AccessKeyId);
50
+ console.log(assumeRoleOutput.Credentials?.Expiration);
51
+ ```
52
+
53
+ The output matches the AWS shape. `AssumedRoleUser.Arn` is the session ARN, such as
54
+ `arn:aws:sts::123456789012:assumed-role/TargetRole/test-session`, and `Credentials` carries the
55
+ temporary `AccessKeyId`, `SecretAccessKey`, `SessionToken`, and `Expiration`.
56
+
57
+ The issued credentials are registered with the target Account's sim IAM. They authenticate later
58
+ simulated requests, for example as the `caller` of an IAM authorization attempt, where identity
59
+ policies come from the underlying Role. See [the sim IAM docs](https://yulinsim.dev/services/iam/#sts-assumerole-sessions) for a
60
+ full example. Credentials missing their session token, or used after `Expiration`, are rejected with
61
+ an AWS-like invalid-credentials error.
62
+
63
+ `DurationSeconds` controls the session lifetime and defaults to 3600 seconds (one hour). It must be
64
+ a positive integer.
65
+
66
+ ## Role-to-Role assumption
67
+
68
+ Pass a caller to assume a Role as a specific principal. As in real AWS, both sides of the request
69
+ are then evaluated:
70
+
71
+ - The target Role's trust policy must allow the caller to perform `sts:AssumeRole`
72
+ - A non-root caller also needs an identity policy allowing `sts:AssumeRole` on the target Role's
73
+ ARN
74
+
75
+ ```typescript sim-sts-role-to-role
76
+ /**
77
+ * One simulated IAM Role assuming another through simulated STS.
78
+ */
79
+
80
+ import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
81
+ import { AssumeRoleCommand } from "@aws-sdk/client-sts";
82
+ import { SimAws } from "@kensio/yulin";
83
+
84
+ const simAws = new SimAws();
85
+ const account = simAws.account("123456789012");
86
+ const simIam = account.iam();
87
+
88
+ const sourceRoleArn = "arn:aws:iam::123456789012:role/SourceRole";
89
+ const targetRoleArn = "arn:aws:iam::123456789012:role/TargetRole";
90
+
91
+ await simIam.createRole(
92
+ new CreateRoleCommand({
93
+ RoleName: "SourceRole",
94
+ AssumeRolePolicyDocument: JSON.stringify({
95
+ Version: "2012-10-17",
96
+ Statement: {
97
+ Effect: "Allow",
98
+ Principal: { AWS: "arn:aws:iam::123456789012:root" },
99
+ Action: "sts:AssumeRole",
100
+ },
101
+ }),
102
+ }),
103
+ );
104
+
105
+ await simIam.putRolePolicy(
106
+ new PutRolePolicyCommand({
107
+ RoleName: "SourceRole",
108
+ PolicyName: "AssumeTargetRole",
109
+ PolicyDocument: JSON.stringify({
110
+ Version: "2012-10-17",
111
+ Statement: {
112
+ Effect: "Allow",
113
+ Action: "sts:AssumeRole",
114
+ Resource: targetRoleArn,
115
+ },
116
+ }),
117
+ }),
118
+ );
119
+
120
+ await simIam.createRole(
121
+ new CreateRoleCommand({
122
+ RoleName: "TargetRole",
123
+ AssumeRolePolicyDocument: JSON.stringify({
124
+ Version: "2012-10-17",
125
+ Statement: {
126
+ Effect: "Allow",
127
+ Principal: { AWS: sourceRoleArn },
128
+ Action: "sts:AssumeRole",
129
+ },
130
+ }),
131
+ }),
132
+ );
133
+
134
+ const assumeRoleOutput = await account.sts().assumeRole(
135
+ new AssumeRoleCommand({
136
+ RoleArn: targetRoleArn,
137
+ RoleSessionName: "role-session",
138
+ }),
139
+ {
140
+ caller: { kind: "arn", arn: sourceRoleArn },
141
+ },
142
+ );
143
+
144
+ console.log(assumeRoleOutput.AssumedRoleUser?.Arn);
145
+ ```
146
+
147
+ STS throws an AWS-like access-denied error if either side denies the request, which happens when the
148
+ trust policy does not cover the caller, the caller has no identity policy allowing `sts:AssumeRole`,
149
+ or an explicit `Deny` matches. The error has a `403` status code and names the `sts:AssumeRole`
150
+ action and the target Role ARN. No session is created.
151
+
152
+ Cross-Account assumption works the same way. Create the source and target Roles in different
153
+ simulated Accounts of the same `SimAws` instance, and call `assumeRole` on the source Account's
154
+ `sts()`. The issued session belongs to the target Role's Account.
155
+
156
+ ## Role chaining
157
+
158
+ A process that assumes a Role and then assumes a second one from that session is chaining Roles. The
159
+ caller of the second request is the session, and the Role it holds the permissions of is what both
160
+ sides of the decision are written against. The trust policy of the target names that Role, and the
161
+ identity policy allowing `sts:AssumeRole` belongs to it.
162
+
163
+ Both ARNs of a session are matched against a `Principal`, so a trust policy naming either the Role
164
+ or one particular session admits it. AWS recommends naming the Role, and a session name is often
165
+ decided at run time rather than written into a policy.
166
+
167
+ Chaining over a served endpoint works the same way. Credentials from the first request sign the
168
+ second, and the caller they resolve to carries the Role along with the session.
169
+
170
+ ## ExternalId
171
+
172
+ A trust policy can require an external ID through the `sts:ExternalId` condition key. The
173
+ `ExternalId` supplied to `AssumeRoleCommand` is matched against it.
174
+
175
+ ```typescript sim-sts-external-id
176
+ /**
177
+ * Requiring an ExternalId in a simulated Role trust policy.
178
+ */
179
+
180
+ import { CreateRoleCommand } from "@aws-sdk/client-iam";
181
+ import { AssumeRoleCommand } from "@aws-sdk/client-sts";
182
+ import { SimAws } from "@kensio/yulin";
183
+
184
+ const simAws = new SimAws();
185
+ const account = simAws.account("123456789012");
186
+
187
+ await account.iam().createRole(
188
+ new CreateRoleCommand({
189
+ RoleName: "PartnerRole",
190
+ AssumeRolePolicyDocument: JSON.stringify({
191
+ Version: "2012-10-17",
192
+ Statement: {
193
+ Effect: "Allow",
194
+ Principal: { AWS: "arn:aws:iam::123456789012:root" },
195
+ Action: "sts:AssumeRole",
196
+ Condition: {
197
+ StringEquals: {
198
+ "sts:ExternalId": "expected-external-id",
199
+ },
200
+ },
201
+ },
202
+ }),
203
+ }),
204
+ );
205
+
206
+ const assumeRoleOutput = await account.sts().assumeRole(
207
+ new AssumeRoleCommand({
208
+ RoleArn: "arn:aws:iam::123456789012:role/PartnerRole",
209
+ RoleSessionName: "partner-session",
210
+ ExternalId: "expected-external-id",
211
+ }),
212
+ );
213
+
214
+ console.log(assumeRoleOutput.AssumedRoleUser?.Arn);
215
+ ```
216
+
217
+ An omitted or mismatched `ExternalId` leaves the trust-policy condition unmatched. The assume
218
+ request is denied.
219
+
220
+ ## Available functionality
221
+
222
+ Sim STS currently supports:
223
+
224
+ - `AssumeRoleCommand`
225
+ - Trust-policy evaluation against the target Role's assume-role policy document
226
+ - Identity-policy evaluation of the source caller, requiring `sts:AssumeRole` permission on the
227
+ target Role
228
+ - Role-to-Role and cross-Account assumption
229
+ - `ExternalId` matching through the `sts:ExternalId` trust-policy condition key
230
+ - Session duration with `DurationSeconds`, defaulting to one hour
231
+ - Temporary credentials registered with the target Account's sim IAM, including session-token and
232
+ expiry validation
233
+
234
+ Unsupported STS options may be ignored or may throw errors depending on whether the simulator needs
235
+ them to model the requested behaviour.
236
+
237
+ ## Limitations
238
+
239
+ Sim STS models Role assumption. Notable gaps:
240
+
241
+ - `AssumeRoleCommand` is the only supported command. There is no `GetCallerIdentity`, federation, or
242
+ web-identity support
243
+ - Session policies (`Policy` / `PolicyArns`), tags, and `SourceIdentity` requests are not evaluated
244
+ - Condition support in trust policies is limited to the operators supported by
245
+ [sim IAM](https://yulinsim.dev/services/iam/#policy-conditions)