

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

# Amazon SNS 데이터 암호화
<a name="sns-data-encryption"></a>

데이터 보호란 전송 중(Amazon SNS 안팎으로 데이터가 이동 중)과 유휴 시(Amazon SNS 데이터 센터의 디스크에 데이터가 저장된 동안) 데이터를 보호하는 것을 말합니다. Secure Sockets Layer(SSL) 또는 클라이언트 측 암호화를 사용하여 전송 중인 데이터를 보호할 수 있습니다. 기본적으로 Amazon SNS는 디스크 암호화를 사용하여 메시지와 파일을 저장합니다. 메시지를 데이터 센터의 암호화된 파일 시스템에 저장하기 전에 먼저 메시지를 암호화하도록 Amazon SNS에 요청하여 저장 데이터를 보호할 수 있습니다. Amazon SNS에서는 최적화된 데이터 암호화를 위해 SSE 사용을 권장합니다.

# 서버 측 암호화를 사용한 Amazon SNS 데이터 보안
<a name="sns-server-side-encryption"></a>

서버 측 암호화(SSE)를 사용하면 AWS Key Management Service ()에서 관리되는 키를 사용하여 Amazon SNS 주제의 메시지 콘텐츠를 보호하여 암호화된 주제에 민감한 데이터를 저장할 수 있습니다AWS KMS.

Amazon SNS가 메시지를 수신하면 SSE가 메시지를 즉시 암호화합니다. 메시지는 암호화된 형식으로 저장되며 메시지가 전송된 경우에만 복호화됩니다.
+  AWS Management Console 또는 AWS SDK for Java ( `[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)` 및 `[SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)` API 작업을 사용하여 `KmsMasterKeyId` 속성을 설정하여)를 사용하여 SSE를 관리하는 방법에 대한 자세한 내용은 섹션을 참조하세요[서버 측 암호화로 Amazon SNS 주제 암호화 설정](sns-enable-encryption-for-topic.md).
+  CloudFormation (`[AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)`리소스를 사용하여 `KmsMasterKeyId` 속성을 설정하여)를 사용하여 암호화된 주제를 생성하는 방법에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서를* 참조하세요.

**중요**  
SSE를 사용할 수 있는 주제에 대한 모든 요청에서는 HTTPS 및 [서명 버전 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 사용해야 합니다.  
기타 서비스와 암호화 주제의 호환성에 관한 정보는 서비스 설명서를 참조하세요.  
Amazon SNS는 대칭 암호화 KMS 키만 지원합니다. 다른 유형의 KMS 키를 사용하여 서비스 리소스를 암호화할 수 없습니다. KMS 키가 대칭인지 암호화 키인지 확인하는 것과 관련된 도움말은 [비대칭 KMS 키 식별](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)을 참조하세요.

AWS KMS 는 안전하고 가용성이 높은 하드웨어와 소프트웨어를 결합하여 클라우드에 맞게 확장된 키 관리 시스템을 제공합니다. Amazon SNS AWS KMS를와 함께 사용하면 메시지 데이터를 암호화하는 데이터 [키](#sse-key-terms)도 암호화되고 보호되는 데이터와 함께 저장됩니다.

 AWS KMS를 사용하면 다음과 같은 이점이 있습니다.
+ [AWS KMS key](#sse-key-terms)를 직접 생성하고 관리할 수 있습니다.
+ 각 계정 및 리전에 고유한 Amazon SNS에 AWS관리형 KMS 키를 사용할 수도 있습니다.
+  AWS KMS 보안 표준은 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다.

자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [What is AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 참조하세요.

## 암호화 범위
<a name="what-does-sse-encrypt"></a>

SSE는 Amazon SNS 주제에서 메시지의 본문을 암호화합니다.

SSE는 다음을 암호화하지 않습니다.
+ 주제 메타데이터(주제 이름 및 속성)
+ 메시지 메타데이터(주제, 메시지 ID, 타임스탬프 및 속성)
+ 데이터 보호 정책 
+ 주제별 지표

**참고**  
주제 암호화가 활성화된 후 전송되는 경우에만 메시지가 암호화됩니다. Amazon SNS 백로그된 메시지를 암호화하지 않습니다.
암호화된 메시지는 해당 주제 암호화가 비활성화된 경우에만 암호화된 상태를 유지합니다.

## 주요 용어
<a name="sse-key-terms"></a>

다음 주요 용어 설명은 SSE 기능을 보다 정확하게 이해하는 데 도움이 될 수 있습니다. 자세한 내용은 *[Amazon Simple Notification Service API 참조](https://docs.aws.amazon.com/sns/latest/api/)*를 참조하세요.

**데이터 키**  
Amazon SNS 메시지 내용의 암호화를 담당하는 데이터 암호화 키(DEK)입니다.  
자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [데이터 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) 및 *AWS Encryption SDK 개발자 안내서*의 [봉투 암호화](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)를 참조하세요.

**AWS KMS key ID**  
계정 또는 다른 계정 AWS KMS에서 또는 사용자 지정의 별칭, 별칭 ARN AWS KMS key, 키 ID 또는 키 ARN입니다. Amazon SNS AWS KMS 용 AWS 관리형의 별칭은 항상 이지만 사용자 지정의 `alias/aws/sns`별칭은 예를 들어 일 AWS KMS 수 있습니다`alias/MyAlias`. 이러한 AWS KMS 키를 사용하여 Amazon SNS 주제의 메시지를 보호할 수 있습니다.  
다음 사항에 유의하세요:  
+  AWS Management Console 를 사용하여 주제에 대한 Amazon SNS용 AWS 관리형 KMS를 처음 지정하면가 Amazon SNS용 AWS 관리형 KMS를 AWS KMS 생성합니다.
+ 또는 SSE가 활성화된 주제에 대해 `Publish` 작업을 처음 사용할 때가 Amazon SNS용 AWS 관리형 KMS를 AWS KMS 생성합니다.
 AWS KMS 콘솔의 **AWS KMS keys** 섹션 또는 `[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)` AWS KMS 작업을 사용하여 AWS KMS 키를 생성하고, AWS KMS 키 사용 방법을 제어하는 정책을 정의하고, AWS KMS 사용량을 감사할 수 있습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) 및 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요. AWS KMS 식별자의 추가 예는 *AWS Key Management Service API* 참조의 [KeyId](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters)를 참조하세요. 결과 AWS KMS 식별자에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*[의 키 ID 및 ARN 찾기](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn)를 참조하세요.  
사용에 대한 추가 요금이 있습니다 AWS KMS. 자세한 내용은 [AWS KMS 비용 추정](sns-key-management.md#sse-estimate-kms-usage-costs) 및 [AWS Key Management Service 요금](https://aws.amazon.com/kms/pricing)을 참조하세요.

# Amazon SNS 암호화 키 및 비용 관리
<a name="sns-key-management"></a>

다음 섹션에서는 AWS Key Management Service (AWS KMS)의 관리형 키 작업에 대해 설명합니다.

**참고**  
Amazon SNS는 대칭 암호화 KMS 키만 지원합니다. 다른 유형의 KMS 키를 사용하여 서비스 리소스를 암호화할 수 없습니다. KMS 키가 대칭인지 암호화 키인지 확인하는 것과 관련된 도움말은 [비대칭 KMS 키 식별](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)을 참조하세요.

## AWS KMS 비용 추정
<a name="sse-estimate-kms-usage-costs"></a>

비용을 예측하고 AWS 청구서를 더 잘 이해하려면 Amazon SNS에서를 사용하는 빈도를 알고 싶을 수 있습니다 AWS KMS key.

**참고**  
다음 공식으로 예상되는 비용을 거의 정확하게 짐작할 수 있지만, Amazon SNS의 분산 특성상 실제 비용은 더 높을 수 있습니다.

*주제당* API 요청 수(`R`)를 계산하려면 다음 수식을 사용하세요.

```
R = B / D * (2 * P)
```

여기서 `B`는 청구 기간(초)입니다.

`D`는 데이터 키 재사용 기간입니다(초 단위—Amazon SNS는 최대 5 분 동안 데이터 키를 재사용함).

`P`는 Amazon SNS 주제로 보내는 게시 [보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal)의 수입니다.

다음은 계산 예제입니다. 정확한 요금 정보는 [AWS Key Management Service 요금](https://aws.amazon.com/kms/pricing/)을 참조하세요.

### 예제 1: 1개의 게시자 및 1개의 주제에 대한 AWS KMS API 호출 수 계산
<a name="example-1-topic-1-publisher"></a>

이 예에서는 다음과 같이 가정합니다.
+ 청구 기간은 1월 1일부터 31일까지입니다(2,678,400초).
+ 데이터 키 재사용 기간은 5분(300초)입니다.
+ 1개의 주제가 있습니다.
+ 1개의 게시 보안 주체가 있습니다.

```
2,678,400 / 300 * (2 * 1) = 17,856
```

### 예제 2: 여러 게시자 및 주제 2개에 대한 AWS KMS API 호출 수 계산
<a name="example-2-topics-multiple-publishers"></a>

이 예에서는 다음과 같이 가정합니다.
+ 청구 기간은 2월 1일부터 28일까지입니다(2,419,200초).
+ 데이터 키 재사용 기간은 5분(300초)입니다.
+ 2개의 주제가 있습니다.
+ 첫 번째 주제에는 3개의 게시 보안 주체가 있습니다.
+ 두 번째 주제에는 5개의 게시 보안 주체가 있습니다.

```
(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024
```

## AWS KMS 권한 구성
<a name="sns-what-permissions-for-sse"></a>

SSE를 사용하려면 먼저 주제 암호화와 메시지 암호화 및 복호화를 허용하는 AWS KMS key 정책을 구성해야 합니다. AWS KMS 권한에 대한 예제 및 자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [AWS KMS API 권한: 작업 및 리소스 참조](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)를 참조하세요. Amazon SNS 주제에 서버 측 암호화를 설정하는 방법에 대한 자세한 내용은 [추가 정보](sns-enable-encryption-for-topic.md#set-up-topic-with-sse) 섹션을 참조하세요.

**참고**  
IAM 정책을 사용하여 대칭 암호화 KMS 키 권한을 관리할 수도 있습니다. 자세한 내용은에서 [IAM 정책 사용을 참조하세요 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html).  
Amazon SNS와 송수신하기 위한 전역 권한을 구성해도 되지만, AWS KMS 는 IAM 정책의 `Resource` 섹션에 구체적인 리전별 KMS의 전체 ARN을 명시적으로 지정할 것을 요구합니다.

또한의 키 정책이 필요한 권한을 AWS KMS key 허용하는지 확인해야 합니다. 이렇게 하려면 Amazon SNS에서 암호화된 메시지를 생산하고 소비하는 보안 주체를 KMS 키 정책에서 사용자로 지정해야 합니다.

또는 Amazon SNS에서 암호화된 메시지를 수신하도록 게시하고 구독하는 보안 주체에 할당된 IAM 정책에서 필요한 AWS KMS 작업과 KMS ARN을 지정할 수 있습니다. 자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [AWS KMS에 대한 액세스 관리](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access)를 참조하세요.

Amazon SNS 주제에 대한 고객 관리형 키를 선택하고 조건 키 `kms:ResourceAliases`와 함께 IAM 정책 또는 KMS 키 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 별칭을 사용하는 경우 선택한 고객 관리형 키에도 별칭이 연결되어 있어야 합니다. *별칭을 사용하여 KMS 키에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 AWS Key Management Service  개발자 안내서*의 [별칭을 사용하여 KMS 키에 대한 액세스 제어](https://docs.aws.amazon.com/kms/latest/developerguide/alias-authorization.html)를 참조하세요.

### 사용자가 SSE를 사용하여 주제에 메시지 보내기 허용
<a name="send-to-encrypted-topic"></a>

게시자에게 AWS KMS key에 대한 `kms:GenerateDataKey*` 및 `kms:Decrypt` 권한이 있어야 합니다.

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey*",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }, {
    "Effect": "Allow",
    "Action": [
      "sns:Publish"
    ],
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

### AWS 서비스 및 암호화된 주제의 이벤트 소스 간 호환성 활성화
<a name="compatibility-with-aws-services"></a>

여러 AWS 서비스가 Amazon SNS 주제에 이벤트를 게시합니다. 이러한 이벤트 소스가 암호화된 주제와 연동되도록 하려면 다음 단계를 수행해야 합니다.

1. 고객 관리형 키를 사용합니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.

1.  AWS 서비스에 `kms:GenerateDataKey*` 및 `kms:Decrypt` 권한을 부여하려면 KMS 정책에 다음 문을 추가합니다.

   ```
   {
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "Service": "service.amazonaws.com"
       },
       "Action": [
         "kms:GenerateDataKey*",
         "kms:Decrypt"
       ],
       "Resource": "*"
     }]
   }
   ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/sns-key-management.html)
**참고**  
일부 Amazon SNS 이벤트 소스에서는 AWS KMS key 정책에 IAM 역할(서비스 보안 주체가 아님)을 제공해야 합니다.  
[Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html)
[Amazon Elastic Transcoder](https://docs.aws.amazon.com/elastictranscoder/latest/developerguide/notifications.html)
[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html#approvals-configuration-options)
[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/notifications-for-AWS-Config.html)
[AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.sns.html)
[AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sns-rule.html)
[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/ibhow-integrations.html#integ-sns-encrypted)

1. `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 KMS 리소스 정책에 추가하여 [혼동된 대리자](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) 공격으로부터 KMS 키를 더 보호합니다. 각 경우에 대한 정확한 세부 정보는 서비스별 설명서 목록(위)을 참조하세요.
**중요**  
 AWS KMS 정책에 `aws:SourceArn`, 및 `aws:SourceAccount``aws:SourceOrgID`를 추가하는 것은 EventBridge-to-encrypted 주제에 대해 지원되지 않습니다.

   ```
   {
     "Effect": "Allow",
     "Principal": {
       "Service": "service.amazonaws.com"
     },
     "Action": [
       "kms:GenerateDataKey*",
       "kms:Decrypt"
     ],
     "Resource": "*",
     "Condition": {
       "StringEquals": {
         "aws:SourceAccount": "customer-account-id"
       },
       "ArnLike": {
         "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type:customer-resource-id"
       }
     }
   }
   ```

1. KMS를 사용하여 [주제의 SSE를 활성화합니다](sns-enable-encryption-for-topic.md).

1. 암호화된 주제의 ARN을 이벤트 소스에 제공합니다.

## AWS KMS 오류
<a name="sse-troubleshooting-errors"></a>

Amazon SNS 및 로 작업 AWS KMS할 때 오류가 발생할 수 있습니다. 아래 목록에서 이러한 오류와 문제 해결 방법을 설명합니다.

**KMSAccessDeniedException**  
암호화 텍스트가 존재하지 않는 키 또는 액세스 권한이 없는 키를 참조합니다.  
HTTP 상태 코드: 400

**KMSDisabledException**  
지정한 KMS가 활성화되지 않아서 요청이 거부되었습니다.  
HTTP 상태 코드: 400

**KMSInvalidStateException**  
지정한 리소스의 상태가 이 요청에 유효하지 않아서 요청이 거부되었습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS keys의 키 상태](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)를 참조하세요.  
HTTP 상태 코드: 400

**KMSNotFoundException**  
지정한 엔터티 또는 리소스를 찾을 수 없으므로 요청이 거부되었습니다.  
HTTP 상태 코드: 400

**KMSOptInRequired**  
 AWS 액세스 키 ID에는 서비스에 대한 구독이 필요합니다.  
HTTP 상태 코드: 403

**KMSThrottlingException**  
요청 스로틀링으로 인해 요청이 거부되었습니다. 제한에 대한 자세한 정보는 **AWS Key Management Service 개발자 안내서의 [할당량](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)을 참조하세요.  
HTTP 상태 코드: 400

# 서버 측 암호화로 Amazon SNS 주제 암호화 설정
<a name="sns-enable-encryption-for-topic"></a>

Amazon SNS는 AWS Key Management Service (AWS KMS)를 사용하여 메시지 내용을 보호하기 위해 서버 측 암호화(SSE)를 지원합니다. 아래 지침에 따라 Amazon SNS 콘솔 또는 CDK를 사용하여 SSE를 활성화합니다.

## 옵션 1:를 사용하여 암호화 활성화 AWS Management Console
<a name="enable-encryption-console"></a>

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. **주제** 페이지로 이동하여 **주제**를 선택하고 **편집**을 선택합니다.

1. **암호화** 섹션을 확장하고 다음을 수행합니다.
   + 암호화를 **활성화**로 전환합니다.
   + **AWS 관리형 SNS 키**(alias/aws/sns)를 암호화 키로 선택합니다. 기본값으로 선택됩니다.

1. **변경 사항 저장**을 선택합니다.

**참고**  
 AWS 관리형 키 는 아직 없는 경우 자동으로 생성됩니다.
키가 표시되지 않거나 권한이 부족한 경우 관리자에게 `kms:ListAliases` 및 `kms:DescribeKey`를 요청하세요.

## 옵션 2:를 사용하여 암호화 활성화 AWS CDK
<a name="enable-encryption-cdk"></a>

CDK 애플리케이션에서 AWS 관리형 SNS  키를 사용하려면 다음 코드 조각을 추가합니다.

```
import software.amazon.awscdk.services.sns.*;
import software.amazon.awscdk.services.kms.*;
import software.amazon.awscdk.core.*;

public class SnsEncryptionExample extends Stack {
    public SnsEncryptionExample(final Construct scope, final String id) {
        super(scope, id);

        // Define the managed SNS key
        IKey snsKey = Alias.fromAliasName(this, "helloKey", "alias/aws/sns");

        // Create the SNS Topic with encryption enabled
        Topic.Builder.create(this, "MyEncryptedTopic")
            .masterKey(snsKey)
            .build();
    }
}
```

## 추가 정보
<a name="set-up-topic-with-sse"></a>
+ **사용자 지정 KMS 키** - 필요한 경우 사용자 지정 키를 지정할 수 있습니다. Amazon SNS 콘솔의 목록에서 사용자 지정 KMS 키를 선택하거나 ARN을 입력합니다.
+ **사용자 지정 KMS 키에 대한 권한** - 사용자 지정 KMS 키를 사용하는 경우 Amazon SNS가 메시지를 암호화하고 해독할 수 있도록 키 정책에 다음을 포함합니다.

```
{ 
    "Effect": "Allow", 
    "Principal": { 
        "Service": "sns.amazonaws.com" 
     },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "ArnLike": { 
            "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type/customer-resource-id" 
        },
        "StringEquals": { 
            "kms:EncryptionContext:aws:sns:topicArn": "arn:aws:sns:your_region:customer-account-id:your_sns_topic_name" 
        }
    }
}
```

## 소비자에게 미치는 영향
<a name="enable-encryption-impact-on-consumers"></a>

SSE를 활성화해도 구독자가 메시지를 사용하는 방법은 변경되지 않습니다. 암호화 및 복호화를 투명하게 AWS 관리합니다. 메시지는 저장 시 암호화된 상태로 유지되며 구독자에게 전송되기 전에 자동으로 복호화됩니다. 최적의 보안을 위해 AWS 는 메시지의 안전한 전송을 보장하기 위해 모든 엔드포인트에 HTTPS를 활성화할 것을 권장합니다.

# 암호화된 Amazon SQS 대기열 구독을 사용하여 Amazon SNS Amazon SQS 주제 암호화 설정
<a name="sns-enable-encryption-for-topic-sqs-queue-subscriptions"></a>

주제에 대해 서버 측 암호화(SSE)를 활성화하여 데이터를 보호할 수 있습니다. Amazon SNS가 암호화된 Amazon SQS 대기열로 메시지를 전송하도록 허용하려면 Amazon SQS 대기열과 연결된 고객 관리형 키에는 AWS KMS API 작업 `GenerateDataKey` 및 `Decrypt`에 Amazon SNS 서비스 보안 주체에 액세스 권한을 부여하는 정책 명령문이 있어야 합니다. SSE 사용에 관한 자세한 정보는 [서버 측 암호화를 사용한 Amazon SNS 데이터 보안](sns-server-side-encryption.md)에서 확인하세요.

이 주제에서는 AWS Management Console을 사용하여 암호화된 Amazon SQS 대기열이 구독하는 Amazon SNS 주제에 대해 SSE를 활성화하는 방법을 설명합니다.

## 1단계: 사용자 지정 KMS 키 생성
<a name="create-custom-cmk"></a>

1. 최소한 `AWSKeyManagementServicePowerUser` 정책이 있는 사용자로 [AWS KMS 콘솔](https://console.aws.amazon.com/kms/) 에 로그인합니다.

1. **Create key(키 생성)**를 선택합니다.

1. 대칭 암호화 KMS 키를 생성하려면 **키 유형(Key type)**에 **대칭(Symmetric)**을 선택합니다.

    AWS KMS 콘솔에서 비대칭 KMS 키를 생성하는 방법에 대한 자세한 내용은 [비대칭 KMS 키 생성(콘솔)](https://docs.aws.amazon.com/kms/latest/developerguide/asymm-create-key.html#create-asymmetric-keys-console)을 참조하세요.

1. **키 사용(Key usage)**에서 **암호화 및 해독(Encrypt and decrypt)** 옵션이 선택됩니다.

   MAC 코드를 생성 및 확인하는 KMS 키를 생성하는 방법에 대한 자세한 내용은 [HMAC KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/hmac-create-key.html)을 참조하세요.

   **고급 옵션**에 대한 자세한 내용은 [특수 용도 키](https://docs.aws.amazon.com/kms/latest/developerguide/key-types.html)를 참조하세요.

1. **다음**을 선택합니다.

1. KMS 키의 별칭을 입력합니다. 별칭은 **aws/**로 시작할 수 없습니다. **aws/** 접두사는 Amazon Web Services에서 예약하여 계정 AWS 관리형 키 에서 나타냅니다.
**참고**  
별칭을 추가, 삭제 또는 업데이트하면 KMS 키에 대한 권한을 허용하거나 거부할 수 있습니다. 자세한 내용은 [AWS KMS의 ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) 및 [별칭을 사용하여 KMS 키에 대한 액세스 제어](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#hmac-key-concept)를 참조하세요.

   별칭은 KMS 키를 식별하는 데 사용할 수 있는 표시 이름입니다. 보호하고자 하는 데이터의 유형 또는 KMS 키와 함께 사용할 애플리케이션을 나타내는 별칭을 선택하는 것이 좋습니다.

    AWS Management Console에서 KMS 키를 생성할 때 별칭이 필요합니다. 이들은 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업을 사용할 때 선택 사항입니다.

1. (선택 사항) KMS 키에 대한 설명을 입력합니다.

   [키 상태](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)가 `Pending Deletion` 또는 `Pending Replica Deletion`이 아닌 한 지금 설명을 추가하거나 언제든지 설명을 업데이트할 수 있습니다. 기존 고객 관리형 키의 설명을 추가, 변경 또는 삭제하려면 [에서 설명을 편집](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html) AWS Management Console 하거나 [UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) 작업을 사용합니다.

1. (선택 사항) 태그 키와 태그 값(선택)을 입력합니다. KMS 키에 두 개 이상의 태그를 추가하려면 **태그 추가(Add tag)**를 선택합니다.
**참고**  
KMS 키에 태그를 지정하거나 해제하면 KMS 키에 대한 권한을 허용하거나 거부할 수 있습니다. 자세한 내용은 [AWS KMS의 ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) 및 [태그를 사용하여 KMS 키에 대한 액세스 제어](https://docs.aws.amazon.com/kms/latest/developerguide/tag-authorization.html)를 참조하세요.

    AWS 리소스에 태그를 추가하면 AWS 는 태그별로 집계된 사용량 및 비용이 포함된 비용 할당 보고서를 생성합니다. KMS 키에 대한 액세스를 제어하는 데에도 태그를 사용할 수 있습니다. KMS 키 태그 지정에 대한 자세한 내용은 [키 태그 지정](https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html) 및 [AWS KMS의 ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html)를 참조하세요.

1. **다음**을 선택합니다.

1. KMS 키를 관리할 수 있는 IAM 사용자 및 역할을 선택합니다.
**참고**  
이 키 정책은이 KMS 키를 AWS 계정 완전히 제어합니다. 계정 관리자가 IAM 정책을 사용하여 KMS 키를 관리할 수 있는 권한을 다른 보안 주체에게 부여하도록 허용합니다. 자세한 내용은 [기본 키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)을 참조하세요.  
   
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 IAM 사용 설명서의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

1. (선택 사항) 선택한 IAM 사용자와 역할이 페이지 하단의 **키 삭제** 섹션에서 이 KMS 키를 삭제하지 못하도록 하려면 **키 관리자가 이 키를 삭제하도록 허용(Allow key administrators to delete this key)** 확인란의 선택을 취소합니다.

1. **다음**을 선택합니다.

1. [암호화 작업](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)에서 키를 사용할 수 있는 IAM 사용자 및 역할을 선택합니다. **다음**을 선택합니다.

1. **Review and edit key policy(키 정책 검토 및 편집)** 페이지에서 다음 문을 키 정책에 추가한 다음 **완료**를 선택합니다.

   ```
   {
       "Sid": "Allow Amazon SNS to use this key",
       "Effect": "Allow",
       "Principal": {
           "Service": "sns.amazonaws.com"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey*"
       ],
       "Resource": "*"
   }
   ```

새 고객 관리형 키가 키 목록에 나타납니다.

## 2단계: 암호화된 Amazon SNS 주제 생성
<a name="create-encrypted-topic"></a>

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **주제(Topics)**를 선택합니다.

1. **주제 생성**을 선택합니다.

1. **새로운 주제 생성** 페이지에서 **이름**에 주제 이름을 입력하고(예: `MyEncryptedTopic`) **주제 생성**을 선택합니다.

1. **암호화** 섹션을 확장하고 다음을 수행합니다.

   1. **Enable server-side encryption(서버 측 암호화 활성화)**을 선택합니다.

   1. 고객 관리형 키를 지정합니다. 자세한 내용은 [주요 용어](sns-server-side-encryption.md#sse-key-terms) 섹션을 참조하세요.

      각 고객 관리 키 유형에 대해 **설명**, **계정** 및 고객 관리형 키 **ARN**이 표시됩니다.
**중요**  
해당 고객 관리형 키의 소유자가 아니거나 `kms:ListAliases` 및 `kms:DescribeKey` 권한이 없는 계정으로 로그인하는 경우 Amazon SNS 콘솔에서 해당 고객 관리형 키에 대한 정보를 볼 수 없습니다.  
고객 관리형 키의 소유자에게 이 권한을 부여해 달라고 요청해야 합니다. 자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [AWS KMS API 권한: 작업 및 리소스 참조](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)를 참조하세요.

   1. **고객 관리형 키**에서 [이전에 생성한](#create-custom-cmk) **MyCustomKey**를 선택한 다음, **서버 측 암호화 활성화**를 선택합니다.

1. **변경 사항 저장**을 선택합니다.

   주제에 대해 SSE가 활성화되고 **MyTopic** 페이지가 표시됩니다.

   주제의 **암호화** 상태, AWS **계정**, **고객 관리형 키**, 고객 관리형 키 **ARN** 및 **설명**이 **암호화** 탭에 표시됩니다.

암호화된 새 주제가 주제 목록에 나타납니다.

## 3단계: 암호화된 Amazon SQS 대기열 생성 및 구독
<a name="create-encrypted-queue"></a>

1. [Amazon SQS 콘솔](https://console.aws.amazon.com/sqs/)에 로그인합니다.

1. **새로운 대기열 생성**을 선택합니다.

1. **새로운 대기열 생성** 페이지에서 다음을 수행합니다.

   1. **대기열 이름**을 입력합니다(예: `MyEncryptedQueue1`).

   1. **표준 대기열**을 선택하고 **대기열 구성**을 선택합니다.

   1. **SSE 사용**을 선택합니다.

   1. **AWS KMS key**의 경우 [이전에 생성한](#create-custom-cmk) **MyCustomKey**를 선택한 다음, **대기열 생성**을 선택합니다.

1. 두 번째 대기열(예 `MyEncryptedQueue2`)을 만들려면 프로세스를 반복합니다.

   암호화된 새 대기열이 대기열 목록에 나타납니다.

1. Amazon SQS 콘솔에서 `MyEncryptedQueue1` 및 `MyEncryptedQueue2`를 선택하고, **대기열 작업**, **대기열에서 SNS 주제 구독**을 선택합니다.

1. **주제 구독** 대화 상자의 **주제 선택**에서 **MyEncryptedTopic**을 선택한 다음 **구독**을 선택합니다.

   암호화된 주제에 대한 암호화된 대기열의 구독은 **주제 구독 결과** 대화 상자에 표시됩니다.

1. **확인**을 선택합니다.

## 4단계: 암호화된 주제에 메시지 게시
<a name="publish-to-encrypted-topic"></a>

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **주제(Topics)**를 선택합니다.

1. 주제 목록에서 **MyEncryptedTopic**을 선택하고 **메시지 게시**를 선택합니다.

1. **메시지 게시** 페이지에서 다음을 수행합니다.

   1. (선택 사항) **메시지 세부 정보** 섹션에서 **제목**을 입력합니다(예: `Testing message publishing`).

   1. **메시지 본문** 섹션에서 메시지 본문을 입력합니다(예: `My message body is encrypted at rest.`).

   1. **메시지 게시**를 선택합니다.

메시지가 구독 암호화 대기열에 게시됩니다.

## 5단계: 메시지 전송 확인
<a name="verify-message-delivery"></a>

1. [Amazon SQS 콘솔](https://console.aws.amazon.com/sqs/)에 로그인합니다.

1. 대기열 목록에서 **MyEncryptedQueue1**을 선택한 다음 **Send and receive messages**(메시지 보내기 및 받기)를 선택합니다.

1. **Send and receive messages in MyEncryptedQueue1**(MyEncryptedQueue1에서 메시지 보내기 및 받기) 페이지에서 **Poll for messages**(메시지폴링)를 선택합니다.

   [이전에 보낸](#publish-to-encrypted-topic) 메시지가 표시됩니다.

1. 메시지를 보려면 **추가 정보**를 선택합니다.

1. 모두 마친 후에는 **닫기**를 선택합니다.

1. **MyEncryptedQueue2**에 대해 이 프로세스를 반복합니다.