Skip to content

Commit 6bb142e

Browse files
authored
fix(scheduler-targets-alpha): scope down permissions for sqs and kinesis stream targets (#32122)
### Issue # (if applicable) Tracking #31785 ### Reason for this change We want to enforce principle of least privilege when granting target actions to the scheduler execution role. From the Scheduler docs, only `kinesis:PutRecord` and `sqs:SendMessage` are required. Previously we were using built-in grant methods for these targets that granted additional permissions. If wider permissions are needed the user can always provide their own IAM role for the scheduler to use. KMS permissions references from service docs: - Kinesis stream: https://docs.aws.amazon.com/streams/latest/dev/permissions-user-key-KMS.html#example-producer-permissions - SQS Queue: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse ### Description of changes - Explicitly grant only the necessary target permissions - If target uses customer-managed key for SSEKMS, grant key permissions to role as well ### Description of how you validated changes - updated unit tests - deployed stacks with SSEKMS targets and verified the scheduled actions succeed ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 1bbb456 commit 6bb142e

27 files changed

+160
-121
lines changed

packages/@aws-cdk/aws-scheduler-targets-alpha/lib/kinesis-stream-put-record.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ export class KinesisStreamPutRecord extends ScheduleTargetBase implements ISched
3434
}
3535

3636
protected addTargetActionToRole(role: IRole): void {
37-
this.stream.grantWrite(role);
37+
this.stream.grant(role, 'kinesis:PutRecord', 'kinesis:PutRecords');
38+
this.stream.encryptionKey?.grant(role, 'kms:GenerateDataKey*');
3839
}
3940

4041
protected bindBaseTargetConfig(_schedule: ISchedule): ScheduleTargetConfig {

packages/@aws-cdk/aws-scheduler-targets-alpha/lib/sqs-send-message.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export class SqsSendMessage extends ScheduleTargetBase implements IScheduleTarge
4949
}
5050

5151
protected addTargetActionToRole(role: IRole): void {
52-
this.queue.grantSendMessages(role);
52+
this.queue.grant(role, 'sqs:SendMessage');
53+
this.queue.encryptionMasterKey?.grant(role, 'kms:Decrypt', 'kms:GenerateDataKey*');
5354
}
5455

5556
protected bindBaseTargetConfig(_schedule: ISchedule): ScheduleTargetConfig {

packages/@aws-cdk/aws-scheduler-targets-alpha/lib/target.ts

-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ export interface ScheduleTargetBaseProps {
1616
* permissions to interact with the templated target. If you wish you may specify your own IAM role, then the templated targets
1717
* will grant minimal required permissions.
1818
*
19-
* Universal target automatically create an IAM role if you do not specify your own IAM role.
20-
* However, in comparison with templated targets, for universal targets you must grant the required
21-
* IAM permissions yourself.
22-
*
2319
* @default - created by target
2420
*/
2521
readonly role?: iam.IRole;

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.inspector-start-assessment-run.ts

-2
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,3 @@ integrationTest.assertions.awsApiCall('Inspector', 'listAssessmentRuns', {
4444
interval: cdk.Duration.seconds(30),
4545
totalTimeout: cdk.Duration.minutes(10),
4646
});
47-
48-
app.synth();

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-data-firehose-put-record.ts

-2
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,3 @@ if (objects instanceof AwsApiCall && objects.waiterProvider) {
6969
Resource: ['*'],
7070
});
7171
}
72-
73-
app.synth();

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/aws-cdk-scheduler-targets-kinesis-stream-put-record.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/aws-cdk-scheduler-targets-kinesis-stream-put-record.template.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
]
2020
}
2121
},
22-
"UpdateReplacePolicy": "Retain",
23-
"DeletionPolicy": "Retain"
22+
"UpdateReplacePolicy": "Delete",
23+
"DeletionPolicy": "Delete"
2424
},
2525
"Schedule83A77FD1": {
2626
"Type": "AWS::Scheduler::Schedule",
@@ -106,7 +106,6 @@
106106
"Statement": [
107107
{
108108
"Action": [
109-
"kinesis:ListShards",
110109
"kinesis:PutRecord",
111110
"kinesis:PutRecords"
112111
],

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/integrationtestkinesisstreamputrecordDefaultTestDeployAssert6B5E163F.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/integrationtestkinesisstreamputrecordDefaultTestDeployAssert6B5E163F.template.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/manifest.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.js.snapshot/tree.json

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.kinesis-stream-put-record.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const partitionKey = 'key';
2121
const stream = new Stream(stack, 'MyStream', {
2222
streamName,
2323
shardCount: 1,
24+
removalPolicy: cdk.RemovalPolicy.DESTROY,
2425
});
2526

2627
new scheduler.Schedule(stack, 'Schedule', {
@@ -58,4 +59,3 @@ getRecords.assertAtPath(
5859
totalTimeout: cdk.Duration.minutes(10),
5960
});
6061

61-
app.synth();

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sage-maker-start-pipeline-execution.ts

-2
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,3 @@ integrationTest.assertions.awsApiCall('Sagemaker', 'listPipelineExecutions', {
135135
interval: cdk.Duration.seconds(30),
136136
totalTimeout: cdk.Duration.minutes(10),
137137
});
138-
139-
app.synth();

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/aws-cdk-schedule-dlq.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/aws-cdk-schedule-dlq.template.json

+14-20
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,23 @@
2727
"Properties": {
2828
"PolicyDocument": {
2929
"Statement": [
30-
{
31-
"Action": [
32-
"sqs:GetQueueAttributes",
33-
"sqs:GetQueueUrl",
34-
"sqs:SendMessage"
35-
],
36-
"Effect": "Allow",
37-
"Resource": {
38-
"Fn::GetAtt": [
39-
"ScheduleTargetQueueFA42B954",
40-
"Arn"
41-
]
42-
}
43-
},
4430
{
4531
"Action": "sqs:SendMessage",
4632
"Effect": "Allow",
47-
"Resource": {
48-
"Fn::GetAtt": [
49-
"ScheduleDeadLetterQueue0D6B48D2",
50-
"Arn"
51-
]
52-
}
33+
"Resource": [
34+
{
35+
"Fn::GetAtt": [
36+
"ScheduleDeadLetterQueue0D6B48D2",
37+
"Arn"
38+
]
39+
},
40+
{
41+
"Fn::GetAtt": [
42+
"ScheduleTargetQueueFA42B954",
43+
"Arn"
44+
]
45+
}
46+
]
5347
}
5448
],
5549
"Version": "2012-10-17"

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/integtestscheduledlqDefaultTestDeployAssertC769CF31.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/integtestscheduledlqDefaultTestDeployAssertC769CF31.template.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/manifest.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.schedule-with-dlq.js.snapshot/tree.json

+15-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sqs-send-message.js.snapshot/aws-cdk-schedule.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sqs-send-message.js.snapshot/aws-cdk-schedule.template.json

+1-5
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,7 @@
9292
"PolicyDocument": {
9393
"Statement": [
9494
{
95-
"Action": [
96-
"sqs:GetQueueAttributes",
97-
"sqs:GetQueueUrl",
98-
"sqs:SendMessage"
99-
],
95+
"Action": "sqs:SendMessage",
10096
"Effect": "Allow",
10197
"Resource": {
10298
"Fn::GetAtt": [

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sqs-send-message.js.snapshot/integsqssendmessageDefaultTestDeployAssert883D0D33.assets.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sqs-send-message.js.snapshot/integsqssendmessageDefaultTestDeployAssert883D0D33.template.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/aws-scheduler-targets-alpha/test/integ.sqs-send-message.js.snapshot/manifest.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)