

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

# Amazon Managed Streaming for Apache Kafka의 데이터 보호
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/) Amazon Managed Streaming for Apache Kafka의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 AWS 는 모든를 실행하는 글로벌 인프라를 보호할 책임이 있습니다 AWS 클라우드. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스 의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터 보호를 위해 자격 증명을 보호하고 AWS 계정 AWS IAM Identity Center 또는 AWS Identity and Access Management (IAM)를 사용하여 개별 사용자를 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail. CloudTrail 추적을 사용하여 AWS 활동을 캡처하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [ CloudTrail 추적 작업을](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) 참조하세요.
+ 내의 모든 기본 보안 제어와 함께 AWS 암호화 솔루션을 사용합니다 AWS 서비스.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 AWS 통해에 액세스할 때 FIPS 140-3 검증 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 Amazon MSK 또는 기타 AWS 서비스 에서 콘솔 AWS CLI, API 또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.

**Topics**
+ [Amazon MSK 암호화](msk-encryption.md)
+ [Amazon MSK 암호화 시작하기](msk-working-with-encryption.md)
+ [인터페이스 VPC 엔드포인트와 함께 Amazon MSK API 사용](privatelink-vpc-endpoints.md)

# Amazon MSK 암호화
<a name="msk-encryption"></a>

Amazon MSK는 엄격한 데이터 관리 요구 사항을 충족하는 데 사용할 수 있는 데이터 암호화 옵션을 제공합니다. Amazon MSK가 암호화에 사용하는 인증서는 13개월마다 갱신해야 합니다. Amazon MSK는 모든 클러스터에 대해 해당 인증서를 자동으로 갱신합니다. Amazon MSK가 인증서 업데이트 작업을 시작할 때 Express 브로커 클러스터는 `ACTIVE` 상태를 유지합니다. Standard 브로커 클러스터의 경우 Amazon MSK는 인증서 업데이트 작업을 시작할 때 클러스터의 상태를 `MAINTENANCE`로 설정합니다. 업데이트가 완료되면 MSK는 클러스터의 상태를 다시 `ACTIVE`로 설정합니다. 클러스터가 인증서 업데이트 작업을 진행하는 동안 계속해서 데이터를 생성하고 사용할 수 있지만 해당 클러스터에 대한 업데이트 작업은 수행할 수 없습니다.

## 저장 시 Amazon MSK 암호화
<a name="msk-encryption-at-rest"></a>

Amazon MSK는 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(KMS)와 통합되어 투명한 서버 측 암호화 기능을 제공합니다. Amazon MSK는 항상 저장 데이터를 암호화합니다. MSK 클러스터를 생성하는 경우 Amazon MSK가 저장 데이터를 암호화하는 데 사용할 AWS KMS key 를 지정할 수 있습니다. KMS 키를 지정하지 않으면 Amazon MSK에서 [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)를 생성하고 사용자를 대신하여 사용합니다. KMS 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 섹션을 참조하십시오.

## 전송 중 Amazon MSK 암호화
<a name="msk-encryption-in-transit"></a>

Amazon MSK는 TLS 1.2를 사용합니다. 기본적으로 MSK 클러스터의 브로커 간에 전송 중인 데이터를 암호화합니다. 클러스터를 생성할 때 이 기본값을 재정의할 수 있습니다.

클라이언트와 브로커 간 통신의 경우 다음 세 가지 설정 중 하나를 지정해야 합니다.
+ TLS 암호화 데이터만 허용합니다. 기본 설정입니다.
+ 일반 텍스트와 TLS 암호화 데이터를 모두 허용합니다.
+ 일반 텍스트 데이터만 허용합니다.

Amazon MSK 브로커는 퍼블릭 AWS Certificate Manager 인증서를 사용합니다. 따라서 Amazon Trust Services를 신뢰하는 모든 트러스트 스토어는 Amazon MSK 브로커의 인증서도 신뢰합니다.

전송 중 암호화를 활성화하는 것이 좋지만 이 경우 CPU 오버헤드와 몇 밀리초의 지연 시간이 추가될 수 있습니다. 그러나 대부분의 사용 사례는 이러한 차이에 민감하지 않으며, 클러스터, 클라이언트, 사용 프로필 구성에 따라 영향을 미치는 정도는 달라집니다.

# Amazon MSK 암호화 시작하기
<a name="msk-working-with-encryption"></a>

MSK 클러스터를 생성할 때 JSON 형식으로 암호화 설정을 지정할 수 있습니다. 다음은 예입니다.

```
{
   "EncryptionAtRest": {
       "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcdabcd-1234-abcd-1234-abcd123e8e8e"
    },
   "EncryptionInTransit": {
        "InCluster": true,
        "ClientBroker": "TLS"
    }
}
```

`DataVolumeKMSKeyId`의 경우 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 지정하거나 계정의 MSK용 AWS 관리형 키 (`alias/aws/kafka`)를 지정할 수 있습니다. 를 지정하지 않으면 `EncryptionAtRest`Amazon MSK는 여전히에서 저장 데이터를 암호화합니다 AWS 관리형 키. 클러스터에서 사용 중인 키를 확인하려면 `GET` 요청을 보내거나 `DescribeCluster` API 작업을 호출합니다.

`EncryptionInTransit`의 경우 `InCluster`의 기본값은 true입니다. 그러나 브로커 간에 데이터가 전달될 때 Amazon MSK가 암호화하지 않도록 하려면 이를 false로 설정할 수 있습니다.

클라이언트와 브로커 사이에 전송되는 데이터에 암호화 모드를 지정하려면 `ClientBroker`를 `TLS`, `TLS_PLAINTEXT` 또는 `PLAINTEXT`의 세 가지 값 중 하나로 설정합니다.

**Topics**
+ [Amazon MSK 클러스터를 생성할 때 암호화 설정 지정](msk-working-with-encryption-cluster-create.md)
+ [Amazon MSK TLS 암호화 테스트](msk-working-with-encryption-test-tls.md)

# Amazon MSK 클러스터를 생성할 때 암호화 설정 지정
<a name="msk-working-with-encryption-cluster-create"></a>

이 프로세스는 Amazon MSK 클러스터를 생성할 때 암호화 설정을 지정하는 방법을 설명합니다.

**클러스터를 생성할 때 암호화 설정 지정**

1. 이전 예제의 내용을 파일에 저장하고 파일에 원하는 이름을 지정합니다. 예를 들어, `encryption-settings.json`이라고 지정합니다.

1. `create-cluster` 명령을 실행하고 `encryption-info` 옵션을 사용하여 구성 JSON을 저장한 파일을 가리킵니다. 다음은 예입니다. *\$1YOUR MSK VERSION\$1*을 Apache Kafka 클라이언트 버전과 일치하는 버전으로 변경합니다. MSK 클러스터 버전을 찾는 방법에 대한 자세한 내용은 [MSK 클러스터 버전 확인](create-topic.md#find-msk-cluster-version) 섹션을 참조하세요. MSK 클러스터 버전과 다른 Apache Kafka 클라이언트 버전을 사용하면 Apache Kafka 데이터 손상, 손실, 가동 중지가 발생할 수 있습니다.

   ```
   aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --kafka-version "{YOUR MSK VERSION}" --number-of-broker-nodes 3
   ```

   다음은 이 명령을 실행한 후 성공적인 응답의 예입니다.

   ```
   {
       "ClusterArn": "arn:aws:kafka:us-east-1:123456789012:cluster/SecondTLSTest/abcdabcd-1234-abcd-1234-abcd123e8e8e",
       "ClusterName": "ExampleClusterName",
       "State": "CREATING"
   }
   ```

# Amazon MSK TLS 암호화 테스트
<a name="msk-working-with-encryption-test-tls"></a>

이 프로세스는 Amazon MSK에서 TLS 암호화를 테스트하는 방법을 설명합니다.

**TLS 암호화를 테스트하려면**

1. [3단계: 클라이언트 머신 생성](create-client-machine.md)의 지침에 따라 클라이언트 머신을 만듭니다.

1. 클라이언트 머신에 Apache Kafka를 설치합니다.

1. 이 예제에서는 JVM 트러스트스토어를 사용하여 MSK 클러스터와 통신합니다. 이렇게 하려면 먼저 클라이언트 머신에 `/tmp`라는 폴더를 만듭니다. 그런 다음 Apache Kafka 설치 폴더인 `bin`으로 이동하여 다음 명령을 실행하십시오. (JVM 경로는 다를 수 있습니다.)

   ```
   cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. 클라이언트 머신의 Apache Kafka 설치 폴더인 `bin`에 있는 동안 다음 내용으로 `client.properties`라는 텍스트 파일을 만듭니다.

   ```
   security.protocol=SSL
   ssl.truststore.location=/tmp/kafka.client.truststore.jks
   ```

1. 가 AWS CLI 설치된 시스템에서 다음 명령을 실행하여 *clusterARN*을 클러스터의 ARN으로 바꿉니다.

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   성공적인 결과는 다음과 같습니다. 다음 단계에 필요하므로 이 결과를 저장하십시오.

   ```
   {
       "BootstrapBrokerStringTls": "a-1.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-3.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-2.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123"
   }
   ```

1. 다음 명령을 실행하여 *BootstrapBrokerStringTls*를 이전 단계에서 얻은 브로커 엔드포인트 중 하나로 변경합니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringTls --producer.config client.properties --topic TLSTestTopic
   ```

1. 새 명령 창을 열고 동일한 클라이언트 머신에 연결합니다. 그러면 다음 명령을 실행하여 콘솔 소비자를 생성합니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringTls --consumer.config client.properties --topic TLSTestTopic
   ```

1. 생산자 창에서 문자 메시지와 반환을 입력하고 소비자 창에서 동일한 메시지를 찾습니다. Amazon MSK는 이 메시지를 전송하는 동안 암호화했습니다.

암호화된 데이터로 작업하도록 Apache Kafka 클라이언트를 구성하는 방법에 대한 자세한 내용은 [Kafka 클라이언트 구성](https://kafka.apache.org/documentation/#security_configclients)을 참조하십시오.

# 인터페이스 VPC 엔드포인트와 함께 Amazon MSK API 사용
<a name="privatelink-vpc-endpoints"></a>

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

애플리케이션은 AWS PrivateLink를 사용하여 Amazon MSK Provisioned 및 MSK Connect APIs에 연결할 수 있습니다. 시작하려면 Amazon VPC 리소스의 트래픽이 인터페이스 VPC 엔드포인트를 통해 흐름을 시작하도록 Amazon MSK API에 대한 인터페이스 VPC 엔드포인트를 생성합니다. FIPS 지원 인터페이스 VPC 엔드포인트는 미국 리전에서 사용할 수 있습니다. 자세한 내용은 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)을 참조하세요.

이 기능을 사용하면 Apache Kafka 클라이언트가 인터넷을 순회하여 연결 문자열을 검색하지 않고도 연결 문자열을 동적으로 가져와 MSK Provisioned 또는 MSK Connect 리소스와 연결할 수 있습니다.

인터페이스 VPC 엔드포인트를 생성할 때 다음 서비스 이름 엔드포인트 중 하나를 선택합니다.

**MSK Provisioned의 경우:**
+ 다음 서비스 이름 엔드포인트는 새 연결에 더 이상 지원되지 않습니다.
  + com.amazonaws.region.kafka
  + com.amazonaws.region.kafka-fips(FIPS 지원)
+ IPv4 및 IPv6 트래픽을 모두 지원하는 듀얼 스택 엔드포인트 서비스는 다음과 같습니다.
  + aws.api.region.kafka-api
  + aws.api.region.kafka-api-fips(FIPS 지원)

듀얼 스택 엔드포인트를 설정하려면 [듀얼 스택 및 FIPS 엔드포인트](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html) 지침을 따라야 합니다.

여기서 region은 리전 이름입니다. MSK Provisioned 호환 API를 사용하려면 이 서비스 이름을 선택합니다. 자세한 내용은 *https://docs.aws.amazon.com/msk/1.0/apireference/*의 [작업](https://docs.aws.amazon.com/msk/1.0/apireference/operations.html)을 참조하세요.

**MSK Connect의 경우:**
+ com.amazonaws.region.kafkaconnect

여기서 region은 리전 이름입니다. MSK Connect 호환 API를 사용하려면 이 서비스 이름을 선택합니다. 자세한 내용은 *Amazon Connect API 참조*의 [작업](https://docs.aws.amazon.com/MSKC/latest/mskc/API_Operations.html)을 참조하세요.

인터페이스 VPC 엔드포인트를 생성하는 단계별 지침을 비롯한 자세한 내용은 *AWS PrivateLink 설명서*의 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)을 참조하세요.

## Amazon MSK Provisioned 또는 MSK Connect API의 VPC 엔드포인트에 대한 액세스 제어
<a name="vpc-endpoints-control-access"></a>

VPC 엔드포인트 정책을 사용하면 정책을 VPC 엔드포인트에 연결하거나 IAM 사용자, 그룹 또는 역할에 연결된 정책의 추가 필드를 사용하여 액세스를 제어할 수 있습니다. 이를 통해 지정된 VPC 엔드포인트를 통해서만 발생하도록 액세스를 제한할 수 있습니다. 적절한 예제 정책을 사용하여 MSK Provisioned 또는 MSK Connect 서비스에 대한 액세스 권한을 정의합니다.

엔드포인트를 생성할 때 정책을 연결하지 않으면 Amazon VPC는 서비스에 대한 전체 액세스를 허용하는 기본 정책을 자동으로 연결합니다. 엔드포인트 정책은 IAM ID 기반 정책 또는 서비스별 정책을 재정의하거나 대체하지 않습니다. 이는 엔드포인트에서 지정된 서비스로의 액세스를 제어하기 위한 별도의 정책입니다.

자세한 내용은 *AWS PrivateLink 설명서*의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

------
#### [ MSK Provisioned — VPC policy example ]

**읽기 전용 액세스**  
이 샘플 정책은 VPC 엔드포인트에 연결할 수 있습니다. 자세한 내용은 Amazon VPC 리소스에 대한 액세스 제어를 참조하십시오. 연결된 VPC 엔드포인트를 통해서만 작업을 나열하고 설명할 수 있도록 작업을 제한합니다.

```
{
  "Statement": [
    {
      "Sid": "MSKReadOnly",
      "Principal": "*",
      "Action": [
        "kafka:List*",
        "kafka:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

**MSK Provisioned - VPC 엔드포인트 정책 예제**  
특정 MSK 클러스터에 대한 액세스 제한

이 샘플 정책은 VPC 엔드포인트에 연결할 수 있습니다. 연결된 VPC 엔드포인트를 통한 특정 Kafka 클러스터에 대한 액세스를 제한합니다.

```
{
  "Statement": [
    {
      "Sid": "AccessToSpecificCluster",
      "Principal": "*",
      "Action": "kafka:*",
      "Effect": "Allow",
      "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/MyCluster"
    }
  ]
}
```

------
#### [ MSK Connect — VPC endpoint policy example ]

**커넥터 나열 및 새 커넥터 생성**  
다음은 MSK Connect에 대한 엔드포인트 정책의 예입니다. 이 정책은 지정된 역할이 커넥터를 나열하고 새 커넥터를 생성하도록 허용합니다.

```
{
    "Version": "2012-10-17", 		 	 	 		 	 	 
    "Statement": [
        {
            "Sid": "MSKConnectPermissions",
            "Effect": "Allow",
            "Action": [
                "kafkaconnect:ListConnectors",
                "kafkaconnect:CreateConnector"
            ],
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/MyMSKConnectExecutionRole"
                ]
            }
        }
    ]
}
```

**MSK Connect — VPC 엔드포인트 정책 예제**  
지정된 VPC에 있는 특정 IP 주소의 요청만 허용

다음 예제는 지정된 VPC의 지정된 IP 주소에서 들어오는 요청만 성공하도록 허용하는 정책을 보여 줍니다. 다른 IP 주소에서 들어오는 요청은 실패합니다.

```
{
    "Statement": [
        {
            "Action": "kafkaconnect:*",
            "Effect": "Allow",
            "Principal": "*",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "192.0.2.123"
                },
        "StringEquals": {
                    "aws:SourceVpc": "vpc-555555555555"
                }
            }
        }
    ]
}
```

------