

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

# Amazon Kinesis Data Streams의 데이터 보호
<a name="server-side-encryption"></a>

 AWS Key Management Service (AWS KMS) 키를 사용한 서버 측 암호화를 사용하면 Amazon Kinesis Data Streams 내에서 저장 데이터를 암호화하여 엄격한 데이터 관리 요구 사항을 쉽게 충족할 수 있습니다.

**참고**  
명령줄 인터페이스 또는 API를 AWS 통해에 액세스할 때 FIPS 140-2 검증 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [Federal Information Processing Standard(FIPS) 140-2](https://aws.amazon.com/compliance/fips/)를 참조하세요.

**Topics**
+ [Kinesis Data Streams용 서버 측 암호화란?](what-is-sse.md)
+ [비용, 리전 및 성능 고려 사항](costs-performance.md)
+ [서버 측 암호화를 시작하는 방법](getting-started-with-sse.md)
+ [사용자 생성 KMS 키 생성 및 사용](creating-using-sse-master-keys.md)
+ [사용자 생성 KMS 키 사용 권한](permissions-user-key-KMS.md)
+ [KMS 키 권한 확인 및 문제 해결](sse-troubleshooting.md)
+ [인터페이스 VPC 엔드포인트와 함께 Amazon Kinesis Data Streams 사용](vpc.md)

# Kinesis Data Streams용 서버 측 암호화란?
<a name="what-is-sse"></a>

서버 측 암호화는 지정한 AWS KMS 고객 마스터 키(CMK)를 사용하여 저장되기 전에 데이터를 자동으로 암호화하는 Amazon Kinesis Data Streams의 기능입니다. 데이터는 Kinesis 스트림 스토리지 계층에 쓰여지기 전에 암호화되고 스토리지에서 검색된 후 해독됩니다. 결과적으로 데이터는 Kinesis Data Streams 서비스에서 유휴 시 암호화되어 엄격한 규제 요구 사항을 충족시키고 데이터 보안을 강화할 수 있습니다.

서버 측 암호화를 사용하면 Kinesis 스트림 생산자 및 소비자가 마스터 키나 암호화 작업을 관리할 필요가 없습니다. 데이터는 Kinesis Data Streams 서비스에 들어오고 나갈 때 자동으로 암호화되므로 저장 데이터는 암호화됩니다. AWS KMS 는 서버 측 암호화 기능에 사용되는 모든 마스터 키를 제공합니다. AWS KMS 를 사용하면에서 관리하는 Kinesis용 CMK, AWS사용자 지정 AWS KMS CMK 또는 AWS KMS 서비스로 가져온 마스터 키를 쉽게 사용할 수 있습니다.

**참고**  
서버 측 암호화는 암호화가 활성화된 직후에 수신되는 데이터만 암호화합니다. 암호화되지 않은 스트림의 기존 데이터는 서버 측 암호화가 활성화 된 후에도 암호화되지 않습니다.

데이터 스트림을 암호화하고 다른 보안 주체와 액세스를 공유할 때는 키에 대한 키 정책과 외부 계정 AWS KMS 의 IAM 정책 모두에서 권한을 부여해야 합니다. 자세한 내용은 [다른 계정의 사용자가 KMS 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)을 참조하세요.

 AWS 관리형 KMS 키를 사용하여 데이터 스트림에 대한 서버 측 암호화를 활성화하고 리소스 정책을 통해 액세스를 공유하려는 경우 다음과 같이 고객 관리형 키(CMK) 사용으로 전환해야 합니다.

![\[Encryption settings interface with options for server-side encryption and customer-managed CMK.\]](http://docs.aws.amazon.com/ko_kr/streams/latest/dev/images/cmk2.png)


또한 KMS 크로스 계정 공유 기능을 사용하여 공유 보안 주체 엔터티가 CMK에 액세스할 수 있도록 허용해야 합니다. 공유 보안 주체 엔터티에 대한 IAM 정책도 변경해야 합니다. 자세한 내용은 [다른 계정의 사용자가 KMS 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)을 참조하세요.

# 비용, 리전 및 성능 고려 사항
<a name="costs-performance"></a>

서버 측 암호화를 적용하면 AWS KMS API 사용 및 키 비용이 부과됩니다. 사용자 지정 KMS 마스터 키와는 달리 `(Default) aws/kinesis` 사용자 지정 마스터 키(CMK)는 무료로 제공됩니다. 하지만 Amazon Kinesis Data Streams가 사용자를 대신하여 초래하는 API 사용 비용을 지불해야 합니다.

API 사용 비용은 사용자 지정을 포함한 모든 CMK에 적용됩니다. Kinesis Data Streams는 데이터 키를 교체할 때 약 5분마다 한 번씩 AWS KMS 를 직접적으로 호출합니다. 30일 동안 Kinesis 스트림에 의해 시작되는 AWS KMS API 호출의 총 비용은 몇 달러 미만이어야 합니다. 각 사용자 자격 증명에는 고유한 API 호출이 필요하기 때문에이 비용은 데이터 생산자 및 소비자에서 사용하는 사용자 자격 증명 수에 따라 조정됩니다 AWS KMS. IAM 역할을 권한 부여에 사용하면 각 역할 수임 호출은 결국 고유의 사용자 보안 인증이 됩니다. KMS 비용 절감을 위해 역할 수임 호출에 의해 반환된 사용자 자격 증명을 캐시하고자 할 수 있습니다.

다음은 리소스별 비용에 대한 설명입니다.

**키**
+ ( AWS 별칭 = `aws/kinesis`)에서 관리하는 Kinesis용 CMK는 무료입니다.
+ 사용자 생성 KMS 키에는 KMS 키 비용이 적용됩니다. 자세한 내용은 [AWS Key Management Service 요금](https://aws.amazon.com/kms/pricing/#Keys)을 참조하세요.

API 사용 비용은 사용자 지정을 포함한 모든 CMK에 적용됩니다. Kinesis Data Streams는 데이터 키를 교체할 때 약 5분마다 한 번씩 KMS를 직접적으로 호출합니다. 월 30일 동안 Kinesis 데이터 스트림을 통해 시작된 KMS API 호출의 총 비용은 몇 달러 미만이어야 합니다. 각 사용자 자격 증명에는 AWS KMS에 대한 고유한 API 호출이 필요하므로이 비용은 데이터 생산자 및 소비자에서 사용하는 사용자 자격 증명 수에 따라 조정됩니다. IAM 역할을 인증에 사용하면 역할 수임을 호출할 때마다 고유한 사용자 보안 인증이 생성되며 KMS 비용을 절약하기 위해 역할 수임 호출에서 반환된 사용자 보안 인증을 캐시할 수 있습니다.

## KMS API 사용
<a name="api-usage"></a>

모든 암호화된 스트림에 대해 TIP에서 읽고 리더와 라이터 전체에서 단일 IAM 계정/사용자 액세스 키를 사용할 때 Kinesis 서비스는 5분마다 약 12번 AWS KMS 서비스를 직접적으로 호출합니다. TIP에서 읽지 않으면 AWS KMS 서비스에 대한 호출이 증가할 수 있습니다. 새 데이터 암호화 키를 생성하기 위한 API 요청에는 AWS KMS 사용 비용이 부과됩니다. 자세한 내용은 [AWS Key Management Service 요금: 사용량](https://aws.amazon.com/kms/pricing/#Usage)을 참조하세요.

## 리전별 서버 측 암호화 가용성
<a name="sse-regions"></a>

현재 Kinesis 스트림의 서버 측 암호화는 AWS GovCloud(미국 서부) 및 중국 리전을 포함하여 Kinesis Data Streams에 지원되는 모든 리전에서 사용할 수 있습니다. Kinesis Data Streams가 지원되는 리전에 대한 자세한 내용은 [https://docs.aws.amazon.com/general/latest/gr/ak.html](https://docs.aws.amazon.com/general/latest/gr/ak.html)을 참조하세요.

## 성능 고려 사항
<a name="performance-considerations"></a>

암호화를 적용할 경우 생기는 서비스 오버헤드로 인해 서버 측 암호화를 적용하면 `PutRecord`, `PutRecords` 및 `GetRecords`의 일반적인 지연 시간이 100μs 미만 증가합니다.

# 서버 측 암호화를 시작하는 방법
<a name="getting-started-with-sse"></a>

서버 측 암호화를 시작하는 가장 쉬운 방법은 AWS Management Console 및 Amazon Kinesis KMS 서비스 키를 사용하는 것입니다`aws/kinesis`.

다음 절차는 Kinesis 스트림에 서버 측 암호화를 사용하도록 설정하는 방법을 보여줍니다.

**Kinesis 스트림에 서버 측 암호화를 사용하도록 설정**

1. 에 로그인 AWS Management Console 하고 [Amazon Kinesis Data Streams 콘솔](https://console.aws.amazon.com/kinesis/home?region=us-east-1#/streams/list)을 엽니다.

1.  AWS Management Console에서 Kinesis 스트림을 생성하거나 선택합니다.

1. **details(세부 정보)** 탭을 선택합니다.

1. **Server-side encryption(서버 측 암호화)**에서 **edit(편집)**를 선택합니다.

1. 사용자 생성 KMS 마스터 키를 사용하려는 경우가 아니라면 **(Default) aws/kinesis** KMS 마스터 키를 선택해야 합니다. 이 키는 Kinesis 서비스에서 생성한 KMS 마스터 키입니다. **Enabled(활성)**를 선택한 다음 **Save(저장)**를 선택합니다.
**참고**  
기본 Kinesis 서비스 마스터 키는 무료이지만 서비스에 대한 Kinesis의 API 호출 AWS KMS 에는 KMS 사용 비용이 적용됩니다.

1. 스트림이 **보류 중** 상태로 전환됩니다. 암호화가 활성화된 상태에서 스트림이 **활성** 상태로 전환되면 스트림에 쓰여진 모든 수신 데이터는 선택한 KMS 마스터 키를 사용하여 암호화됩니다.

1. 서버 측 암호화를 비활성화하려면의 **서버 측 암호화**에서 **비활성화됨을** 선택한 AWS Management Console다음 **저장**을 선택합니다.

# 사용자 생성 KMS 키 생성 및 사용
<a name="creating-using-sse-master-keys"></a>

이 섹션에서는 Amazon Kinesis에서 관리하는 마스터 키 대신 자체 KMS 키를 생성하고 사용하는 방법을 설명합니다.

## 사용자 생성 KMS 키 생성
<a name="creating-sse-master-keys"></a>

자체 키 생성에 대한 지침은 **AWS Key Management Service 개발자 안내서의 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요. 계정 키를 생성하면 Kinesis Data Streams 서비스가 **KMS 마스터 키** 목록에 이 키를 반환합니다.

## 사용자 생성 KMS 키 사용
<a name="using-sse-master-keys"></a>

소비자, 생산자 및 관리자에게 올바른 권한이 적용된 후 사용자 계정 또는 다른 AWS 계정에서 사용자 지정 KMS 키를 사용할 수 있습니다 AWS . 계정의 모든 KMS 마스터 키는 AWS Management Console의 **KMS 마스터 키** 목록에 표시됩니다.

다른 계정에 있는 사용자 지정 KMS 마스터 키를 사용하려면 해당 키를 사용할 수 있는 권한이 필요합니다. 또한 AWS Management Console의 ARN 입력란에서 KMS 마스터 키의 ARN을 지정해야 합니다.

# 사용자 생성 KMS 키 사용 권한
<a name="permissions-user-key-KMS"></a>

사용자 생성 KMS 키로 서버 측 암호화를 사용하려면 먼저 스트림 암호화와 스트림 레코드 암호화 및 복호화를 허용하도록 AWS KMS 키 정책을 구성해야 합니다. AWS KMS 권한에 대한 예제와 자세한 내용은 [AWS KMS API 권한: 작업 및 리소스 참조를 참조하세요](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html).

**참고**  
암호화에 기본 서비스 키를 사용할 때는 사용자 지정 IAM 권한을 적용할 필요가 없습니다.

사용자 생성 KMS 마스터 키를 사용하려면 먼저 Kinesis 스트림 생산자 및 소비자(IAM 보안 주체)가 KMS 마스터 키 정책에 속한 사용자여야 합니다. 그렇지 않으면 스트림에서 읽기 및 쓰기가 실패하여 궁극적으로 데이터 손실, 처리 지연 또는 애플리케이션 중단이 발생할 수 있습니다. IAM 정책을 사용하여 KMS 키 권한을 관리할 수 있습니다. 자세한 내용은 [AWS KMS에서 IAM 정책 사용을](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) 참조하세요.

## Kinesis Data Streams 암호화 컨텍스트
<a name="sse-kms-encryption-context"></a>

Amazon Kinesis Data Streams가 AWS KMS 사용자를 대신하여를 호출하면 키 정책 및 권한 부여에서 권한 부여 조건으로 사용할 수 AWS KMS 있는 암호화 컨텍스트를에 전달합니다. Kinesis Data Streams는 모든 AWS KMS 호출에서 스트림 ARN을 암호화 컨텍스트로 사용합니다.

```
"encryptionContext": {
    "aws:kinesis:arn": "arn:aws:kinesis:region:account-id:stream/stream-name"
}
```

암호화 컨텍스트를 사용하여 감사 레코드 및 로그에서 KMS 키의 사용을 식별할 수 있습니다. 와 같은 로그의 일반 텍스트로도 표시됩니다 AWS CloudTrail.

KMS 키 사용을 특정 스트림에 대한 Kinesis Data Streams의 요청으로 제한하려면 KMS 키 정책 또는 IAM 정책의 `kms:EncryptionContext:aws:kinesis:arn` 조건 키를 사용합니다.

## 예제 생산자 권한
<a name="example-producer-permissions"></a>

Kinesis 스트림 생산자에 `kms:GenerateDataKey` 권한이 있어야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:GenerateDataKey"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesis:PutRecord",
            "kinesis:PutRecords"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

## 예제 소비자 권한
<a name="example-consumer-permissions"></a>

Kinesis 스트림 소비자에 `kms:Decrypt` 권한이 있어야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:Decrypt"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesis:GetRecords",
            "kinesis:DescribeStream"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

Amazon Managed Service for Apache Flink 및는 역할을 AWS Lambda 사용하여 Kinesis 스트림을 사용합니다. 이 소비자가 사용하는 역할에 `kms:Decrypt` 권한을 추가해야 합니다.

## 스트림 관리자 권한
<a name="stream-administrator-permissions"></a>

Kinesis 스트림 관리자는 `kms:List*` 및 ```kms:DescribeKey*`를 직접적으로 호출할 수 있는 권한 부여가 필요합니다.

# KMS 키 권한 확인 및 문제 해결
<a name="sse-troubleshooting"></a>

Kinesis 스트림에 암호화를 사용하도록 설정한 후에는 다음 Amazon CloudWatch 지표를 사용하여 `putRecord`, `putRecords` 및 `getRecords` 호출 성공을 모니터링하는 것이 좋습니다.
+  `PutRecord.Success` 
+  `PutRecords.Success` 
+  `GetRecords.Success` 

자세한 내용은 [Kinesis Data Streams 모니터링](monitoring.md) 섹션을 참조하세요.

# 인터페이스 VPC 엔드포인트와 함께 Amazon Kinesis Data Streams 사용
<a name="vpc"></a>

인터페이스 VPC 엔드포인트를 사용하여 Amazon VPC와 Kinesis Data Streams 간 트래픽이 Amazon 네트워크를 벗어나지 않도록 할 수 있습니다. 인터페이스 VPC 엔드포인트에는 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 Direct Connect 연결이 필요하지 않습니다. 인터페이스 VPC 엔드포인트는 Amazon VPC의 프라이빗 IPs와 함께 탄력적 네트워크 인터페이스를 사용하여 AWS 서비스 간의 프라이빗 통신을 지원하는 AWS 기술인 PrivateLink로 AWS 구동됩니다. 자세한 내용은 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html) 및 [인터페이스 VPC 엔드포인트(AWS PrivateLink)를 참조하세요](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint).

**Topics**
+ [Kinesis Data Streams에 인터페이스 VPC 엔드포인트 사용](#using-interface-vpc-endpoints)
+ [Kinesis Data Streams의 VPCE 엔드포인트에 대한 액세스 제어](#interface-vpc-endpoints-policies)
+ [Kinesis Data Streams에 대한 VPC 엔드포인트 정책 가용성](#availability)

## Kinesis Data Streams에 인터페이스 VPC 엔드포인트 사용
<a name="using-interface-vpc-endpoints"></a>

시작할 때 스트림, 생산자 또는 소비자에 대한 설정을 변경할 필요가 없습니다. 인터페이스 VPC 엔드포인트를 통해 Amazon VPC 리소스에서 나오고 들어가는 트래픽 흐름을 시작하려면 Kinesis Data Streams에 대한 인터페이스 VPC 엔드포인트를 생성하세요. FIPS 사용 인터페이스 VPC 엔드포인트는 미국 리전에서 사용할 수 있습니다. 자세한 내용은 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)을 참조하세요.

Amazon Kinesis Producer Library(KPL) 및 Kinesis Consumer Library(KCL)는 퍼블릭 엔드포인트 또는 프라이빗 인터페이스 VPC 엔드포인트 중 사용 중인 엔드포인트를 사용하여 Amazon CloudWatch 및 Amazon DynamoDB와 같은 AWS 서비스를 호출합니다. 예를 들어 DynamoDB 인터페이스 VPC 엔드포인트가 활성화된 VPC에서 KCL 애플리케이션이 실행 중인 경우 DynamoDB와 KCL 애플리케이션 간의 호출은 인터페이스 VPC 엔드포인트를 통해 흐릅니다.

## Kinesis Data Streams의 VPCE 엔드포인트에 대한 액세스 제어
<a name="interface-vpc-endpoints-policies"></a>

VPC 엔드포인트 정책을 사용하면 정책을 VPC 엔드포인트에 연결하거나 IAM 사용자, 그룹 또는 역할에 연결된 정책의 추가 필드를 사용하여 액세스를 제어할 수 있습니다. 이를 통해 지정된 VPC 엔드포인트를 통해서만 발생하도록 액세스를 제한할 수 있습니다. 이러한 정책을 사용하면 IAM 정책과 함께 사용하여 지정된 VPC 엔드포인트를 통해 Kinesis 데이터 스트림 작업에 대한 액세스 권한만 부여하는 경우 특정 스트림에 대한 액세스를 지정된 VPC 엔드포인트로 제한할 수 있습니다.

다음은 Kinesis 데이터 스트림에 액세스하기 위한 엔드포인트 정책의 예입니다.
+ **VPC 정책 예제: 읽기 전용 액세스** - 이 샘플 정책은 VPC 엔드포인트에 연결할 수 있습니다. 자세한 내용은 [Amazon VPC 리소스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_IAM.html)를 참조하십시오. 연결된 VPC 엔드포인트를 통해서만 Kinesis 데이터 스트림을 나열하고 설명할 수 있도록 작업을 제한합니다.

  ```
  {
    "Statement": [
      {
        "Sid": "ReadOnly",
        "Principal": "*",
        "Action": [
          "kinesis:List*",
          "kinesis:Describe*"
        ],
        "Effect": "Allow",
        "Resource": "*"
      }
    ]
  }
  ```
+ **VPC 정책 예: 특정 Kinesis 데이터 스트림에 대한 액세스 제한** - 이 샘플 정책은 VPC 엔드포인트에 연결할 수 있습니다. 연결된 VPC 엔드포인트를 통한 특정 데이터 스트림에 대한 액세스를 제한합니다.

  ```
  {
    "Statement": [
      {
        "Sid": "AccessToSpecificDataStream",
        "Principal": "*",
        "Action": "kinesis:*",
        "Effect": "Allow",
        "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream"
      }
    ]
  }
  ```
+ **IAM 정책 예: 특정 VPC 엔드포인트의 특정 스트림에 대한 액세스만 제한** - 이 샘플 정책은 IAM 사용자, 역할 또는 그룹에 연결할 수 있습니다. 지정된 VPC 엔드포인트에서만 발생하도록 지정된 Kinesis 데이터 스트림에 대한 액세스를 제한합니다.

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
        {
           "Sid": "AccessFromSpecificEndpoint",
           "Action": "kinesis:*",
           "Effect": "Deny",
           "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream",
           "Condition": { "StringNotEquals" : { "aws:sourceVpce": "vpce-11aa22bb" } }
        }
     ]
  }
  ```

------

## Kinesis Data Streams에 대한 VPC 엔드포인트 정책 가용성
<a name="availability"></a>

정책이 포함된 Kinesis Data Streams 인터페이스 VPC 엔드포인트는 다음 리전에서 지원됩니다.
+ 유럽(파리)
+ 유럽(아일랜드)
+ 미국 동부(버지니아 북부)
+ 유럽(스톡홀름)
+ 미국 동부(오하이오)
+ 유럽(프랑크푸르트)
+ 남아메리카(상파울루)
+ 유럽(런던)
+ 아시아 태평양(도쿄)
+ 미국 서부(캘리포니아 북부)
+ 아시아 태평양(싱가포르)
+ 아시아 태평양(시드니)
+ 중국(베이징)
+ 중국(닝샤)
+ 아시아 태평양(홍콩)
+ Middle East (Bahrain)
+ 중동(UAE)
+ 유럽(밀라노)
+ 아프리카(케이프타운)
+ 아시아 태평양(뭄바이)
+ 아시아 태평양(서울)
+ 캐나다(중부)
+ usw2-az4를 제외한 미국 서부(오레곤)
+ AWS GovCloud(미국 동부)
+ AWS GovCloud(미국 서부)
+ 아시아 태평양(오사카)
+ 유럽(취리히)
+ 아시아 태평양(하이데라바드)