Amazon SNS 中的数据保护策略操作 - Amazon Simple Notification Service

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

Amazon SNS 中的数据保护策略操作

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

审计操作

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

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

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

您可以在以下每种日志目标类型 AWS 服务 中使用以下内容:

{ "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) 或使用 (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 } ] } ] }

审计操作指标

当审计操作指定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" }