SQS 可以在没有特定 KMS 权限的情况下从 SNS 接收加密消息
SQS can receive encrypted message from SNS with no specific KMS permission
我是 AWS KMS(密钥管理服务)的新学员。
目前我想创建一个 SNS,它启用了服务器端加密 (SSE) 并将消息发布到订阅 Amazon SQS 队列。
Cloudformation 的资源部分是这样的:
(未显示 CMK 密钥和 SNS Arn)
Resources:
MySNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Ref TopicName
KmsMasterKeyId: (My_CMK_Key)
MySQS:
Type: AWS::SQS::Queue
Properties:
QueueName: "MySQS"
MySQSPermissions:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: MySQSPolicy
Effect: Allow
Principal: '*'
Action:
- sqs:SendMessage
Resource: !GetAtt MySQS.Arn
Condition:
ArnEquals:
aws:SourceArn: (My_SNS_ARN)
Queues:
- !Ref MySQS
MySQSSubscription:
Type: AWS::SNS::Subscription
Properties:
Protocol: sqs
Endpoint: !GetAtt MySQS.Arn
Region: !Ref AWS::Region
TopicArn: (My_SNS_ARN)
如您所见,只有 SNS 主题启用了 SSE,但 SQS 只是订阅 SNS 主题。
当我尝试向 SNS 主题发布消息时。 SQS 队列 (MySQS) 可以成功接收消息,但看起来它的 Body 没有加密(仍然是人类可读的)。
{
"Type" : "Notification",
"MessageId" : (id),
"TopicArn" : (Arn),
"Subject" : "The message from SNS topic",
"Message" : "The message should be encrypted", // Looks like it is not encrypted?
"Timestamp" : "....",
"SignatureVersion" : "1",
"Signature" : (Signature string),
"SigningCertURL" : (Signing URL),
"UnsubscribeURL" : (Unscribed URL)
}
我的问题是:
- 我如何知道来自此 SNS 主题的消息已加密?
- SQS 队列如何接收看似未加密的消息(来自 SNS 主题)?这种情况下的 SQS 队列不使用 SNS 主题使用的相同 CMK,并且也没有指定任何 KMS 权限。
- 如果我创建一个 Lambda 函数来从此 SQS 队列检索数据,它是否需要 CMK 密钥?还是可以成功读取消息?
Amazon SNS API 已通过安全 HTTP (HTTPS) 提供服务,并使用传输层安全性 (TLS) 对所有传输中 的消息进行加密。
并且在这种情况下使用的 KMS (SSE) 是静态消息加密:“...消息以加密形式存储 跨多个可用区 (AZ) 以确保持久性,并且 在交付 到订阅端点之前被解密,例如 Amazon Simple Queue Service (Amazon SQS) 队列、AWS Lambda 函数和 HTTP和 HTTPS webhooks。
长话短说,我们在这种情况下使用的 CMK 是“使所有消息在 SNS 中时都被加密”,而不是“加密传输中的消息”。
文档:https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/
我是 AWS KMS(密钥管理服务)的新学员。
目前我想创建一个 SNS,它启用了服务器端加密 (SSE) 并将消息发布到订阅 Amazon SQS 队列。
Cloudformation 的资源部分是这样的: (未显示 CMK 密钥和 SNS Arn)
Resources:
MySNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Ref TopicName
KmsMasterKeyId: (My_CMK_Key)
MySQS:
Type: AWS::SQS::Queue
Properties:
QueueName: "MySQS"
MySQSPermissions:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: MySQSPolicy
Effect: Allow
Principal: '*'
Action:
- sqs:SendMessage
Resource: !GetAtt MySQS.Arn
Condition:
ArnEquals:
aws:SourceArn: (My_SNS_ARN)
Queues:
- !Ref MySQS
MySQSSubscription:
Type: AWS::SNS::Subscription
Properties:
Protocol: sqs
Endpoint: !GetAtt MySQS.Arn
Region: !Ref AWS::Region
TopicArn: (My_SNS_ARN)
如您所见,只有 SNS 主题启用了 SSE,但 SQS 只是订阅 SNS 主题。
当我尝试向 SNS 主题发布消息时。 SQS 队列 (MySQS) 可以成功接收消息,但看起来它的 Body 没有加密(仍然是人类可读的)。
{
"Type" : "Notification",
"MessageId" : (id),
"TopicArn" : (Arn),
"Subject" : "The message from SNS topic",
"Message" : "The message should be encrypted", // Looks like it is not encrypted?
"Timestamp" : "....",
"SignatureVersion" : "1",
"Signature" : (Signature string),
"SigningCertURL" : (Signing URL),
"UnsubscribeURL" : (Unscribed URL)
}
我的问题是:
- 我如何知道来自此 SNS 主题的消息已加密?
- SQS 队列如何接收看似未加密的消息(来自 SNS 主题)?这种情况下的 SQS 队列不使用 SNS 主题使用的相同 CMK,并且也没有指定任何 KMS 权限。
- 如果我创建一个 Lambda 函数来从此 SQS 队列检索数据,它是否需要 CMK 密钥?还是可以成功读取消息?
Amazon SNS API 已通过安全 HTTP (HTTPS) 提供服务,并使用传输层安全性 (TLS) 对所有传输中 的消息进行加密。
并且在这种情况下使用的 KMS (SSE) 是静态消息加密:“...消息以加密形式存储 跨多个可用区 (AZ) 以确保持久性,并且 在交付 到订阅端点之前被解密,例如 Amazon Simple Queue Service (Amazon SQS) 队列、AWS Lambda 函数和 HTTP和 HTTPS webhooks。
长话短说,我们在这种情况下使用的 CMK 是“使所有消息在 SNS 中时都被加密”,而不是“加密传输中的消息”。
文档:https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/