Skip to content

Commit 18f1e9f

Browse files
committed
refactor: use Cognito auth pattern for kinesis E2E infra\n\nFollow the same pattern as Analytics/Pinpoint and the Android KDS\nlibrary: include auth (Cognito) in the backend and grant the\nauthenticated IAM role permissions to Kinesis/Firehose resources.\n\nThis replaces the custom Secrets Manager credential injection with\nthe standard fetch_backends workflow pattern, making E2E tests use\nCognito-authenticated credentials like real customers would.\n\n- Add auth resource with pre-sign-up auto-confirm trigger\n- Grant authenticatedUserIamRole Kinesis and Firehose permissions\n- Rewrite E2E workflow to use fetch_backends composite action\n- Remove custom KINESIS_E2E secret fetching from workflow"
1 parent f8687db commit 18f1e9f

4 files changed

Lines changed: 74 additions & 55 deletions

File tree

.github/workflows/kinesis_e2e.yaml

Lines changed: 14 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ jobs:
3333
steps:
3434
- name: Git Checkout
3535
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
36-
37-
- name: Git Submodules
38-
run: git submodule update --init
36+
with:
37+
persist-credentials: false
38+
submodules: true
3939

4040
- name: Setup Flutter
4141
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # 2.21.0
@@ -59,26 +59,16 @@ jobs:
5959
timeout-minutes: 20
6060
run: aft bootstrap --fail-fast --include=aws_kinesis_datastreams --verbose
6161

62-
- name: Configure AWS credentials
63-
uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # 3.0.1
62+
- name: Fetch Amplify backend configurations
63+
uses: ./.github/composite_actions/fetch_backends
6464
with:
6565
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
6666
aws-region: ${{ secrets.AWS_REGION }}
67-
68-
- name: Fetch Kinesis E2E secrets
69-
uses: aws-actions/aws-secretsmanager-get-secrets@022e8919774ecb75e8e375656d7b1898936ab878 # 1.0.4
70-
with:
71-
secret-ids: |
72-
KINESIS_E2E,${{ secrets.KINESIS_E2E_SECRET_ARN }}
73-
parse-json-secrets: true
67+
scope: aws_kinesis_datastreams
68+
secret-identifier: ${{ secrets.AWS_SECRET_IDENTIFIER }}
7469

7570
- name: Run E2E tests
7671
working-directory: packages/kinesis/aws_kinesis_datastreams
77-
env:
78-
TEST_ACCESS_KEY_ID: ${{ env.KINESIS_E2E_ACCESS_KEY_ID }}
79-
TEST_SECRET_ACCESS_KEY: ${{ env.KINESIS_E2E_SECRET_ACCESS_KEY }}
80-
TEST_REGION: ${{ secrets.AWS_REGION }}
81-
TEST_STREAM_NAME: ${{ env.KINESIS_E2E_STREAM_NAME }}
8272
run: dart test test/e2e/ --tags=e2e
8373

8474
- name: Log success/failure
@@ -104,9 +94,9 @@ jobs:
10494
steps:
10595
- name: Git Checkout
10696
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
107-
108-
- name: Git Submodules
109-
run: git submodule update --init
97+
with:
98+
persist-credentials: false
99+
submodules: true
110100

111101
- name: Setup Flutter
112102
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # 2.21.0
@@ -130,26 +120,16 @@ jobs:
130120
timeout-minutes: 20
131121
run: aft bootstrap --fail-fast --include=aws_amazon_firehose --verbose
132122

133-
- name: Configure AWS credentials
134-
uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # 3.0.1
123+
- name: Fetch Amplify backend configurations
124+
uses: ./.github/composite_actions/fetch_backends
135125
with:
136126
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
137127
aws-region: ${{ secrets.AWS_REGION }}
138-
139-
- name: Fetch Kinesis E2E secrets
140-
uses: aws-actions/aws-secretsmanager-get-secrets@022e8919774ecb75e8e375656d7b1898936ab878 # 1.0.4
141-
with:
142-
secret-ids: |
143-
KINESIS_E2E,${{ secrets.KINESIS_E2E_SECRET_ARN }}
144-
parse-json-secrets: true
128+
scope: aws_amazon_firehose
129+
secret-identifier: ${{ secrets.AWS_SECRET_IDENTIFIER }}
145130

146131
- name: Run E2E tests
147132
working-directory: packages/kinesis/aws_amazon_firehose
148-
env:
149-
TEST_ACCESS_KEY_ID: ${{ env.KINESIS_E2E_ACCESS_KEY_ID }}
150-
TEST_SECRET_ACCESS_KEY: ${{ env.KINESIS_E2E_SECRET_ACCESS_KEY }}
151-
TEST_REGION: ${{ secrets.AWS_REGION }}
152-
TEST_DELIVERY_STREAM_NAME: ${{ env.KINESIS_E2E_DELIVERY_STREAM_NAME }}
153133
run: dart test test/e2e/ --tags=e2e
154134

155135
- name: Log success/failure
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { PreSignUpTriggerHandler } from "aws-lambda";
2+
import { preSignUpTriggerHandler } from "infra-common";
3+
4+
export const handler: PreSignUpTriggerHandler = preSignUpTriggerHandler;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { defineAuth, defineFunction } from "@aws-amplify/backend";
2+
3+
export const preSignUp = defineFunction({
4+
name: "pre-sign-up",
5+
entry: "./pre-sign-up-handler.ts",
6+
});
7+
8+
/**
9+
* Define and configure your auth resource
10+
* @see https://docs.amplify.aws/gen2/build-a-backend/auth
11+
*/
12+
export const auth = defineAuth({
13+
loginWith: {
14+
email: true,
15+
},
16+
triggers: {
17+
preSignUp,
18+
},
19+
});

infra-gen2/backends/kinesis/main/amplify/backend.ts

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,29 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import { defineBackend } from "@aws-amplify/backend";
5-
import * as cdk from "aws-cdk-lib";
5+
import { Duration, RemovalPolicy } from "aws-cdk-lib";
66
import * as iam from "aws-cdk-lib/aws-iam";
77
import * as kinesis from "aws-cdk-lib/aws-kinesis";
88
import * as firehose from "aws-cdk-lib/aws-kinesisfirehose";
99
import * as s3 from "aws-cdk-lib/aws-s3";
10+
import { auth } from "./auth/resource";
1011

11-
/**
12-
* Kinesis E2E test backend.
13-
*
14-
* Provisions Kinesis Data Streams and Amazon Data Firehose resources
15-
* for E2E testing. No Amplify categories are needed — the Amplify
16-
* backend is used only as a CDK entry-point.
17-
*
18-
* Test credentials and resource names are stored in a dedicated
19-
* Secrets Manager secret managed outside this stack.
20-
*/
21-
const backend = defineBackend({});
12+
const backend = defineBackend({
13+
auth,
14+
});
2215

23-
const kinesisStack = backend.createStack("KinesisTestResources");
16+
const kinesisStack = backend.createStack("KinesisStack");
2417

2518
// --- Kinesis Data Stream ---
26-
new kinesis.Stream(kinesisStack, "TestStream", {
27-
streamName: "kinesis-e2e-data-stream",
19+
const stream = new kinesis.Stream(kinesisStack, "TestStream", {
20+
streamName: "amplify-kinesis-test-stream",
2821
shardCount: 1,
29-
retentionPeriod: cdk.Duration.hours(24),
30-
removalPolicy: cdk.RemovalPolicy.DESTROY,
22+
retentionPeriod: Duration.hours(24),
3123
});
3224

3325
// --- S3 bucket (Firehose destination) ---
3426
const bucket = new s3.Bucket(kinesisStack, "FirehoseDestBucket", {
35-
removalPolicy: cdk.RemovalPolicy.DESTROY,
27+
removalPolicy: RemovalPolicy.DESTROY,
3628
autoDeleteObjects: true,
3729
enforceSSL: true,
3830
});
@@ -44,11 +36,11 @@ const firehoseRole = new iam.Role(kinesisStack, "FirehoseS3Role", {
4436
bucket.grantReadWrite(firehoseRole);
4537

4638
// --- Firehose delivery stream ---
47-
new firehose.CfnDeliveryStream(
39+
const deliveryStream = new firehose.CfnDeliveryStream(
4840
kinesisStack,
4941
"TestDeliveryStream",
5042
{
51-
deliveryStreamName: "kinesis-e2e-delivery-stream",
43+
deliveryStreamName: "amplify-kinesis-test-delivery-stream",
5244
s3DestinationConfiguration: {
5345
bucketArn: bucket.bucketArn,
5446
roleArn: firehoseRole.roleArn,
@@ -58,5 +50,29 @@ new firehose.CfnDeliveryStream(
5850
sizeInMBs: 1,
5951
},
6052
},
61-
},
53+
}
54+
);
55+
56+
// Grant authenticated users permission to put records to Kinesis Data Streams
57+
backend.auth.resources.authenticatedUserIamRole.addToPrincipalPolicy(
58+
new iam.PolicyStatement({
59+
actions: [
60+
"kinesis:PutRecord",
61+
"kinesis:PutRecords",
62+
"kinesis:DescribeStream",
63+
],
64+
resources: [stream.streamArn],
65+
})
66+
);
67+
68+
// Grant authenticated users permission to put records to Firehose
69+
backend.auth.resources.authenticatedUserIamRole.addToPrincipalPolicy(
70+
new iam.PolicyStatement({
71+
actions: [
72+
"firehose:PutRecord",
73+
"firehose:PutRecordBatch",
74+
"firehose:DescribeDeliveryStream",
75+
],
76+
resources: [deliveryStream.attrArn],
77+
})
6278
);

0 commit comments

Comments
 (0)