本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SNS 中的数据保护策略操作
以下数据保护策略示例可用于审计和拒绝敏感数据。有关包含示例应用程序的完整教程,请参阅 Introducing message data protection for Amazon SNS
审计操作
审计操作对主题入站消息进行采样,并记录 AWS 目标中发现的敏感数据。采样率可以是 0-99 之间的整数。此操作需要以下类型的日志记录目标之一:
-
FindingsDestination— Amazon SNS 主题在有效负载中发现敏感数据时的记录目标。
-
NoFindingsDestination— 当 Amazon SNS 主题在有效负载中找不到敏感数据时的日志记录目标。
您可以在以下每种日志目标类型 AWS 服务 中使用以下内容:
-
Amaz CloudWatch on Logs(可选)—
LogGroup
必须位于主题区域中,并且名称必须以 /aws/vendedlogs/ 开头。 -
Amazon Data Firehose(可选)–
DeliveryStream
必须位于主题区域并且使用 Direct PUT 作为传输流的来源。有关其他详细信息,请参阅《Amazon Data Firehose 开发人员指南》中的来源、目标和名称。 -
Amazon S3(可选)– Amazon S3 存储桶名称。要使用启用了 SSE-KMS 加密的 Amazon S3 桶,需要执行额外操作。
{ "Operation": { "Audit": { "SampleRate": "99", "FindingsDestination": { "CloudWatchLogs": { "LogGroup": "/aws/vendedlogs/log-group-name" }, "Firehose": { "DeliveryStream": "delivery-stream-name" }, "S3": { "Bucket": "bucket-name" } }, "NoFindingsDestination": { "CloudWatchLogs": { "LogGroup": "/aws/vendedlogs/log-group-name" }, "Firehose": { "DeliveryStream": "delivery-stream-name" }, "S3": { "Bucket": "bucket-name" } } } } }
指定日志目标时所需的权限
在数据保护策略中指定日志记录目标时,对于调用 Amazon SNS PutDataProtectionPolicy
API 或者带有 --data-protection-policy
参数的 CreateTopic
API 的 IAM 主体,您必须向 IAM 身份策略添加以下权限。
审计目标 | IAM 权限 |
---|---|
默认 | logs:CreateLogDelivery logs:GetLogDelivery logs:UpdateLogDelivery logs:DeleteLogDelivery logs:ListLogDeliveries |
CloudWatchLogs | logs:PutResourcePolicy logs:DescribeResourcePolicies logs:DescribeLogGroups |
Firehose | iam:CreateServiceLinkedRole firehose:TagDeliveryStream |
S3 | s3:PutBucketPolicy s3:GetBucketPolicy |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:SampleLogGroupName:*:*" ] }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "firehose:TagDeliveryStream" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": [ "arn:aws:s3:::bucket-name" ] } ] }
与 SSE-KMS 结合使用时必需的密钥策略
如果您使用 Amazon S3 存储桶作为日志目标,则可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用 (SSE-KMS) 启用服务器端加密 (SSE-KMS) 来保护存储桶中的数据。 AWS KMS keys 有关详情,请参阅《Amazon S3 用户指南》中的使用服务器端加密保护数据。
如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。
如果您选择 SSE-KMS,则必须使用客户托管密钥。您必须更新客户托管密钥的密钥策略,以便日志传输账户可以写入 S3 存储桶。有关与 SSE-KMS 一起使用的所需密钥策略的更多信息,请参阅《亚马逊 CloudWatch 日志用户指南》中的 Amazon S3 存储桶服务器端加密。
审计目标日志示例
在下例中,使用 callerPrincipal
来识别敏感内容的来源,并使用 messageID
作为参考来根据 Publish
API 响应进行检查。
{ "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf", "auditTimestamp": "2022-05-12T2:10:44Z", "callerPrincipal": "arn:aws:iam::123412341234:role/Publisher", "resourceArn": "arn:aws:sns:us-east-1:123412341234:PII-data-topic", "dataIdentifiers": [ { "name": "Name", "count": 1, "detections": [ { "start": 1, "end": 2 } ] }, { "name": "PhoneNumber", "count": 2, "detections": [ { "start": 3, "end": 4 }, { "start": 5, "end": 6 } ] } ] }
审计操作指标
当审计操作指定FindingsDestination
或NoFindingsDestination
属性时,主题所有者还会收到 CloudWatchMessagesWithFindings
和MessagesWithNoFindings
指标。

去身份识别操作
去身份识别操作会遮蔽或去除所发布或已送达消息中的敏感数据。此操作既适用于入站消息,又适用于出站消息,需要以下类型的配置之一:
-
MaskConfig— 使用下表中支持的字符进行掩码。例如,ssn:
123-45-6789
变成 ssn:###########
。{ "Operation": { "Deidentify": { "MaskConfig": { "MaskWithCharacter": "#" } } }
支持的遮蔽字符 名称 * 星号 A-Z、a-z 和 0-9 字母数字 空间 ! 感叹号 $ 美元符号 % 百分号 & & 符号 () 括号
+ 加号 , 逗号 - 连字符 . 周期 /\ 斜杠、反斜杠
# 数字符号 : 冒号 ; 分号 =, <> 等于、小于或大于号
@ at 符号 [] 方括号 ^ 插入符号 _ 下划线 ` 反引号 | 竖线 ~ 波浪符号 -
RedactConfig— 通过完全删除数据进行编辑。例如,ssn:
123-45-6789
变成 ssn:{ "Operation": { "Deidentify": { "RedactConfig": {} } }
对于入站消息,在审计操作之后会对敏感数据进行去身份识别处理,当整条消息全部为敏感数据时,SNS:Publish
API 调用方会收到以下无效参数错误。
Error code: AuthorizationError ...
拒绝操作
如果消息包含敏感数据,Deny(拒绝)操作会中断 Publish
API 请求,或者中断消息的传输。拒绝操作对象为空,因为它不需要额外配置。
"Operation": { "Deny": {} }
在入站消息上,SNS:Publish
API 调用方收到授权错误。
Error code: AuthorizationError ...
在出站消息上,Amazon SNS 主题不将消息传输到订阅。要跟踪未经授权的传输,请启用主题的传输状态日志记录。下面是传输状态日志示例:
{ "notification": { "messageMD5Sum": "29638742ffb68b32cf56f42a79bcf16b", "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf", "topicArn": "arn:aws:sns:us-east-1:123412341234:PII-data-topic", "timestamp": "2022-05-12T2:12:44Z" }, "delivery": { "deliveryId": "98236591c-56aa-51ee-a5ed-0c7d43493170", "destination": "arn:aws:sqs:us-east-1:123456789012:NoNameAccess", "providerResponse": "The topic's data protection policy prohibits this message from being delivered to <subscription-arn>", "dwellTimeMs":20, "attempts":1, "statusCode": 403 }, "status": "FAILURE" }