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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

数据保护策略操作

以下数据保护策略示例可用于审计和拒绝敏感数据。有关包含示例应用程序的完整教程,请参阅 Introducing message data protection for Amazon SNS(Amazon SNS 消息数据保护简介)博客文章。

审计操作

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

  1. FindingsDestination— Amazon SNS 主题在有效负载中发现敏感数据时的记录目标。

  2. NoFindingsDestination— 当 Amazon SNS 主题在有效负载中找不到敏感数据时的日志记录目标。

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

{ "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

要使用启用了 SSE-KMS 加密的 Amazon S3 桶,需要执行额外操作

{ "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) 或采用 Amazon KMS keys 的服务器端加密 (SSE-KMS) 来保护存储桶中的数据。有关详情,请参阅《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 } ] } ] }

审计操作指标

当审计操作指定FindingsDestinationNoFindingsDestination属性时,主题所有者还会收到 CloudWatchMessagesWithFindingsMessagesWithNoFindings指标。


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

去身份识别操作

去身份识别操作会遮蔽或去除所发布或已送达消息中的敏感数据。此操作既适用于入站消息,又适用于出站消息,需要以下类型的配置之一:

  • 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" }