Как показано в ответе выше, вам нужно будет указать ключ KMS в определении темы SNS. Вы можете использовать ключ KMS по умолчанию для SNS (псевдоним aws/sns
) или создать свой собственный
. Ниже вы можете посмотреть в CloudFormation, как создать зашифрованную тему и ключ KMS в одном шаблоне - используя свой собственный KMS. Ключ. Политика ключей настроена так, чтобы разрешить администрирование и потребление всей учетной записью AWS, хотя вы, вероятно, захотите заблокировать ее, используя принцип наименьших привилегий, в зависимости от требований безопасности среды, в которой вы работаете.
---
AWSTemplateFormatVersion: '2010-09-09'
Description: Demo template for Encrypted SNS Topic
Resources:
SNSKMSKey:
Type: 'AWS::KMS::Key'
Properties:
Description: Demo KMS Key Policy
Enabled: true
EnableKeyRotation: true
KeyPolicy:
Version: 2012-10-17
Id: KmsKeyPolicy
Statement:
- Sid: SimpleKeyPolicyAllowAccountAdmin
Effect: Allow
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action:
- 'kms:*'
Resource: '*'
- Sid: SimpleKeyPolicyAllowAccountUsage
Effect: Allow
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action:
- 'kms:Decrypt'
- 'kms:Encrypt'
- 'kms:GenerateDataKey*'
- 'kms:DescribeKey'
Resource: '*'
SNSKmeKeyAlias:
Type: "AWS::KMS::Alias"
Properties:
AliasName: !Sub "alias/${AWS::StackName}-SNSEncryptionKey"
TargetKeyId: !Ref SNSKMSKey
# -- Encrypted SNS Topic -- #
EncryptedSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub "${AWS::StackName}-EncryptedSNSTopic"
KmsMasterKeyId: !Ref SNSKMSKey
Outputs:
KmsKeyId:
Value: !Ref SNSKMSKey
TopicArn:
Value: !Ref EncryptedSNSTopic