了解数据保护策略 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

了解数据保护策略

什么是数据保护策略?

Amazon SNS 使用数据保护策略选择要扫描的敏感数据,以及为了保护这些数据不被 Amazon SNS 主题交换而要采取的操作。要选择感兴趣的敏感数据,您可以使用数据标识符。Amazon SNS 消息数据保护功能随后使用机器学习和模式匹配来检测敏感数据。要对找到的数据标识符采取操作,您可以定义审计拒绝操作。利用这些操作,您可以记录已找到(或未找到)的敏感数据,或者拒绝消息传送。


            消息数据保护功能使用数据保护策略监控传入和传出您的 Amazon SNS 主题的敏感数据。

数据保护策略采用什么结构?

如下图所示,数据保护策略文档包含以下元素:

  • 文档顶部的可选策略范围信息

  • 一个或多个单独语句

每个语句都包含有关单个权限的信息。


                策略语句示例

每个 Amazon SNS 主题只能定义一个数据保护策略。数据保护策略可以有一个或多个拒绝语句,以及一个审计语句。

数据保护策略的 JSON 属性

数据保护策略需要以下基本策略信息用于识别:

  • Name(名称)– 策略名称。

  • Description(描述)(可选)– 策略描述。

  • Version(版本)– 策略语言版本。当前版本为 2021-06-01。

  • Statement(语句)– 指定数据保护策略操作的语句列表。

{ "Name": "basicPII-protection", "Description": "Protect basic types of sensitive data", "Version": "2021-06-01", "Statement": [ ... ] }

策略语句的 JSON 属性

策略语句设置数据保护操作的检测上下文。

  • Sid(可选)– 语句标识符。

  • DataDirection(数据方向)– 相对于 Amazon SNS 主题的入站(用于发布 API 请求)或出站(用于通知传送)方向。

  • DataIdentifier(数据标识符)– Amazon SNS 主题应扫描的敏感数据。例如,姓名、地址或电话号码。

  • Principal(主体)– 发布到该主题的 IAM 主体或订阅该主题的 IAM 主体。

  • Operation(操作)– Amazon SNS 主题在找到敏感数据后执行的后续操作,可以为 Deny(拒绝,也就是阻止)或者 Audit(审计)。

{ "Sid": "basicPII-inbound-protection", "DataDirection": "Inbound", "Principal": ["*"], "DataIdentifier": [ "arn:aws:dataprotection::aws:data-identifier/Name", "arn:aws:dataprotection::aws:data-identifier/PhoneNumber-US" ], "Operation": { ... } }

策略语句操作的 JSON 属性

策略语句设置以下数据保护操作之一。

  • Deny(拒绝)– 阻止 Amazon SNS 发布请求或者使消息传输失败。

  • Audit(审计)– 发布指标和发现结果日志,而不中断消息发布或传输。

拒绝操作

如果消息包含敏感数据,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" }
注意

不支持移动端点。

审计操作

Audit(审计)操作对主题入站消息采样,并将敏感数据发现结果记录在 Amazon 目标中。采样率可以是 0-99 之间的整数。此操作需要以下类型的日志记录目标之一:

  1. FindingsDestination(发现结果目标)– Amazon SNS 主题在负载中发现敏感数据时使用的日志记录目标。

  2. NoFindingsDestination(未发现结果目标)– Amazon SNS 主题在负载中未发现敏感数据时使用的日志记录目标。

您可以在各种日志目标类型中使用以下 Amazon Web Services:

  • Amazon CloudWatch Logs(可选)– LogGroup 必须位于主题区域并且名称必须以 /aws/vendedlogs/ 开头。

  • Amazon Kinesis Data Firehose(可选)– DeliveryStream 必须位于主题区域并且使用 Direct PUT 作为传输流的来源。有关其他详细信息,请参阅《Amazon Kinesis Data Firehose 开发人员指南》中的来源、目标和名称

  • Amazon S3(可选)– 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" ] } ] }
审计目标日志示例

您可以使用 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 属性时,主题所有者还将收到 CloudWatch MessagesWithFindingsMessagesWithNoFindings 指标。


                                显示指定时间段内数据的审计示例。

如何确定我的数据保护策略的 IAM 主体?

消息数据保护功能使用两个与 Amazon SNS 交互的 IAM 主体。

  1. Publish API Principal(发布 API 主体)(入站)– 调用 Amazon SNS Publish API 的经过身份验证的 IAM 主体。

  2. Subscription Principal(订阅主体)(出站)– 在订阅创建期间调用 Subscribe API 的经过身份验证的 IAM 主体。

SubscriptionPrincipal 是正式发布的 Amazon SNS 订阅属性,可以从 GetSubscriptionAttributes API 检索。

{ "Attributes": { "SubscriptionPrincipal": "arn:aws:iam::123456789012:user/NoNameAccess", "Owner": "123412341234", "RawMessageDelivery": "true", "TopicArn": "arn:aws:sns:us-east-1:123412341234:PII-data-topic", "Endpoint": "arn:aws:sqs:us-east-1:123456789012:NoNameAccess", "Protocol": "sqs", "PendingConfirmation": "false", "ConfirmationWasAuthenticated": "true", "SubscriptionArn": "arn:aws:sns:us-east-1:123412341234:PII-data-topic:5d8634ef-67ef-49eb-a824-4042b28d6f55" } }