@kensio/yulin 1.21.6 → 1.21.8
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/README.md +22 -2
- package/dist/service/eventbridge/cfn/bus/sim-cfn-event-bus-creator.js +1 -0
- package/dist/service/eventbridge/cfn/bus/sim-cfn-event-bus-properties.d.ts +4 -0
- package/dist/service/eventbridge/cfn/bus/sim-cfn-event-bus-properties.js +26 -1
- package/dist/service/eventbridge/cfn/rule/sim-cfn-event-rule-creator.js +3 -1
- package/dist/service/eventbridge/cfn/rule/sim-cfn-event-rule-properties.d.ts +0 -7
- package/dist/service/eventbridge/cfn/rule/sim-cfn-event-rule-properties.js +0 -20
- package/dist/service/eventbridge/cfn/rule/sim-cfn-event-rule-unsimulated-properties.d.ts +13 -0
- package/dist/service/eventbridge/cfn/rule/sim-cfn-event-rule-unsimulated-properties.js +59 -0
- package/dist/service/eventbridge/cfn/sim-cfn-event-bridge-resource-error.d.ts +1 -1
- package/dist/service/eventbridge/cfn/sim-cfn-event-bridge-resource-error.js +1 -1
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +1 -1
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.d.ts +3 -2
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +25 -3
- package/dist/service/ses/command/authorize/sim-ses-authorizer.d.ts +9 -0
- package/dist/service/ses/command/authorize/sim-ses-authorizer.js +18 -2
- package/dist/service/ses/command/send/sim-ses-send-email.js +2 -1
- package/dist/service/sns/cfn/topic/sim-cfn-sns-topic-creator.js +1 -0
- package/dist/service/sns/cfn/topic/sim-cfn-sns-topic-properties.d.ts +9 -4
- package/dist/service/sns/cfn/topic/sim-cfn-sns-topic-properties.js +18 -6
- package/dist/service/sns/cfn/topic/sim-cfn-sns-topic-property-names.d.ts +10 -0
- package/dist/service/sns/cfn/topic/sim-cfn-sns-topic-property-names.js +16 -1
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-creator.js +1 -1
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.d.ts +11 -6
- package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.js +18 -9
- package/docs/README.md +40 -4
- package/docs/ai-skill/README.md +57 -54
- package/docs/cli/README.md +84 -94
- package/docs/factories/README.md +42 -54
- package/docs/lint/README.md +41 -67
- package/docs/non-aws-dependencies/README.md +72 -168
- package/docs/sdk/README.md +109 -95
- package/docs/serve/README.md +192 -898
- package/docs/services/acm/README.md +24 -40
- package/docs/services/apigateway/README.md +52 -71
- package/docs/services/apigatewayv2/README.md +55 -74
- package/docs/services/athena/README.md +17 -26
- package/docs/services/backup/README.md +29 -39
- package/docs/services/bedrock/README.md +38 -52
- package/docs/services/cloudformation/README.md +43 -55
- package/docs/services/cloudfront/README.md +69 -95
- package/docs/services/cloudwatch/README.md +40 -54
- package/docs/services/cognito/README.md +30 -45
- package/docs/services/dynamodb/README.md +34 -51
- package/docs/services/ecr/README.md +36 -77
- package/docs/services/ecs/README.md +26 -46
- package/docs/services/elbv2/README.md +19 -29
- package/docs/services/eventbridge/README.md +24 -20
- package/docs/services/firehose/README.md +24 -32
- package/docs/services/glue/README.md +41 -78
- package/docs/services/iam/README.md +13 -15
- package/docs/services/kinesis/README.md +53 -93
- package/docs/services/kms/README.md +22 -32
- package/docs/services/lambda/README.md +60 -80
- package/docs/services/logs/README.md +41 -50
- package/docs/services/organizations/README.md +50 -85
- package/docs/services/personalize/README.md +28 -44
- package/docs/services/rekognition/README.md +26 -38
- package/docs/services/route53/README.md +17 -17
- package/docs/services/s3/README.md +47 -51
- package/docs/services/scheduler/README.md +41 -52
- package/docs/services/secretsmanager/README.md +27 -42
- package/docs/services/ses/README.md +24 -34
- package/docs/services/sns/README.md +31 -33
- package/docs/services/sqs/README.md +14 -14
- package/docs/services/ssm/README.md +19 -21
- package/docs/services/stepfunctions/README.md +18 -20
- package/docs/services/sts/README.md +32 -45
- package/docs/services/wafv2/README.md +12 -17
- package/docs/terraform/README.md +108 -126
- package/docs/testing/README.md +228 -0
- package/docs/time/README.md +87 -117
- package/llms.txt +2 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Simulated ACM
|
|
2
2
|
|
|
3
|
-
Yulin
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Yulin simulates AWS Certificate Manager (ACM) in memory. You can request and inspect certificates,
|
|
4
|
+
exercise DNS validation against simulated Route53, and deploy certificate resources through
|
|
5
|
+
simulated CloudFormation.
|
|
6
6
|
|
|
7
7
|
## Prerequisites
|
|
8
8
|
|
|
@@ -12,9 +12,8 @@ with simulated CloudFormation.
|
|
|
12
12
|
|
|
13
13
|
## Request a certificate
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
3. Call `listCertificates` with a `ListCertificatesCommand` to confirm the certificate exists.
|
|
15
|
+
Create a `SimAws` instance, request a certificate, then list the certificates in that account and
|
|
16
|
+
region:
|
|
18
17
|
|
|
19
18
|
```typescript sim-acm-request-certificate
|
|
20
19
|
/**
|
|
@@ -145,9 +144,8 @@ for (const validation of domainValidationOptions) {
|
|
|
145
144
|
}
|
|
146
145
|
```
|
|
147
146
|
|
|
148
|
-
For DNS validation,
|
|
149
|
-
|
|
150
|
-
tests.
|
|
147
|
+
For DNS validation, ACM returns a deterministic CNAME record for the primary domain and each subject
|
|
148
|
+
alternative name. Tests can assert on these records directly.
|
|
151
149
|
|
|
152
150
|
For EMAIL validation, the validation method is recorded but no DNS resource record is returned.
|
|
153
151
|
|
|
@@ -187,11 +185,8 @@ console.log(validation?.ResourceRecord);
|
|
|
187
185
|
|
|
188
186
|
## Wait for certificate issuance
|
|
189
187
|
|
|
190
|
-
Requested certificates start
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
If your test needs the issued state, wait for background tasks to complete before describing the
|
|
194
|
-
certificate.
|
|
188
|
+
Requested certificates start as `PENDING_VALIDATION`. Wait for background tasks before asserting
|
|
189
|
+
that a certificate is `ISSUED`.
|
|
195
190
|
|
|
196
191
|
> **Note:** Where a simulated Route53 hosted zone covers the certificate domain, issuance waits for
|
|
197
192
|
> DNS validation first.
|
|
@@ -233,19 +228,14 @@ console.log(describeOutput.Certificate?.IssuedAt);
|
|
|
233
228
|
|
|
234
229
|
## Validate a certificate against simulated Route53
|
|
235
230
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
By default, the rules are:
|
|
231
|
+
ACM requires the validation CNAME when simulated Route53 is authoritative for the domain. The
|
|
232
|
+
default rules are:
|
|
240
233
|
|
|
241
234
|
- If a simulated Route53 hosted zone covers the certificate domain, the certificate waits for its validation record.
|
|
242
235
|
- If no hosted zone covers the domain, the certificate is issued as soon as background tasks drain.
|
|
243
236
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
[Two methods override that default](#override-when-validation-is-required) where it doesn't suit
|
|
248
|
-
your test.
|
|
237
|
+
This lets templates refer to externally managed hosted zones without leaving certificates pending.
|
|
238
|
+
[Two methods override the default](#override-when-validation-is-required).
|
|
249
239
|
|
|
250
240
|
```typescript sim-acm-dns-validation
|
|
251
241
|
/**
|
|
@@ -322,11 +312,9 @@ const issuedOutput = await simAws.acm().describeCertificate(
|
|
|
322
312
|
console.log(issuedOutput.Certificate?.Status); // ISSUED
|
|
323
313
|
```
|
|
324
314
|
|
|
325
|
-
Each domain
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
`DescribeCertificateCommand` reports `SUCCESS` for validated domains and `PENDING_VALIDATION` for
|
|
329
|
-
the rest.
|
|
315
|
+
Each domain is validated separately. A certificate is issued when every domain covered by a
|
|
316
|
+
simulated hosted zone has its validation record. `DescribeCertificateCommand` reports `SUCCESS` for
|
|
317
|
+
validated domains and `PENDING_VALIDATION` for the rest.
|
|
330
318
|
|
|
331
319
|
Hosted zones are looked up across every simulated account, matching real ACM validating against
|
|
332
320
|
public DNS. A certificate in one account can be validated by a hosted zone in another.
|
|
@@ -554,18 +542,16 @@ await scopedAcm.requestCertificate(
|
|
|
554
542
|
);
|
|
555
543
|
```
|
|
556
544
|
|
|
557
|
-
Each `SimAws` instance has its own isolated state.
|
|
545
|
+
Each `SimAws` instance has its own isolated state. Application tests should normally use the instance
|
|
546
|
+
from their shared [test suite setup](https://yulinsim.dev/testing/). A fresh instance remains useful
|
|
547
|
+
when a test specifically needs an empty simulated account.
|
|
558
548
|
|
|
559
549
|
## Register a certificate with a chosen ARN
|
|
560
550
|
|
|
561
|
-
`RequestCertificateCommand` allocates
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
The usual reason is a CDK app that creates its certificate in one stack and uses it in another. The
|
|
566
|
-
ARN crosses between the two as a plain string, and the stack using it carries that ARN into its
|
|
567
|
-
synthesized template. Simulated CloudFront checks the certificate before it creates a Distribution,
|
|
568
|
-
so registering the certificate first lets the template deploy as it is, with no rewriting.
|
|
551
|
+
`RequestCertificateCommand` allocates the ARN. If a fixture or another stack already provides the
|
|
552
|
+
ARN, register that certificate during test setup. This is useful when one CDK stack creates a
|
|
553
|
+
certificate and another uses its ARN. Simulated CloudFront can then resolve the certificate without
|
|
554
|
+
changing the synthesized template.
|
|
569
555
|
|
|
570
556
|
```typescript sim-acm-register-certificate
|
|
571
557
|
/**
|
|
@@ -791,9 +777,7 @@ A `HostedZoneId` that names a hosted zone the simulator doesn't hold is skipped
|
|
|
791
777
|
|
|
792
778
|
If a hosted zone covers the domain but the validation record never appears, the stack fails rather than hanging. Real CloudFormation sits in `CREATE_IN_PROGRESS` for hours before timing out, which is of little use in a test. The resource fails immediately and names the record it waited for.
|
|
793
779
|
|
|
794
|
-
##
|
|
795
|
-
|
|
796
|
-
Simulated ACM supports:
|
|
780
|
+
## Supported operations
|
|
797
781
|
|
|
798
782
|
- `RequestCertificateCommand`, `DescribeCertificateCommand`, and `ListCertificatesCommand`
|
|
799
783
|
- DNS validation against records in simulated Route53
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
# Simulated API Gateway REST APIs
|
|
2
2
|
|
|
3
|
-
Yulin
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
`@kensio/yulin/apigateway` subpath.
|
|
3
|
+
Yulin simulates API Gateway REST APIs (the v1 API) with Lambda proxy integrations. Use
|
|
4
|
+
`simAws.apiGateway()` directly or intercept an `APIGatewayClient`. REST API types are available from
|
|
5
|
+
`@kensio/yulin/apigateway`.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
[API Gateway HTTP APIs](https://yulinsim.dev/services/apigatewayv2/).
|
|
10
|
-
stays out of `simAws.apiGatewayV2()`.
|
|
11
|
-
|
|
12
|
-
A handler behind a REST API can be tested against a real HTTP request, with no hand-built event to
|
|
13
|
-
keep in step.
|
|
7
|
+
HTTP APIs use the separate `simAws.apiGatewayV2()` service. See
|
|
8
|
+
[API Gateway HTTP APIs](https://yulinsim.dev/services/apigatewayv2/).
|
|
14
9
|
|
|
15
10
|
## Creating a REST API
|
|
16
11
|
|
|
@@ -48,13 +43,13 @@ console.log(typeof created.rootResourceId);
|
|
|
48
43
|
// "string"
|
|
49
44
|
```
|
|
50
45
|
|
|
51
|
-
A REST API name
|
|
52
|
-
|
|
46
|
+
A REST API name is a label. Two APIs in the same account and region may share a name. Use the ID
|
|
47
|
+
returned by `CreateRestApiCommand` to address the API.
|
|
53
48
|
|
|
54
49
|
## Building the path tree
|
|
55
50
|
|
|
56
|
-
A REST API path
|
|
57
|
-
segment
|
|
51
|
+
A REST API stores its path as a tree of resources. Each resource holds one segment.
|
|
52
|
+
`CreateResourceCommand` adds a segment below a parent and returns its full path.
|
|
58
53
|
|
|
59
54
|
```typescript sim-apigateway-resource-tree
|
|
60
55
|
/**
|
|
@@ -103,18 +98,17 @@ console.log(listed.items.map((resource) => resource.path));
|
|
|
103
98
|
// [ "/", "/orders", "/orders/{orderId}" ]
|
|
104
99
|
```
|
|
105
100
|
|
|
106
|
-
A segment
|
|
107
|
-
|
|
108
|
-
holding one therefore takes no children, and adding under it is refused.
|
|
101
|
+
A segment may be literal (`orders`), a path parameter (`{orderId}`), or a greedy path parameter
|
|
102
|
+
(`{proxy+}`). A greedy segment matches the rest of the path and cannot have children.
|
|
109
103
|
|
|
110
104
|
Deleting a resource deletes everything under it, the way real API Gateway does. The root resource
|
|
111
105
|
stays, because every REST API has one.
|
|
112
106
|
|
|
113
107
|
## Methods and their integrations
|
|
114
108
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
`PutMethodCommand` declares a method on a resource. `PutIntegrationCommand` connects that method to
|
|
110
|
+
a Lambda function. Both commands use the resource ID and HTTP method because a method has no ID of
|
|
111
|
+
its own.
|
|
118
112
|
|
|
119
113
|
```typescript sim-apigateway-method-integration
|
|
120
114
|
/**
|
|
@@ -184,18 +178,15 @@ console.log(method.methodIntegration?.uri);
|
|
|
184
178
|
// echoed back as one line, the way it was configured
|
|
185
179
|
```
|
|
186
180
|
|
|
187
|
-
The integration URI
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
A version or alias qualifier on the end of the ARN is kept. An integration built on an alias
|
|
191
|
-
therefore follows that alias.
|
|
181
|
+
The integration URI may be a function ARN or the API Gateway invocation URI shown above. CDK emits
|
|
182
|
+
the first form. CloudFormation templates and OpenAPI documents commonly emit the second. A version
|
|
183
|
+
or alias qualifier is preserved. An integration that names an alias follows that alias.
|
|
192
184
|
|
|
193
185
|
Deleting a method deletes its integration, because a REST API integration is part of the method.
|
|
194
186
|
|
|
195
187
|
## Deployments and stages
|
|
196
188
|
|
|
197
|
-
A REST API
|
|
198
|
-
that URL. An HTTP API can serve a `$default` stage at the root, and a REST API always carries the
|
|
189
|
+
A REST API gets an invocation URL when it has a stage. The stage name is always the first path
|
|
199
190
|
segment.
|
|
200
191
|
|
|
201
192
|
```typescript sim-apigateway-deploy-stage
|
|
@@ -249,15 +240,13 @@ console.log(restApi?.invokeUrl("prod"));
|
|
|
249
240
|
`invokeUrl` is a simulator accessor. Real API Gateway reports no endpoint for a REST API and leaves
|
|
250
241
|
callers to build the URL themselves. CDK's `RestApi.urlForPath` builds the same one.
|
|
251
242
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
resources. A test that edits a method sees the change straight away, with no redeployment in
|
|
255
|
-
between. That is the one place this departs from AWS.
|
|
243
|
+
Stages serve the API's current resources and methods. Changes take effect immediately. AWS freezes
|
|
244
|
+
the configuration in a deployment and requires another deployment before changes become visible.
|
|
256
245
|
|
|
257
246
|
## Serving a request
|
|
258
247
|
|
|
259
|
-
A request to
|
|
260
|
-
|
|
248
|
+
A request to a stage selects a resource and method, then invokes its integration. The Lambda result
|
|
249
|
+
becomes the HTTP response.
|
|
261
250
|
|
|
262
251
|
```typescript sim-apigateway-serve
|
|
263
252
|
/**
|
|
@@ -300,14 +289,13 @@ console.log(await response.text());
|
|
|
300
289
|
await srv.close();
|
|
301
290
|
```
|
|
302
291
|
|
|
303
|
-
`simRestApiLambdaProxyFactory`
|
|
304
|
-
invoke permission and
|
|
305
|
-
about none of them. A test about the commands themselves sends them one at a time.
|
|
292
|
+
`simRestApiLambdaProxyFactory` creates a ready-to-call REST API in one operation. It creates the
|
|
293
|
+
function, resources, method, integration, invoke permission and deployment.
|
|
306
294
|
|
|
307
295
|
### The event a handler receives
|
|
308
296
|
|
|
309
|
-
A REST API sends payload format 1.0.
|
|
310
|
-
|
|
297
|
+
A REST API sends a payload format 1.0 event. Headers and query parameters appear in both single-value
|
|
298
|
+
and multi-value maps. Empty values use `null`:
|
|
311
299
|
|
|
312
300
|
| Field | Empty case |
|
|
313
301
|
| ---------------------------------------------------------- | ---------- |
|
|
@@ -319,18 +307,15 @@ headers and the query string, and it sends `null` for an empty map where format
|
|
|
319
307
|
client asked for, stage segment and all. A handler behind a `{proxy+}` reads `resource` to tell which
|
|
320
308
|
template caught its request.
|
|
321
309
|
|
|
322
|
-
|
|
323
|
-
|
|
310
|
+
REST API and HTTP API events have different shapes. A handler shared by both must handle both
|
|
311
|
+
formats explicitly.
|
|
324
312
|
|
|
325
313
|
### The response a handler returns
|
|
326
314
|
|
|
327
|
-
A REST API proxy
|
|
328
|
-
|
|
329
|
-
`Internal server error`. That is what real API Gateway answers when it cannot read the integration
|
|
330
|
-
response. Payload format 2.0 is the lenient one, wrapping an unrecognised value in a 200, and a
|
|
331
|
-
handler relying on that behaves differently here for the same reason it does on AWS.
|
|
315
|
+
A REST API proxy result must contain a numeric `statusCode`. Use `multiValueHeaders` to send the
|
|
316
|
+
same header more than once. An invalid result produces a 502 response with `Internal server error`.
|
|
332
317
|
|
|
333
|
-
###
|
|
318
|
+
### Responses before an integration runs
|
|
334
319
|
|
|
335
320
|
| Case | Answer |
|
|
336
321
|
| --------------------------------------------- | ---------------------------------- |
|
|
@@ -340,8 +325,8 @@ handler relying on that behaves differently here for the same reason it does on
|
|
|
340
325
|
| No integration, no function, or no permission | 502 `Internal server error` |
|
|
341
326
|
| The handler threw | 502 `Internal server error` |
|
|
342
327
|
|
|
343
|
-
`Missing Authentication Token`
|
|
344
|
-
|
|
328
|
+
API Gateway uses `Missing Authentication Token` for an unmatched path or method, even when the
|
|
329
|
+
request did not require authentication.
|
|
345
330
|
|
|
346
331
|
### The invoke permission
|
|
347
332
|
|
|
@@ -467,9 +452,8 @@ is named `ANY`, whatever method the client sent.
|
|
|
467
452
|
|
|
468
453
|
Real `CreateStage` carries no method settings. AWS sets them with `UpdateStage` patch operations,
|
|
469
454
|
which are outside this simulation, or from an `AWS::ApiGateway::Stage`. The `methodSettings` input
|
|
470
|
-
above is
|
|
471
|
-
`CreateStageCommand`
|
|
472
|
-
them.
|
|
455
|
+
above is specific to Yulin and lets a test configure throttling without a template. The SDK's
|
|
456
|
+
`CreateStageCommand` has no such member. `GetStage` reports the settings in the AWS response shape.
|
|
473
457
|
|
|
474
458
|
## Authorizing a method
|
|
475
459
|
|
|
@@ -482,8 +466,8 @@ function answers an IAM policy document, evaluated for `execute-api:Invoke` agai
|
|
|
482
466
|
request being made. Whatever `context` it returns reaches the handler.
|
|
483
467
|
|
|
484
468
|
A `REQUEST` authorizer sends the whole request to its function (see
|
|
485
|
-
[A REQUEST authorizer](#a-request-authorizer))
|
|
486
|
-
|
|
469
|
+
[A REQUEST authorizer](#a-request-authorizer)). It can identify a caller from several headers or
|
|
470
|
+
query parameters. It answers the same policy document.
|
|
487
471
|
|
|
488
472
|
```typescript sim-apigateway-token-authorizer
|
|
489
473
|
/**
|
|
@@ -674,9 +658,8 @@ left out.
|
|
|
674
658
|
| `pathParameters`, `stageVariables` | What the resource path captured, and the stage's variables |
|
|
675
659
|
| `requestContext` | The same block a handler gets, without the `authorizer` member |
|
|
676
660
|
|
|
677
|
-
The maps are empty objects
|
|
678
|
-
|
|
679
|
-
`event.queryStringParameters.plan` finds nothing rather than throwing.
|
|
661
|
+
The maps are empty objects when the request supplies no values. Integration events use `null` for
|
|
662
|
+
the same fields. AWS's authorizer event examples use `{}`.
|
|
680
663
|
|
|
681
664
|
### Answering with a policy
|
|
682
665
|
|
|
@@ -710,8 +693,8 @@ authorizer's own logs, and IAM never sees it.
|
|
|
710
693
|
### The context the handler receives
|
|
711
694
|
|
|
712
695
|
`context` reaches the handler under `requestContext.authorizer`, flattened alongside `principalId`.
|
|
713
|
-
Payload format 2.0 keeps the context in
|
|
714
|
-
|
|
696
|
+
Payload format 2.0 keeps the context in its own block. A handler shared with an HTTP API must handle
|
|
697
|
+
both shapes.
|
|
715
698
|
|
|
716
699
|
An open method has no caller to describe, and leaves `requestContext.authorizer` out of the event
|
|
717
700
|
altogether.
|
|
@@ -976,9 +959,8 @@ An admitted caller reaches the handler under `requestContext.identity`.
|
|
|
976
959
|
| `user` | The caller's ARN |
|
|
977
960
|
| `userArn` | The caller's ARN |
|
|
978
961
|
|
|
979
|
-
Real API Gateway puts the unique
|
|
980
|
-
|
|
981
|
-
every field that can be filled from it.
|
|
962
|
+
Real API Gateway puts the principal's unique ID in `caller` and `user`, such as `AIDA...` for a user.
|
|
963
|
+
The simulation receives only the caller ARN and uses it for each identity field it can populate.
|
|
982
964
|
|
|
983
965
|
A method of any other authorization type leaves those four `null`, and so does an `AWS_IAM` method
|
|
984
966
|
called by a principal with no ARN behind it. `accessKey`, `apiKey`, `apiKeyId`, `principalOrgId` and
|
|
@@ -987,8 +969,8 @@ request itself and are filled for every method.
|
|
|
987
969
|
|
|
988
970
|
## Authorizing a method with a user pool
|
|
989
971
|
|
|
990
|
-
A `COGNITO_USER_POOLS` authorizer verifies the token
|
|
991
|
-
|
|
972
|
+
A `COGNITO_USER_POOLS` authorizer verifies the token against the keys published by its user pools.
|
|
973
|
+
It uses no Lambda function or returned policy.
|
|
992
974
|
`CreateAuthorizerCommand` takes the pools as `providerARNs`, and `PutMethodCommand` binds the
|
|
993
975
|
authorizer to a method with `authorizationType: "COGNITO_USER_POOLS"`.
|
|
994
976
|
|
|
@@ -1118,8 +1100,8 @@ two groups arrive as `[Admins Readers]`.
|
|
|
1118
1100
|
}
|
|
1119
1101
|
```
|
|
1120
1102
|
|
|
1121
|
-
An HTTP API puts the same claims under `requestContext.authorizer.jwt.claims`, with
|
|
1122
|
-
|
|
1103
|
+
An HTTP API puts the same claims under `requestContext.authorizer.jwt.claims`, with scopes beside
|
|
1104
|
+
them. A handler shared by both API types must handle both shapes.
|
|
1123
1105
|
|
|
1124
1106
|
### Scopes
|
|
1125
1107
|
|
|
@@ -1141,9 +1123,8 @@ token, since an id token carries no `scope` claim at all.
|
|
|
1141
1123
|
| A token that has expired, or has no `exp` at all | 401 `Unauthorized` |
|
|
1142
1124
|
| A verified token claiming none of the method's scopes | 403 `User is not authorized to access this resource` |
|
|
1143
1125
|
|
|
1144
|
-
|
|
1145
|
-
token was
|
|
1146
|
-
token was accepted, and it does not allow this method.
|
|
1126
|
+
Token parsing and claim failures return the same 401 response. An unmet scope returns 403 because
|
|
1127
|
+
the token was valid but did not allow the method.
|
|
1147
1128
|
|
|
1148
1129
|
The token is taken with or without the `Bearer` scheme in front of it. The identity source is one
|
|
1149
1130
|
header, as it is for a `TOKEN` authorizer.
|
|
@@ -1503,7 +1484,7 @@ AWS sorts what an import finds into three categories, and the third is valid Ope
|
|
|
1503
1484
|
leaves unsupported without a request validator. AWS ignores it silently, and so does this:
|
|
1504
1485
|
`requestBody`, the content schemas under `responses`, `components.schemas`, and an operation's
|
|
1505
1486
|
`parameters`, `summary`, `description` and `tags`. Request validation is refused at the root of the
|
|
1506
|
-
document
|
|
1487
|
+
document. A request body is not checked against the declared schema.
|
|
1507
1488
|
`operationId` is ignored too, since it only supplies the `OperationName` a method carries for
|
|
1508
1489
|
documentation.
|
|
1509
1490
|
|
|
@@ -1902,8 +1883,8 @@ and `Stage`, including the template CDK synthesizes from a `RestApi` or a `Lambd
|
|
|
1902
1883
|
that is the form the platform's `Headers` hands over. Real API Gateway reports each separately.
|
|
1903
1884
|
- A Lambda authorizer's `context` reaches the handler as the authorizer returned it. AWS accepts a
|
|
1904
1885
|
string, a number or a boolean for each value, and how it renders them is not published.
|
|
1905
|
-
- A Cognito authorizer
|
|
1906
|
-
|
|
1886
|
+
- A Cognito authorizer resolves a `providerARN` by pool ID across the simulated accounts.
|
|
1887
|
+
`identityValidationExpression`, which real
|
|
1907
1888
|
API Gateway matches a token against before verifying it, is outside this.
|
|
1908
1889
|
- Binary media types negotiated by `Accept`, CORS preflight and gateway responses are outside this.
|
|
1909
1890
|
A response body is still base64 decoded when the handler says `isBase64Encoded`.
|