

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon SNS의 데이터 보호 정책 작업
<a name="sns-message-data-protection-operations"></a>

**중요**  
신규 고객은 Amazon SNS 메시지 데이터 보호를 더 이상 사용할 수 없습니다. 대안에 대한 자세한 내용과 지침은 [Amazon SNS 메시지 데이터 보호 가용성 변경을](https://docs.aws.amazon.com/sns/latest/dg/sns-message-data-protection-availability-change.html) 참조하세요.

다음은 중요한 데이터를 감사 및 거부하는 데 사용할 수 있는 데이터 보호 정책의 예입니다. 예시 애플리케이션이 포함된 전체 자습서는 [Amazon SNS에 대한 메시지 데이터 보호 소개](https://aws.amazon.com/blogs/compute/introducing-message-data-protection-for-amazon-sns/) 블로그 게시물을 참조하세요.

## 감사 작업
<a name="statement-operation-json-properties-audit"></a>

**감사** 작업은 주제 인바운드 메시지를 샘플링하고 민감한 데이터 조사 결과를 AWS 대상에 기록합니다. 샘플 레이트는 0\~99 사이의 정수일 수 있습니다. 이 작업에는 다음 유형의 로깅 대상 중 하나가 필요합니다.

1. **FindingsDestination** – Amazon SNS 주제가 페이로드에서 중요한 데이터를 찾은 경우의 로깅 대상입니다.

1. **NoFindingsDestination** – Amazon SNS 주제가 페이로드에서 중요한 데이터를 찾지 못한 경우의 로깅 대상입니다.

다음 각 로그 대상 유형 AWS 서비스 에서 다음을 사용할 수 있습니다.
+ **Amazon CloudWatch Logs**(선택 사항) – `LogGroup`은 주제 지역에 있어야 하고 이름은 **/aws/vendedlogs/**로 시작해야 합니다.
+ ** **(선택 사항) – `DeliveryStream`은 주제 리전에 있어야 하며 전송 스트림의 소스로 **Direct PUT**을 보유해야 합니다. 자세한 내용은 *Amazon Data Firehose 개발자 안내서*의 [소스, 대상 및 이름](https://docs.aws.amazon.com/firehose/latest/dev/create-name.html)을 참조하세요.
+ **Amazon S3**(선택 사항) - Amazon S3 버킷 이름입니다. [SSE-KMS 암호화가 활성화된 Amazon S3 버킷을 사용하려면 추가 작업이 필요합니다](#flow-logs-s3-cmk-policy).

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

### 로그 대상 지정 시 필요한 권한
<a name="required-permissions-log-operations"></a>

데이터 보호 정책에서 로깅 대상을 지정할 때 Amazon SNS `PutDataProtectionPolicy` API 또는 `--data-protection-policy` 파라미터가 있는 `CreateTopic` API를 호출하는 IAM 보안 주체의 IAM 자격 증명 정책에 다음 권한을 추가해야 합니다.


| 감사 대상 | IAM 권한 | 
| --- | --- | 
| 기본값 | logs:CreateLogDelivery<br />logs:GetLogDelivery<br />logs:UpdateLogDelivery<br />logs:DeleteLogDelivery<br />logs:ListLogDeliveries | 
| CloudWatchLogs | logs:PutResourcePolicy<br />logs:DescribeResourcePolicies<br />logs:DescribeLogGroups | 
| Firehose | iam:CreateServiceLinkedRole<br />firehose:TagDeliveryStream | 
| S3 | s3:PutBucketPolicy<br />s3:GetBucketPolicy<br />[SSE-KMS 암호화가 활성화된 Amazon S3 버킷을 사용하려면 추가 작업이 필요합니다](#flow-logs-s3-cmk-policy). | 

------
#### [ JSON ]

****  

```
{
    "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:us-west-1:123456789012:SampleLogGroupName:*:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "firehose:TagDeliveryStream"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketPolicy",
                "s3:GetBucketPolicy"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name"
            ]
        }
    ]
}
```

------

#### SSE-KMS를 사용할 경우 필요한 키 정책
<a name="flow-logs-s3-cmk-policy"></a>

Amazon S3 버킷을 로그 대상으로 사용하는 경우 Amazon S3-Managed 키를 사용한 서버 측 암호화(SSE-S3) 또는 AWS KMS keys (SSE-KMS)를 사용한 서버 측 암호화를 활성화하여 버킷의 데이터를 보호할 수 있습니다. 자세한 내용은 *Amazon S3 사용 설명서*의 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

SSE-S3를 선택하면 추가 구성이 필요하지 않습니다. Amazon S3는 암호화 키를 처리합니다.

SSE-KMS를 선택하면 고객 관리형 키를 사용해야 합니다. 로그 전달 계정이 S3 버킷에 쓸 수 있도록 고객 관리형 키에 대한 키 정책을 업데이트해야 합니다. SSE-KMS와 함께 사용하는 데 필요한 키 정책에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3 버킷 서버 측 암호화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-SSE-KMS-S3)를 참조하세요.

### 감사 대상 로그 예시
<a name="data-protection-policy-audit-destination-log"></a>

다음 예에서는 `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
        }
      ]
    }
  ]
}
```

### 감사 작업 지표
<a name="data-protection-policy-audit-metrics"></a>

감사 작업이 `FindingsDestination` 또는 `NoFindingsDestination` 속성을 지정한 경우 주제 소유자는 CloudWatch `MessagesWithFindings` 및 `MessagesWithNoFindings` 지표도 수신합니다.

![지정된 기간 동안 데이터를 표시하는 감사 예시.](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/audit-operations-metrics.png)


## 비식별 작업
<a name="statement-operation-json-properties-deidentify"></a>

**비식별화** 작업은 게시되거나 배달된 메시지에서 민감한 데이터를 마스킹하거나 수정합니다. 이 작업은 인바운드 메시지와 아웃바운드 메시지에 모두 사용할 수 있으며 다음 유형의 구성 중 하나가 필요합니다.
+ **MaskConfig** - 다음 표의 지원되는 문자를 사용하여 마스킹합니다. 예를 들어, ssn: `123-45-6789`는 ssn: `###########`이 됩니다.

  ```
  {
  "Operation": {
      "Deidentify": {
          "MaskConfig": {
              "MaskWithCharacter": "#"
            }
      }
  }
  ```    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/sns-message-data-protection-operations.html)
+ **RedactConfig** - 데이터를 완전히 제거하여 수정합니다. 예를 들어, ssn: `123-45-6789`는 ssn: ` `이 됩니다.

  ```
  {
  "Operation": {
      "Deidentify": {
          "RedactConfig": {}
      }
  }
  ```

인바운드 메시지에서 중요한 데이터는 감사 작업 후 익명화되며, 전체 메시지가 중요한 경우 `SNS:Publish` API 호출자는 다음과 같은 잘못된 매개변수 오류를 수신합니다.

`Error code: AuthorizationError ...`

## 거부 작업
<a name="statement-operation-json-properties-deny"></a>

**Deny**(거부) 작업은 `Publish` API 요청 또는 메시지에 중요한 데이터가 포함된 경우 메시지 배달을 중단합니다. Deny(거부) 작업 개체는 추가 구성이 필요하지 않으므로 비어 있습니다.

```
"Operation": {
    "Deny": {}
}
```

인바운드 메시지에서 `SNS:Publish` API 호출자는 권한 부여 오류를 수신합니다.

`Error code: AuthorizationError ...`

아웃바운드 메시지에서 Amazon SNS 주제는 구독에 메시지를 전달하지 않습니다. 승인되지 않은 배달을 추적하려면 주제의 [전송 상태 로깅](sns-topic-attributes.md)을 사용하도록 설정하세요. 다음은 전송 상태 로그의 예입니다.

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