|
1 | 1 | import '@aws-cdk/assert-internal/jest';
|
| 2 | +import * as kms from '@aws-cdk/aws-kms'; |
2 | 3 | import * as lambda from '@aws-cdk/aws-lambda';
|
3 | 4 | import * as sns from '@aws-cdk/aws-sns';
|
4 | 5 | import * as sqs from '@aws-cdk/aws-sqs';
|
5 |
| -import { CfnParameter, Duration, Stack, Token } from '@aws-cdk/core'; |
| 6 | +import { CfnParameter, Duration, RemovalPolicy, Stack, Token } from '@aws-cdk/core'; |
6 | 7 | import * as subs from '../lib';
|
7 | 8 |
|
8 | 9 | /* eslint-disable quote-props */
|
@@ -458,6 +459,156 @@ test('queue subscription (with raw delivery)', () => {
|
458 | 459 | });
|
459 | 460 | });
|
460 | 461 |
|
| 462 | +test('encrypted queue subscription', () => { |
| 463 | + const key = new kms.Key(stack, 'MyKey', { |
| 464 | + removalPolicy: RemovalPolicy.DESTROY, |
| 465 | + }); |
| 466 | + |
| 467 | + const queue = new sqs.Queue(stack, 'MyQueue', { |
| 468 | + encryption: sqs.QueueEncryption.KMS, |
| 469 | + encryptionMasterKey: key, |
| 470 | + }); |
| 471 | + |
| 472 | + topic.addSubscription(new subs.SqsSubscription(queue)); |
| 473 | + |
| 474 | + expect(stack).toMatchTemplate({ |
| 475 | + 'Resources': { |
| 476 | + 'MyTopic86869434': { |
| 477 | + 'Type': 'AWS::SNS::Topic', |
| 478 | + 'Properties': { |
| 479 | + 'DisplayName': 'displayName', |
| 480 | + 'TopicName': 'topicName', |
| 481 | + }, |
| 482 | + }, |
| 483 | + 'MyKey6AB29FA6': { |
| 484 | + 'Type': 'AWS::KMS::Key', |
| 485 | + 'Properties': { |
| 486 | + 'KeyPolicy': { |
| 487 | + 'Statement': [ |
| 488 | + { |
| 489 | + 'Action': [ |
| 490 | + 'kms:Create*', |
| 491 | + 'kms:Describe*', |
| 492 | + 'kms:Enable*', |
| 493 | + 'kms:List*', |
| 494 | + 'kms:Put*', |
| 495 | + 'kms:Update*', |
| 496 | + 'kms:Revoke*', |
| 497 | + 'kms:Disable*', |
| 498 | + 'kms:Get*', |
| 499 | + 'kms:Delete*', |
| 500 | + 'kms:ScheduleKeyDeletion', |
| 501 | + 'kms:CancelKeyDeletion', |
| 502 | + 'kms:GenerateDataKey', |
| 503 | + 'kms:TagResource', |
| 504 | + 'kms:UntagResource', |
| 505 | + ], |
| 506 | + 'Effect': 'Allow', |
| 507 | + 'Principal': { |
| 508 | + 'AWS': { |
| 509 | + 'Fn::Join': [ |
| 510 | + '', |
| 511 | + [ |
| 512 | + 'arn:', |
| 513 | + { |
| 514 | + 'Ref': 'AWS::Partition', |
| 515 | + }, |
| 516 | + ':iam::', |
| 517 | + { |
| 518 | + 'Ref': 'AWS::AccountId', |
| 519 | + }, |
| 520 | + ':root', |
| 521 | + ], |
| 522 | + ], |
| 523 | + }, |
| 524 | + }, |
| 525 | + 'Resource': '*', |
| 526 | + }, |
| 527 | + { |
| 528 | + 'Action': [ |
| 529 | + 'kms:Decrypt', |
| 530 | + 'kms:GenerateDataKey', |
| 531 | + ], |
| 532 | + 'Effect': 'Allow', |
| 533 | + 'Principal': { |
| 534 | + 'Service': 'sns.amazonaws.com', |
| 535 | + }, |
| 536 | + 'Resource': '*', |
| 537 | + }, |
| 538 | + ], |
| 539 | + 'Version': '2012-10-17', |
| 540 | + }, |
| 541 | + }, |
| 542 | + 'UpdateReplacePolicy': 'Delete', |
| 543 | + 'DeletionPolicy': 'Delete', |
| 544 | + }, |
| 545 | + 'MyQueueE6CA6235': { |
| 546 | + 'Type': 'AWS::SQS::Queue', |
| 547 | + 'Properties': { |
| 548 | + 'KmsMasterKeyId': { |
| 549 | + 'Fn::GetAtt': [ |
| 550 | + 'MyKey6AB29FA6', |
| 551 | + 'Arn', |
| 552 | + ], |
| 553 | + }, |
| 554 | + }, |
| 555 | + 'DeletionPolicy': 'Delete', |
| 556 | + 'UpdateReplacePolicy': 'Delete', |
| 557 | + }, |
| 558 | + 'MyQueuePolicy6BBEDDAC': { |
| 559 | + 'Type': 'AWS::SQS::QueuePolicy', |
| 560 | + 'Properties': { |
| 561 | + 'PolicyDocument': { |
| 562 | + 'Statement': [ |
| 563 | + { |
| 564 | + 'Action': 'sqs:SendMessage', |
| 565 | + 'Condition': { |
| 566 | + 'ArnEquals': { |
| 567 | + 'aws:SourceArn': { |
| 568 | + 'Ref': 'MyTopic86869434', |
| 569 | + }, |
| 570 | + }, |
| 571 | + }, |
| 572 | + 'Effect': 'Allow', |
| 573 | + 'Principal': { |
| 574 | + 'Service': 'sns.amazonaws.com', |
| 575 | + }, |
| 576 | + 'Resource': { |
| 577 | + 'Fn::GetAtt': [ |
| 578 | + 'MyQueueE6CA6235', |
| 579 | + 'Arn', |
| 580 | + ], |
| 581 | + }, |
| 582 | + }, |
| 583 | + ], |
| 584 | + 'Version': '2012-10-17', |
| 585 | + }, |
| 586 | + 'Queues': [ |
| 587 | + { |
| 588 | + 'Ref': 'MyQueueE6CA6235', |
| 589 | + }, |
| 590 | + ], |
| 591 | + }, |
| 592 | + }, |
| 593 | + 'MyQueueMyTopic9B00631B': { |
| 594 | + 'Type': 'AWS::SNS::Subscription', |
| 595 | + 'Properties': { |
| 596 | + 'Protocol': 'sqs', |
| 597 | + 'TopicArn': { |
| 598 | + 'Ref': 'MyTopic86869434', |
| 599 | + }, |
| 600 | + 'Endpoint': { |
| 601 | + 'Fn::GetAtt': [ |
| 602 | + 'MyQueueE6CA6235', |
| 603 | + 'Arn', |
| 604 | + ], |
| 605 | + }, |
| 606 | + }, |
| 607 | + }, |
| 608 | + }, |
| 609 | + }); |
| 610 | +}); |
| 611 | + |
461 | 612 | test('lambda subscription', () => {
|
462 | 613 | const fction = new lambda.Function(stack, 'MyFunc', {
|
463 | 614 | runtime: lambda.Runtime.NODEJS_10_X,
|
|
0 commit comments