

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

# Amazon MSK의 보안
<a name="security"></a>

의 클라우드 보안 AWS 이 최우선 순위입니다. AWS 고객은 보안에 가장 민감한 조직의 요구 사항을 충족하도록 구축된 데이터 센터 및 네트워크 아키텍처의 이점을 누릴 수 있습니다.

보안은 AWS 와 사용자 간의 공동 책임입니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 이 사항을 클라우드*의* 보안 및 클라우드 *내* 보안으로 설명합니다.
+ **클라우드 보안 **- AWS 는 AWS 클라우드에서 AWS 서비스를 실행하는 인프라를 보호할 책임이 있습니다. AWS 또한는 안전하게 사용할 수 있는 서비스를 제공합니다. 타사 감사자는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/) 일환으로 보안의 효과를 정기적으로 테스트하고 확인합니다. Amazon Managed Streaming for Apache Kafka에 적용되는 규정 준수 프로그램에 대해 알아보려면 [규정 준수 프로그램별 범위 내 Amazon Web Services](https://aws.amazon.com/compliance/services-in-scope/)를 참조하세요.
+ **클라우드의 보안** - 사용자의 책임은 사용하는 AWS 서비스에 따라 결정됩니다. 또한 귀하는 데이터의 민감도, 회사 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

이 설명서는 Amazon MSK를 사용할 때 공동 책임 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 주제에서는 보안 및 규정 준수 목표를 충족하도록 Amazon MSK를 구성하는 방법을 설명합니다. 또한 Amazon MSK 리소스를 모니터링하고 보호하는 데 도움이 되는 다른 Amazon Web Services를 사용하는 방법도 알아봅니다.

**Topics**
+ [Amazon Managed Streaming for Apache Kafka의 데이터 보호](data-protection.md)
+ [Amazon MSK API에 대한 인증 및 권한 부여](security-iam.md)
+ [Apache Kafka API에 대한 인증 및 권한 부여](kafka_apis_iam.md)
+ [Amazon MSK 클러스터의 보안 그룹 변경](change-security-group.md)
+ [Amazon MSK 클러스터의 Apache ZooKeeper 노드에 대한 액세스 제어](zookeeper-security.md)
+ [Amazon Managed Streaming for Apache Kafka에 대한 규정 준수 검증](MSK-compliance.md)
+ [Amazon Managed Streaming for Apache Kafka의 복원력](disaster-recovery-resiliency.md)
+ [Amazon Managed Streaming for Apache Kafka의 인프라 보안](infrastructure-security.md)

# 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"
                }
            }
        }
    ]
}
```

------

# Amazon MSK API에 대한 인증 및 권한 부여
<a name="security-iam"></a>

AWS Identity and Access Management (IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 AWS 서비스 되는 입니다. IAM 관리자는 Amazon MSK 리소스를 사용할 수 있도록 *인증*(로그인)하고 *권한을 부여*(권한 보유)할 수 있는 사용자를 제어합니다. IAM은 추가 비용 없이 사용할 수 AWS 서비스 있는 입니다.

**Topics**
+ [Amazon MSK와 IAM의 작동 방식](security_iam_service-with-iam.md)
+ [Amazon MSK ID 기반 정책 예제](security_iam_id-based-policy-examples.md)
+ [Amazon MSK의 서비스 연결 역할](using-service-linked-roles.md)
+ [AWS Amazon MSK에 대한 관리형 정책](security-iam-awsmanpol.md)
+ [Amazon MSK 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md)

# Amazon MSK와 IAM의 작동 방식
<a name="security_iam_service-with-iam"></a>

IAM을 사용하여 Amazon MSK에 대한 액세스를 관리하기 전에 Amazon MSK에서 사용할 수 있는 IAM 기능을 이해해야 합니다. Amazon MSK 및 기타 AWS 서비스에서 IAM을 사용하는 방법을 전체적으로 알아보려면 *IAM 사용 설명서*의 [AWS IAM으로 작업하는 서비스를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 참조하세요.

**Topics**
+ [Amazon MSK ID 기반 정책](security_iam_service-with-iam-id-based-policies.md)
+ [Amazon MSK 리소스 기반 정책](security_iam_service-with-iam-resource-based-policies.md)
+ [Amazon MSK 태그 기반 권한 부여](security_iam_service-with-iam-tags.md)
+ [Amazon MSK IAM 역할](security_iam_service-with-iam-roles.md)

# Amazon MSK ID 기반 정책
<a name="security_iam_service-with-iam-id-based-policies"></a>

IAM ID 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. Amazon MSK는 특정 작업, 리소스, 조건 키를 지원합니다. JSON 정책에서 사용하는 모든 요소에 대해 알고 싶다면 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)를 참조하세요.

## Amazon MSK 자격 증명 기반 정책에 대한 작업
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

JSON 정책의 `Action`요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 작업을 설명합니다. 연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에 작업을 포함하세요.

Amazon MSK의 정책 작업은 작업 앞에 `kafka:` 접두사를 사용합니다. 예를 들어 누군가에게 Amazon MSK `DescribeCluster` API 작업으로 MSK 클러스터를 설명할 수 있는 권한을 부여하려면 정책에 `kafka:DescribeCluster` 작업을 포함하면 됩니다. 정책 문에는 `Action` 또는 `NotAction` 요소가 포함되어야 합니다. Amazon MSK는 이 서비스로 수행할 수 있는 태스크를 설명하는 자체 작업 세트를 정의합니다.

MSK 주제 APIs에 대한 정책 작업은 작업 앞에 `kafka-cluster` 접두사를 사용합니다. 단원을 참조하십시오[IAM 권한 부여 정책 작업 및 리소스의 의미](kafka-actions.md).

명령문 하나에 여러 태스크를 지정하려면 다음과 같이 쉼표로 구분합니다.

```
"Action": ["kafka:action1", "kafka:action2"]
```

와일드카드(\$1)를 사용하여 여러 작업을 지정할 수 있습니다. 예를 들어, `Describe`라는 단어로 시작하는 모든 작업을 지정하려면 다음 작업을 포함합니다.

```
"Action": "kafka:Describe*"
```



Amazon MSK 작업 목록을 보려면 *IAM 사용 설명서*에서 [Amazon Managed Streaming for Apache Kafka를 위한 작업, 리소스, 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonmanagedstreamingforapachekafka.html)를 참조하세요.

## Amazon MSK 자격 증명 기반 정책에 대한 리소스
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Resource` JSON 정책 요소는 작업이 적용되는 하나 이상의 객체를 지정합니다. 모범 사례에 따라 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)을 사용하여 리소스를 지정합니다. 리소스 수준 권한을 지원하지 않는 작업의 경우, 와일드카드(\$1)를 사용하여 해당 문이 모든 리소스에 적용됨을 나타냅니다.

```
"Resource": "*"
```



Amazon MSK 인스턴스 리소스의 ARN은 다음과 같습니다.

```
arn:${Partition}:kafka:${Region}:${Account}:cluster/${ClusterName}/${UUID}
```

ARN 형식에 대한 자세한 내용은 [Amazon 리소스 이름(ARNs) 및 AWS 서비스 네임스페이스를 참조하세요](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).

예를 들어 문에서 `CustomerMessages` 인스턴스를 지정하려면 다음 ARN을 사용합니다.

```
"Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/CustomerMessages/abcd1234-abcd-dcba-4321-a1b2abcd9f9f-2"
```

특정 계정에 속하는 모든 인스턴스를 지정하려면 와일드카드(\$1)를 사용합니다.

```
"Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/*"
```

리소스 생성 태스크와 같은 일부 Amazon MSK 태스크는 특정 리소스에서 수행할 수 없습니다. 이러한 경우, 와일드카드(\$1)를 사용해야 합니다.

```
"Resource": "*"
```

단일 문에서 여러 리소스를 지정하려면 ARN을 쉼표로 구분합니다.

```
"Resource": ["resource1", "resource2"]
```

Amazon MSK 리소스 유형과 해당 ARN의 목록을 보려면 *IAM 사용 설명서*에서 [Amazon Managed Streaming for Apache Kafka로 정의된 리소스](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-resources-for-iam-policies)를 참조하세요. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 [Amazon Managed Streaming for Apache Kafka에서 정의한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-actions-as-permissions)을 참조하세요.

## Amazon MSK 자격 증명 기반 정책의 조건 키
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Condition` 요소는 정의된 기준에 따라 문이 실행되는 시기를 지정합니다. 같음(equals) 또는 미만(less than)과 같은 [조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.

Amazon MSK는 자체 조건 키 세트를 정의하며 일부 전역 조건 키 사용도 지원합니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html).



Amazon MSK 조건 키 목록을 보려면 *IAM 사용 설명서*에서 [Amazon Managed Streaming for Apache Kafka를 위한 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-policy-keys)를 참조하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 [Amazon Managed Streaming for Apache Kafka에서 정의한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-actions-as-permissions)을 참조하세요.

## Amazon MSK 자격 증명 기반 정책의 예제
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Amazon MSK ID 기반 정책 예제를 보려면 [Amazon MSK ID 기반 정책 예제](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

# Amazon MSK 리소스 기반 정책
<a name="security_iam_service-with-iam-resource-based-policies"></a>

Amazon MSK는 Amazon MSK 클러스터와 함께 사용할 수 있는 클러스터 정책(리소스 기반 정책이라고도 함)을 지원합니다. 클러스터 정책을 사용하여 Amazon MSK 클러스터에 대한 프라이빗 연결을 설정할 수 있는 크로스 계정 권한이 있는 IAM 주체를 정의할 수 있습니다. IAM 클라이언트 인증과 함께 사용하는 경우, 클러스터 정책을 사용하여 연결 클라이언트에 대한 Kafka 데이터 영역 권한을 세분화하여 정의할 수도 있습니다.

클러스터 정책에 지원되는 최대 크기는 20KB입니다.

클러스터 정책을 구성하는 방법의 예를 보려면 [2단계: MSK 클러스터에 클러스터 정책 연결](mvpc-cluster-owner-action-policy.md) 섹션을 참조하세요.

# Amazon MSK 태그 기반 권한 부여
<a name="security_iam_service-with-iam-tags"></a>

Amazon MSK 클러스터에 태그를 연결할 수 있습니다. 태그에 근거하여 액세스를 제어하려면 `kafka:ResourceTag/key-name`, `aws:RequestTag/key-name`또는 `aws:TagKeys`조건 키를 사용하여 정책의 [조건 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에 태그 정보를 제공합니다. Amazon MSK 리소스 태그 지정에 대한 자세한 내용은 [Amazon MSK 클러스터에 태그 지정](msk-tagging.md) 섹션을 참조하세요.

태그를 통해서만 클러스터 액세스를 제어할 수 있습니다. 주제 및 소비자 그룹에 태그를 지정하려면 태그 없이 정책에 별도의 문을 추가해야 합니다.

클러스터에서 태그 기반으로 해당 클러스터에 대한 액세스를 제한하는 ID 기반 정책의 예를 보려면 [태그를 기반으로 Amazon MSK 클러스터에 액세스](security_iam_id-based-policy-examples-view-widget-tags.md) 섹션을 참조하세요.

ID 기반 정책의 조건을 사용하여 태그를 기반으로 Amazon MSK 리소스에 대한 액세스를 제어할 수 있습니다. 다음 예에서는 사용자가 클러스터를 설명하고, 부트스트랩 브로커를 가져오고, 브로커 노드를 나열, 업데이트, 삭제할 수 있도록 허용하는 정책을 보여줍니다. 그러나 이 정책은 클러스터 태그 `Owner`에 해당 사용자의 `username` 값이 있는 경우에만 권한을 부여합니다. 다음 정책의 두 번째 문은 클러스터의 주제에 대한 액세스를 허용합니다. 이 정책의 첫 번째 문은 주제 액세스를 승인하지 않습니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessClusterIfOwner",
      "Effect": "Allow",
      "Action": [
        "kafka:Describe*",
        "kafka:Get*",
        "kafka:List*",
        "kafka:Update*",
        "kafka:Delete*"
      ],
      "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Owner": "${aws:username}"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kafka-cluster:*Topic*",
        "kafka-cluster:WriteData",
        "kafka-cluster:ReadData"
      ],
      "Resource": [
        "arn:aws:kafka:us-east-1:123456789012:topic/*"
      ]
    }
  ]
}
```

------

# Amazon MSK IAM 역할
<a name="security_iam_service-with-iam-roles"></a>

[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)은 특정 권한이 있는 Amazon Web Services 계정 내의 엔터티입니다.

## Amazon MSK에서 임시 자격 증명 사용
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

임시 보안 인증을 사용하여 페더레이션을 통해 로그인하거나, IAM 역할을 맡거나, 교차 계정 역할을 맡을 수 있습니다. [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 또는 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)과 같은 AWS STS API 작업을 호출하여 임시 보안 자격 증명을 얻습니다.

Amazon MSK는 임시 보안 인증 정보 사용을 지원합니다.

## 서비스 연결 역할
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)을 사용하면 Amazon Web Services가 다른 서비스의 리소스에 액세스하여 사용자 대신 작업을 완료할 수 있습니다. 서비스 연결 역할은 IAM 계정에 나타나고 서비스가 소유합니다. 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집할 수는 없습니다.

Amazon MSK는 서비스 연결 역할을 지원합니다. Amazon MSK 서비스 연결 역할 생성 또는 관리에 대한 자세한 내용은 [Amazon MSK의 서비스 연결 역할](using-service-linked-roles.md) 섹션을 참조하세요.

# Amazon MSK ID 기반 정책 예제
<a name="security_iam_id-based-policy-examples"></a>

기본적으로 IAM 사용자 및 역할에는 Amazon MSK API 작업을 실행할 수 있는 권한이 없습니다. 관리자는 지정된 리소스에서 특정 API 태스크를 수행할 수 있는 권한을 사용자와 역할에게 부여하는 IAM 정책을 생성해야 합니다. 그런 다음 관리자는 해당 권한이 필요한 IAM 사용자 또는 그룹에 이러한 정책을 연결해야 합니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [JSON 탭에서 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)을 참조하세요.

**Topics**
+ [정책 모범 사례](security_iam_service-with-iam-policy-best-practices.md)
+ [사용자가 자신의 고유한 권한을 볼 수 있도록 허용](security_iam_id-based-policy-examples-view-own-permissions.md)
+ [하나의 Amazon MSK 클러스터 액세스](security_iam_id-based-policy-examples-access-one-cluster.md)
+ [태그를 기반으로 Amazon MSK 클러스터에 액세스](security_iam_id-based-policy-examples-view-widget-tags.md)

# 정책 모범 사례
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID 기반 정책에 따라 계정에서 사용자가 Amazon MSK 리소스를 생성, 액세스 또는 삭제할 수 있는지 여부가 결정됩니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ ** AWS 관리형 정책을 시작하고 최소 권한으로 전환 -** 사용자 및 워크로드에 권한 부여를 시작하려면 많은 일반적인 사용 사례에 대한 권한을 부여하는 *AWS 관리형 정책을* 사용합니다. 에서 사용할 수 있습니다 AWS 계정. 사용 사례에 맞는 AWS 고객 관리형 정책을 정의하여 권한을 추가로 줄이는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 또는 [AWS 직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.
+ **최소 권한 적용** – IAM 정책을 사용하여 권한을 설정하는 경우, 작업을 수행하는 데 필요한 권한만 부여합니다. 이렇게 하려면 *최소 권한*으로 알려진 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의합니다. IAM을 사용하여 권한을 적용하는 방법에 대한 자세한 정보는 *IAM 사용 설명서*에 있는 [IAM의 정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)을 참조하세요.
+ **IAM 정책의 조건을 사용하여 액세스 추가 제한** – 정책에 조건을 추가하여 작업 및 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어, SSL을 사용하여 모든 요청을 전송해야 한다고 지정하는 정책 조건을 작성할 수 있습니다. AWS 서비스와 같은 특정를 통해 사용되는 경우 조건을 사용하여 서비스 작업에 대한 액세스 권한을 부여할 수도 있습니다 CloudFormation. 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.
+ **IAM Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 100개 이상의 정책 확인 항목과 실행 가능한 추천을 제공하여 안전하고 기능적인 정책을 작성하도록 돕습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM Access Analyzer에서 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.
+ **다중 인증(MFA) 필요 -**에서 IAM 사용자 또는 루트 사용자가 필요한 시나리오가 있는 경우 추가 보안을 위해 MFA를 AWS 계정켭니다. API 작업을 직접적으로 호출할 때 MFA가 필요하면 정책에 MFA 조건을 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [MFA를 통한 보안 API 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)를 참조하세요.

IAM의 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

# 사용자가 자신의 고유한 권한을 볼 수 있도록 허용
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

이 예제는 IAM 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여줍니다. 이 정책에는 콘솔에서 또는 AWS CLI 또는 AWS API를 사용하여 프로그래밍 방식으로이 작업을 완료할 수 있는 권한이 포함됩니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# 하나의 Amazon MSK 클러스터 액세스
<a name="security_iam_id-based-policy-examples-access-one-cluster"></a>

이 예에서는 Amazon Web Services 계정의 IAM 사용자에게 클러스터 중 하나인 `purchaseQueriesCluster`에 대한 액세스 권한을 부여하려고 합니다. 이 정책은 사용자가 클러스터를 설명하고, 부트스트랩 브로커를 가져오고, 브로커 노드를 나열하고 업데이트할 수 있도록 허용합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"UpdateCluster",
         "Effect":"Allow",
         "Action":[
            "kafka:Describe*",
            "kafka:Get*",
            "kafka:List*",
            "kafka:Update*"
         ],
         "Resource":"arn:aws:kafka:us-east-1:012345678012:cluster/purchaseQueriesCluster/abcdefab-1234-abcd-5678-cdef0123ab01-2"
      }
   ]
}
```

------

# 태그를 기반으로 Amazon MSK 클러스터에 액세스
<a name="security_iam_id-based-policy-examples-view-widget-tags"></a>

ID 기반 정책의 조건을 사용하여 태그를 기반으로 Amazon MSK 리소스에 대한 액세스를 제어할 수 있습니다. 이 예에서는 사용자가 클러스터를 설명하고, 부트스트랩 브로커를 가져오고, 브로커 노드를 나열, 업데이트, 삭제할 수 있도록 허용하는 정책 생성 방법을 보여줍니다. 하지만 클러스터 태그 `Owner`가 해당 사용자의 사용자 이름 값을 가지고 있는 경우에만 권한이 부여됩니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessClusterIfOwner",
      "Effect": "Allow",
      "Action": [
        "kafka:Describe*",
        "kafka:Get*",
        "kafka:List*",
        "kafka:Update*",
        "kafka:Delete*"
      ],
      "Resource": "arn:aws:kafka:us-east-1:012345678012:cluster/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Owner": "${aws:username}"
        }
      }
    }
  ]
}
```

------

이 정책을 계정의 IAM 사용자에게 연결할 수 있습니다. `richard-roe`라는 사용자가 MSK 클러스터를 업데이트하려고 시도하는 경우 클러스터에 `Owner=richard-roe` 또는 `owner=richard-roe` 태그를 지정해야 합니다. 그렇지 않으면 액세스가 거부됩니다. 조건 키 이름은 대소문자를 구분하지 않기 때문에 조건 태그 키 `Owner`는 `Owner` 및 `owner` 모두와 일치합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.

# Amazon MSK의 서비스 연결 역할
<a name="using-service-linked-roles"></a>

Amazon MSK는 AWS Identity and Access Management (IAM) [ 서비스 연결 역할을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role) 사용합니다. 서비스 연결 역할은 Amazon MSK에 직접 연결되는 고유한 유형의 IAM 역할입니다. 서비스 연결 역할은 Amazon MSK에서 사전 정의하며 서비스가 사용자를 대신하여 다른 AWS 서비스를 호출하는 데 필요한 모든 권한을 포함합니다.

서비스 연결 역할을 사용하면 필요한 권한을 수동으로 추가할 필요가 없으므로 Amazon MSK를 더 간편하게 설정할 수 있습니다. Amazon MSK는 서비스 연결 역할의 권한을 정의합니다. 달리 정의되지 않는 한, Amazon MSK만이 해당 역할을 맡을 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함되며 이 권한 정책은 다른 IAM 엔터티에 연결할 수 없습니다.

서비스 연결 역할을 지원하는 다른 서비스에 대한 자세한 내용은 [IAM과 함께 작동하는 Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하고 **서비스 연결 역할** 열에서 **예**로 표시된 서비스를 찾아보세요. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예(Yes)** 링크를 선택합니다.

**Topics**
+ [서비스 연결 역할 권한](slr-permissions.md)
+ [서비스 연결 역할 생성](create-slr.md)
+ [서비스 연결 역할 편집](edit-slr.md)
+ [서비스 연결 역할이 지원되는 리전](slr-regions.md)

# Amazon MSK에 대한 서비스 연결 역할 권한
<a name="slr-permissions"></a>

Amazon MSK는 **AWSServiceRoleForKafka**라는 서비스 연결 역할을 사용합니다. Amazon MSK는 해당 역할을 사용하여 리소스에 액세스하고 다음과 같은 작업을 수행합니다.
+ `*NetworkInterface` – 고객 계정에서 네트워크 인터페이스를 생성하고 관리하여 고객 VPC의 클라이언트가 클러스터 브로커에 액세스할 수 있도록 합니다.
+ `*VpcEndpoints` -를 사용하여 고객 VPC의 클라이언트가 클러스터 브로커에 액세스할 수 있도록 하는 고객 계정의 VPC 엔드포인트를 관리합니다 AWS PrivateLink. Amazon MSK는 `DescribeVpcEndpoints`, `ModifyVpcEndpoint`, `DeleteVpcEndpoints`에 대한 권한을 사용합니다.
+ `secretsmanager` -를 사용하여 클라이언트 자격 증명을 관리합니다 AWS Secrets Manager.
+ `GetCertificateAuthorityCertificate` - 프라이빗 인증 기관의 인증서를 검색합니다.
+ `*Ipv6Addresses` - 고객 계정의 네트워크 인터페이스에 IPv6 주소를 할당 및 할당 해제하여 MSK 클러스터에 대한 IPv6 연결을 활성화합니다.
+ `ModifyNetworkInterfaceAttribute` - MSK 클러스터 연결을 위한 IPv6 설정을 구성하도록 고객 계정의 네트워크 인터페이스 속성을 수정합니다.

이 서비스 연결 역할은 관리형 정책 `KafkaServiceRolePolicy`에 연결됩니다. 이 정책에 대한 업데이트는 [KafkaServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/KafkaServiceRolePolicy.html)를 참조하세요.

AWSServiceRoleForKafka 서비스 연결 역할은 역할을 수임하기 위해 다음 서비스를 신뢰합니다.
+ `kafka.amazonaws.com`

역할 권한 정책을 통해 Amazon MSK는 리소스에 대해 다음 작업을 완료할 수 있습니다.

IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions) 섹션을 참조하세요.

# Amazon MSK에 대한 서비스 연결 역할 생성
<a name="create-slr"></a>

서비스 연결 역할은 수동으로 생성할 필요가 없습니다. AWS CLI, 또는 AWS API에서 Amazon MSK 클러스터 AWS Management Console를 생성하면 Amazon MSK가 서비스 연결 역할을 생성합니다.

이 서비스 연결 역할을 삭제했다가 다시 생성해야 하는 경우 동일한 프로세스를 사용하여 계정에서 역할을 다시 생성할 수 있습니다. Amazon MSK 클러스터를 생성하는 경우 Amazon MSK에서 서비스 연결 역할을 다시 생성합니다.

# Amazon MSK에 대한 서비스 연결 역할 편집
<a name="edit-slr"></a>

Amazon MSK에서는 AWSServiceRoleForKafka 서비스 연결 역할을 편집하도록 허용하지 않습니다. 서비스 연결 역할을 생성한 후에는 다양한 개체가 역할을 참조할 수 있기 때문에 역할 이름을 변경할 수 없습니다. 하지만 IAM을 사용하여 역할의 설명을 편집할 수 있습니다. 자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할 편집](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)을 참조하세요.

# Amazon MSK 서비스 연결 역할에 대해 지원되는 리전
<a name="slr-regions"></a>

Amazon MSK는 서비스가 제공되는 모든 리전에서 서비스 연결 역할 사용을 지원합니다. 자세한 설명은 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html)를 참조하세요.

# AWS Amazon MSK에 대한 관리형 정책
<a name="security-iam-awsmanpol"></a>

 AWS 관리형 정책은에서 생성하고 관리하는 독립 실행형 정책입니다 AWS. AWS 관리형 정책은 사용자, 그룹 및 역할에 권한 할당을 시작할 수 있도록 많은 일반적인 사용 사례에 대한 권한을 제공하도록 설계되었습니다.

 AWS 관리형 정책은 모든 AWS 고객이 사용할 수 있으므로 특정 사용 사례에 대해 최소 권한을 부여하지 않을 수 있습니다. 사용 사례에 고유한 [고객 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)을 정의하여 권한을 줄이는 것이 좋습니다.

 AWS 관리형 정책에 정의된 권한은 변경할 수 없습니다. 가 관리형 정책에 정의된 권한을 AWS 업데이트하는 AWS 경우 업데이트는 정책이 연결된 모든 보안 주체 자격 증명(사용자, 그룹 및 역할)에 영향을 줍니다. AWS AWS 서비스 는 새가 시작되거나 기존 서비스에 새 API 작업을 사용할 수 있게 될 때 AWS 관리형 정책을 업데이트할 가능성이 높습니다.

자세한 내용은 *IAM 사용자 가이드*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

# AWS 관리형 정책: AmazonMSKFullAccess
<a name="security-iam-awsmanpol-AmazonMSKFullAccess"></a>

이 정책은 모든 Amazon MSK 작업에 대한 전체 액세스 권한을 허용하는 관리 권한을 보안 주체에게 부여합니다. 해당 정책의 권한은 다음과 같이 그룹화됩니다.
+ Amazon MSK 권한은 모든 Amazon MSK 작업을 허용합니다.
+ **`Amazon EC2` 권한** - 이 정책에서 이 권한은 API 요청에서 전달된 리소스를 검증하는 데 필요합니다. 이는 Amazon MSK가 클러스터에서 리소스를 성공적으로 사용할 수 있도록 하기 위한 것입니다. 이 정책의 나머지 Amazon EC2 권한은 Amazon MSK가 클러스터에 연결하는 데 필요한 AWS 리소스를 생성하도록 허용합니다.
+ **`AWS KMS` 권한** - 이 정책에서 이 권한은 API 호출 중에 요청에서 전달된 리소스를 검증하는 데 사용됩니다. Amazon MSK가 전달된 키를 Amazon MSK 클러스터에서 사용할 수 있도록 하기 위해 필요합니다.
+ **`CloudWatch Logs, Amazon S3, and Amazon Data Firehose` 권한** - 이 권한은 Amazon MSK가 로그 전송 대상에 도달할 수 있는지와 브로커 로그 사용에 유효한지 확인하는 데 필요합니다.
+ **`IAM` 권한** – 이 권한은 계정에서 서비스 연결 역할을 생성하고 서비스 실행 역할을 Amazon MSK에 전달할 수 있도록 하는 데 필요합니다.

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

****  

```
    {
    	"Version":"2012-10-17",		 	 	 
    	"Statement": [{
    			"Effect": "Allow",
    			"Action": [
    				"kafka:*",
    				"ec2:DescribeSubnets",
    				"ec2:DescribeVpcs",
    				"ec2:DescribeSecurityGroups",
    				"ec2:DescribeRouteTables",
    				"ec2:DescribeVpcEndpoints",
    				"ec2:DescribeVpcAttribute",
    				"kms:DescribeKey",
    				"kms:CreateGrant",
    				"logs:CreateLogDelivery",
    				"logs:GetLogDelivery",
    				"logs:UpdateLogDelivery",
    				"logs:DeleteLogDelivery",
    				"logs:ListLogDeliveries",
    				"logs:PutResourcePolicy",
    				"logs:DescribeResourcePolicies",
    				"logs:DescribeLogGroups",
    				"S3:GetBucketPolicy",
    				"firehose:TagDeliveryStream"
    			],
    			"Resource": "*"
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateVpcEndpoint"
    			],
    			"Resource": [
    				"arn:*:ec2:*:*:vpc/*",
    				"arn:*:ec2:*:*:subnet/*",
    				"arn:*:ec2:*:*:security-group/*"
    			]
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateVpcEndpoint"
    			],
    			"Resource": [
    				"arn:*:ec2:*:*:vpc-endpoint/*"
    			],
    			"Condition": {
    				"StringEquals": {
    					"aws:RequestTag/AWSMSKManaged": "true"
    				},
    				"StringLike": {
    					"aws:RequestTag/ClusterArn": "*"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateTags"
    			],
    			"Resource": "arn:*:ec2:*:*:vpc-endpoint/*",
    			"Condition": {
    				"StringEquals": {
    					"ec2:CreateAction": "CreateVpcEndpoint"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:DeleteVpcEndpoints"
    			],
    			"Resource": "arn:*:ec2:*:*:vpc-endpoint/*",
    			"Condition": {
    				"StringEquals": {
    					"ec2:ResourceTag/AWSMSKManaged": "true"
    				},
    				"StringLike": {
    					"ec2:ResourceTag/ClusterArn": "*"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:PassRole",
    			"Resource": "*",
    			"Condition": {
    				"StringEquals": {
    					"iam:PassedToService": "kafka.amazonaws.com"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:CreateServiceLinkedRole",
    			"Resource": "arn:aws:iam::*:role/aws-service-role/kafka.amazonaws.com/AWSServiceRoleForKafka*",
    			"Condition": {
    				"StringLike": {
    					"iam:AWSServiceName": "kafka.amazonaws.com"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"iam:AttachRolePolicy",
    				"iam:PutRolePolicy"
    			],
    			"Resource": "arn:aws:iam::*:role/aws-service-role/kafka.amazonaws.com/AWSServiceRoleForKafka*"
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:CreateServiceLinkedRole",
    			"Resource": "arn:aws:iam::*:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery*",
    			"Condition": {
    				"StringLike": {
    					"iam:AWSServiceName": "delivery.logs.amazonaws.com"
    				}
    			}
    		}

    	]
    }
```

------

# AWS 관리형 정책: AmazonMSKReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonMSKReadOnlyAccess"></a>

이 정책은 Amazon MSK의 정보를 볼 수 있는 읽기 전용 권한을 사용자에게 부여합니다. 이 정책이 첨부된 보안 주체는 기존 리소스를 업데이트하거나 삭제할 수 없으며 새 Amazon MSK 리소스를 생성할 수도 없습니다. 예를 들어 이러한 권한이 있는 주체는 자신의 계정과 연결된 클러스터 및 구성 목록을 볼 수 있지만 클러스터의 구성이나 설정을 변경할 수는 없습니다. 해당 정책의 권한은 다음과 같이 그룹화됩니다.
+ **`Amazon MSK` 권한** – 이 권한을 통해 Amazon MSK 리소스를 나열하고, 리소스를 설명하고, 리소스에 대한 정보를 얻을 수 있습니다.
+ **`Amazon EC2` 권한** – 이 권한은 클러스터와 연결된 Amazon VPC, 서브넷, 보안 그룹, ENI를 설명하는 데 사용됩니다.
+ **`AWS KMS` 권한** – 이 권한은 클러스터와 연결된 키를 설명하는 데 사용됩니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "kafka:Describe*",
                "kafka:List*",
                "kafka:Get*",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "kms:DescribeKey"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

------

# AWS 관리형 정책: KafkaServiceRolePolicy
<a name="security-iam-awsmanpol-KafkaServiceRolePolicy"></a>

IAM 엔터티에 KafkaServiceRolePolicy를 연결할 수 없습니다. 이 정책은 서비스 연결 역할에 첨부되어 Amazon MSK가 MSK 클러스터에서 VPC 엔드포인트(커넥터) 관리, 네트워크 인터페이스 관리, AWS Secrets Manager로 클러스터 보안 인증 정보 관리와 같은 작업을 수행할 수 있도록 합니다. 자세한 내용은 [Amazon MSK의 서비스 연결 역할](using-service-linked-roles.md) 단원을 참조하십시오.

다음 표에서는 Amazon MSK가 변경 사항 추적을 시작한 이후 KafkaServiceRolePolicy 관리형 정책의 업데이트에 대해 설명합니다.


| 변경 | 설명 | Date | 
| --- | --- | --- | 
|  [KafkaServiceRolePolicy에 IPv6 연결 지원 추가](#security-iam-awsmanpol-KafkaServiceRolePolicy) - 기존 정책 업데이트  |  Amazon MSK는 MSK 클러스터에 대한 IPv6 연결을 활성화하기 위해 KafkaServiceRolePolicy에 권한을 추가했습니다. 이러한 권한을 통해 Amazon MSK는 네트워크 인터페이스에 IPv6 주소를 할당 및 할당 해제하고 고객 계정의 네트워크 인터페이스 속성을 수정할 수 있습니다.  | 2025년 11월 17일 | 
|  [KafkaServiceRolePolicy](#security-iam-awsmanpol-KafkaServiceRolePolicy) — 기존 정책에 대한 업데이트  |  Amazon MSK가 다중 VPC 프라이빗 연결을 지원하기 위한 권한을 추가했습니다.  | 2023년 3월 8일 | 
|  Amazon MSK에서 변경 사항 추적 시작  |  Amazon MSK가 KafkaServiceRolePolicy 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 2023년 3월 8일 | 

# AWS 관리형 정책: AWSMSKReplicatorExecutionRole
<a name="security-iam-awsmanpol-AWSMSKReplicatorExecutionRole"></a>

이 `AWSMSKReplicatorExecutionRole` 정책은 MSK 클러스터 간에 데이터를 복제할 수 있는 권한을 Amazon MSK Replicator에 부여합니다. 해당 정책의 권한은 다음과 같이 그룹화됩니다.
+ **`cluster`** – IAM 인증을 사용하여 클러스터에 연결할 수 있는 Amazon MSK Replicator 권한을 부여합니다. 또한 클러스터를 설명하고 변경할 수 있는 권한을 부여합니다.
+ **`topic`** - 주제를 설명, 생성 및 변경하고 주제의 동적 구성을 변경할 수 있는 권한을 Amazon MSK Replicator에 부여합니다.
+ **`consumer group`** - 소비자 그룹을 설명 및 변경하고, MSK 클러스터에서 날짜를 읽고 쓰고, Replicator에서 생성한 내부 주제를 삭제할 수 있는 권한을 Amazon MSK Replicator에 부여합니다.

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "ClusterPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:Connect",
				"kafka-cluster:DescribeCluster",
				"kafka-cluster:AlterCluster",
				"kafka-cluster:DescribeTopic",
				"kafka-cluster:CreateTopic",
				"kafka-cluster:AlterTopic",
				"kafka-cluster:WriteData",
				"kafka-cluster:ReadData",
				"kafka-cluster:AlterGroup",
				"kafka-cluster:DescribeGroup",
				"kafka-cluster:DescribeTopicDynamicConfiguration",
				"kafka-cluster:AlterTopicDynamicConfiguration",
				"kafka-cluster:WriteDataIdempotently"
			],
			"Resource": [
				"arn:aws:kafka:*:*:cluster/*"
			]
		},
		{
			"Sid": "TopicPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:DescribeTopic",
				"kafka-cluster:CreateTopic",
				"kafka-cluster:AlterTopic",
				"kafka-cluster:WriteData",
				"kafka-cluster:ReadData",
				"kafka-cluster:DescribeTopicDynamicConfiguration",
				"kafka-cluster:AlterTopicDynamicConfiguration",
				"kafka-cluster:AlterCluster"
			],
			"Resource": [
				"arn:aws:kafka:*:*:topic/*/*"
			]
		},
		{
			"Sid": "GroupPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:AlterGroup",
				"kafka-cluster:DescribeGroup"
			],
			"Resource": [
				"arn:aws:kafka:*:*:group/*/*"
			]
		}
	]
}
```

------

# AWS 관리형 정책에 대한 Amazon MSK 업데이트
<a name="security-iam-awsmanpol-updates"></a>

이 서비스가 이러한 변경 사항을 추적하기 시작한 이후부터 Amazon MSK의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다.


| 변경 | 설명 | Date | 
| --- | --- | --- | 
|  [WriteDataIdempotently 권한이 AWSMSKReplicatorExecutionRole에 추가됨](security-iam-awsmanpol-AWSMSKReplicatorExecutionRole.md) - 기존 정책의 업데이트  |  Amazon MSK에서 MSK 클러스터 간의 데이터 복제를 지원하기 위해 AWSMSKReplicatorExecutionRole 정책에 WriteDataIdempotently 권한을 추가했습니다.  | 2024년 3월 12일 | 
|  [AWSMSKReplicatorExecutionRole](security-iam-awsmanpol-AWSMSKReplicatorExecutionRole.md) - 새로운 정책  |  Amazon MSK에서 Amazon MSK Replicator를 지원하기 위해 AWSMSKReplicatorExecutionRole 정책을 추가했습니다.  | 2023년 12월 4일 | 
|  [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) - 기존 정책에 대한 업데이트  |  Amazon MSK가 Amazon MSK Replicator를 지원하기 위한 권한을 추가했습니다.  | 2023년 9월 28일 | 
|  [KafkaServiceRolePolicy](security-iam-awsmanpol-KafkaServiceRolePolicy.md) — 기존 정책에 대한 업데이트  |  Amazon MSK가 다중 VPC 프라이빗 연결을 지원하기 위한 권한을 추가했습니다.  | 2023년 3월 8일 | 
| [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) - 기존 정책에 대한 업데이트 |  Amazon MSK가 클러스터에 연결할 수 있도록 새로운 Amazon EC2 권한을 추가했습니다.  | 2021년 11월 30일 | 
|  [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) - 기존 정책에 대한 업데이트  |  Amazon MSK가 Amazon EC2 라우팅 테이블을 설명할 수 있는 새로운 권한을 추가했습니다.  | 2021년 11월 19일 | 
|  Amazon MSK에서 변경 사항 추적 시작  |  Amazon MSK는 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 2021년 11월 19일 | 

# Amazon MSK 자격 증명 및 액세스 문제 해결
<a name="security_iam_troubleshoot"></a>

다음 정보를 사용하여 Amazon MSK 및 IAM으로 작업할 때 발생할 수 있는 일반적인 문제를 진단하고 수정할 수 있습니다.

**Topics**
+ [Amazon MSK에서 작업을 수행할 권한이 없음](#security_iam_troubleshoot-no-permissions)

## Amazon MSK에서 작업을 수행할 권한이 없음
<a name="security_iam_troubleshoot-no-permissions"></a>

에서 작업을 수행할 권한이 없다는 AWS Management Console 메시지가 표시되면 관리자에게 문의하여 도움을 받아야 합니다. 관리자는 로그인 보안 인증 정보를 제공한 사람입니다.

다음 예제 오류는 `mateojackson` IAM 사용자가 콘솔을 사용하여 클러스터를 삭제하려고 하지만 `kafka:DeleteCluster` 권한이 없는 경우 발생합니다.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: kafka:DeleteCluster on resource: purchaseQueriesCluster
```

이 경우, Mateo는 `purchaseQueriesCluster` 작업을 사용하여 `kafka:DeleteCluster` 리소스에 액세스하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

# Apache Kafka API에 대한 인증 및 권한 부여
<a name="kafka_apis_iam"></a>

IAM을 사용하여 클라이언트를 인증하고 Apache Kafka 작업을 허용하거나 거부할 수 있습니다. 또는 TLS나 SASL/SCRAM을 사용하여 클라이언트를 인증하고 Apache Kafka ACL을 사용하여 작업을 허용하거나 거부할 수 있습니다.

클러스터에서 [Amazon MSK 작업](https://docs.aws.amazon.com/msk/1.0/apireference/operations.html)을 수행할 수 있는 사용자를 제어하는 방법에 대한 자세한 내용은 [Amazon MSK API에 대한 인증 및 권한 부여](security-iam.md) 섹션을 참조하세요.

**Topics**
+ [IAM 액세스 제어](iam-access-control.md)
+ [Amazon MSK에 대한 상호 TLS 클라이언트 인증](msk-authentication.md)
+ [AWS Secrets Manager를 사용한 로그인 보안 인증](msk-password.md)
+ [Apache Kafka ACL](msk-acls.md)

# IAM 액세스 제어
<a name="iam-access-control"></a>

Amazon MSK를 위한 IAM 액세스 제어를 사용하면 MSK 클러스터에 대한 인증과 권한 부여를 모두 처리할 수 있습니다. 이렇게 하면 인증에 한 메커니즘을 사용하고 권한 부여에 다른 메커니즘을 사용할 필요가 없습니다. 예를 들어 클라이언트가 클러스터에 쓰기를 시도할 때 Amazon MSK는 IAM을 사용하여 해당 클라이언트가 인증된 자격 증명인지 여부와 클러스터에 생성할 수 있는 권한이 있는지 여부를 확인합니다.

IAM 액세스 제어는 Python, Go, JavaScript 및 .NET으로 작성된 Kafka 클라이언트를 포함하여 Java 및 비 Java 클라이언트에서 작동합니다. Java가 아닌 클라이언트에 대한 IAM 액세스 제어는 Kafka 버전 2.7.1 이상의 MSK 클러스터에서 사용할 수 있습니다.

IAM 액세스 제어를 가능하게 하기 위해 Amazon MSK는 Apache Kafka 소스 코드를 약간 수정합니다. 이러한 수정 사항으로 인해 Apache Kafka 환경이 눈에 띄게 달라지지는 않습니다. Amazon MSK는 액세스 이벤트를 기록하므로 이를 감사할 수 있습니다.

IAM 액세스 제어를 사용하는 MSK 클러스터에 대해 Apache Kafka ACL API를 호출할 수 있습니다. 그러나 Apache Kafka ACL은 IAM ID에 대한 권한 부여에 영향을 미치지 않습니다. IAM 정책을 사용하여 IAM ID에 대한 액세스를 제어해야 합니다.

**중요 고려 사항**  
MSK 클러스터에서 IAM 액세스 제어를 사용하는 경우 다음 중요 고려 사항에 유의하세요.  
IAM 액세스 제어는 Apache ZooKeeper 노드에는 적용되지 않습니다. 이러한 노드에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 [Amazon MSK 클러스터의 Apache ZooKeeper 노드에 대한 액세스 제어](zookeeper-security.md) 섹션을 참조하세요.
클러스터에서 IAM 액세스 제어를 사용하는 경우 `allow.everyone.if.no.acl.found` Apache Kafka 설정은 적용되지 않습니다.
IAM 액세스 제어를 사용하는 MSK 클러스터에 대해 Apache Kafka ACL API를 호출할 수 있습니다. 그러나 Apache Kafka ACL은 IAM ID에 대한 권한 부여에 영향을 미치지 않습니다. IAM 정책을 사용하여 IAM ID에 대한 액세스를 제어해야 합니다.

# Amazon MSK의 IAM 액세스 제어 작동 방식
<a name="how-to-use-iam-access-control"></a>

Amazon MSK에 대한 IAM 액세스 제어를 사용하려면 다음 단계를 수행하세요. 이러한 단계는 이 섹션의 나머지 부분에서 자세히 설명합니다.
+ [IAM 액세스 제어를 사용하는 Amazon MSK 클러스터 생성](create-iam-access-control-cluster-in-console.md) 
+ [IAM 액세스 제어를 위한 클라이언트 구성](configure-clients-for-iam-access-control.md)
+ [IAM 역할에 대한 권한 부여 정책 생성](create-iam-access-control-policies.md)
+ [IAM 액세스 제어를 위한 부트스트랩 브로커 가져오기](get-bootstrap-brokers-for-iam.md)

# IAM 액세스 제어를 사용하는 Amazon MSK 클러스터 생성
<a name="create-iam-access-control-cluster-in-console"></a>

이 섹션에서는 AWS Management Console, API 또는를 사용하여 IAM 액세스 제어를 사용하는 Amazon MSK 클러스터를 AWS CLI 생성하는 방법을 설명합니다. 기존 클러스터에 대한 IAM 액세스 제어를 사용 설정하는 방법에 대한 자세한 내용은 [Amazon MSK 클러스터의 보안 설정 업데이트](msk-update-security.md) 섹션을 참조하세요.

**AWS Management Console 를 사용하여 IAM 액세스 제어를 사용하는 클러스터 생성**

1. [https://console.aws.amazon.com/msk/](https://console.aws.amazon.com/msk/)에서 Amazon MSK 콘솔을 엽니다.

1. **클러스터 생성**을 선택합니다.

1. **사용자 지정 설정으로 클러스터 생성**을 선택합니다.

1. **인증** 섹션에서 **IAM 액세스 제어**를 선택합니다.

1. 클러스터 생성을 위한 나머지 워크플로를 완료합니다.

**API 또는 AWS CLI 를 사용하여 IAM 액세스 제어를 사용하는 클러스터 생성**
+ IAM 액세스 제어를 사용하도록 설정한 클러스터를 생성하려면 [CreateCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#CreateCluster) API 또는 [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/create-cluster.html) CLI 명령을 사용하고 `ClientAuthentication` 파라미터에 대해 다음 JSON(`"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }`)을 전달합니다.

# IAM 액세스 제어를 위한 클라이언트 구성
<a name="configure-clients-for-iam-access-control"></a>

클라이언트가 IAM 액세스 제어를 사용하는 MSK 클러스터와 통신할 수 있도록 하려면 다음 메커니즘 중 하나를 사용할 수 있습니다.
+ SASL\$1OAUTHBEARER 메커니즘을 사용하여 비 Java 클라이언트 구성
+ SASL\$1OAUTHBEARER 메커니즘 또는 AWS\$1MSK\$1IAM 메커니즘을 사용하여 Java 클라이언트 구성

## SASL\$1OAUTHBEARER 메커니즘을 사용하여 IAM 구성
<a name="configure-clients-for-iam-access-control-sasl-oauthbearer"></a>

1. 다음 Python Kafka 클라이언트 예제를 사용하여 client.properties 구성 파일을 편집합니다. 구성 변경은 다른 언어에서도 비슷합니다.

   ```
   from kafka import KafkaProducer
   from kafka.errors import KafkaError
   from kafka.sasl.oauth import AbstractTokenProvider
   import socket
   import time
   from aws_msk_iam_sasl_signer import MSKAuthTokenProvider
   
   class MSKTokenProvider():
       def token(self):
           token, _ = MSKAuthTokenProvider.generate_auth_token('<my AWS 리전>')
           return token
   
   tp = MSKTokenProvider()
   
   producer = KafkaProducer(
       bootstrap_servers='<myBootstrapString>',
       security_protocol='SASL_SSL',
       sasl_mechanism='OAUTHBEARER',
       sasl_oauth_token_provider=tp,
       client_id=socket.gethostname(),
   )
   
   topic = "<my-topic>"
   while True:
       try:
           inp=input(">")
           producer.send(topic, inp.encode())
           producer.flush()
           print("Produced!")
       except Exception:
           print("Failed to send message:", e)
   
   producer.close()
   ```

1. 선택한 구성 언어의 헬퍼 라이브러리를 다운로드하고 해당 언어 라이브러리 홈페이지의 *시작하기* 섹션에 있는 지침을 따르세요.
   + JavaScript: [https://github.com/aws/aws-msk-iam-sasl-signer-js\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-js#getting-started)
   + Python: [https://github.com/aws/aws-msk-iam-sasl-signer-python\$1get-started](https://github.com/aws/aws-msk-iam-sasl-signer-python#get-started)
   + Go: [https://github.com/aws/aws-msk-iam-sasl-signer-go\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-go#getting-started)
   + .NET: [https://github.com/aws/aws-msk-iam-sasl-signer-net\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-net#getting-started)
   + JAVA: Java용 SASL\$1OAUTHBEARER 지원은 [https://github.com/aws/aws-msk-iam-auth/releases](https://github.com/aws/aws-msk-iam-auth/releases) jar 파일을 통해 사용 가능

## MSK 사용자 지정 AWS\$1MSK\$1IAM 메커니즘을 사용하여 IAM을 구성
<a name="configure-clients-for-iam-access-control-msk-iam"></a>

1. `client.properties` 파일에 다음을 추가합니다. *<PATH\$1TO\$1TRUST\$1STORE\$1FILE>*을 클라이언트의 트러스트 스토어 파일에 대한 정규화된 경로로 변경합니다.
**참고**  
특정 인증서를 사용하지 않으려면 `client.properties` 파일에서 `ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE>`을 제거하면 됩니다. `ssl.truststore.location`의 값을 지정하지 않으면 Java 프로세스에서 기본 인증서를 사용합니다.

   ```
   ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE>
   security.protocol=SASL_SSL
   sasl.mechanism=AWS_MSK_IAM
   sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
   sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
   ```

   자격 AWS 증명에 대해 생성한 명명된 프로필을 사용하려면 클라이언트 구성 파일에 `awsProfileName="your profile name";`를 포함합니다. 명명된 프로필에 대한 자세한 내용은 AWS CLI 설명서의 [명명된 프로필을](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) 참조하세요.

1. 안정적인 최신 [aws-msk-iam-auth](https://github.com/aws/aws-msk-iam-auth/releases) JAR 파일을 다운로드하여 클래스 경로에 배치합니다. Maven을 사용하는 경우 필요에 따라 버전 번호를 조정하여 다음 종속성을 추가합니다.

   ```
   <dependency>
       <groupId>software.amazon.msk</groupId>
       <artifactId>aws-msk-iam-auth</artifactId>
       <version>1.0.0</version>
   </dependency>
   ```

Amazon MSK 클라이언트 플러그인은 Apache 2.0 라이선스에 따라 오픈 소스로 제공됩니다.

# IAM 역할에 대한 권한 부여 정책 생성
<a name="create-iam-access-control-policies"></a>

권한 부여 정책을 클라이언트에 해당하는 IAM 역할에 연결합니다. 권한 부여 정책에서 역할에 대해 허용하거나 거부할 작업을 지정합니다. 클라이언트가 Amazon EC2 인스턴스를 사용하는 경우 권한 부여 정책을 해당 Amazon EC2 인스턴스의 IAM 역할에 연결합니다. 또는 명명된 프로필을 사용하도록 클라이언트를 구성한 다음 권한 부여 정책을 해당 명명된 프로필의 역할과 연결할 수 있습니다. [IAM 액세스 제어를 위한 클라이언트 구성](configure-clients-for-iam-access-control.md)에서는 명명된 프로필을 사용하도록 클라이언트를 구성하는 방법에 대해 설명합니다.

IAM 정책을 만드는 방법에 대한 자세한 내용은 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 참조하세요.

다음은 MyTestCluster라는 클러스터에 대한 권한 부여 정책의 예제입니다. `Action` 및 `Resource` 요소의 의미를 이해하려면 [IAM 권한 부여 정책 작업 및 리소스의 의미](kafka-actions.md)를 참조하세요.

**중요**  
IAM 정책에 대한 변경 사항은 IAM API 및 AWS CLI 에 즉시 반영됩니다. 그러나 정책 변경이 적용되려면 상당한 시간이 소요될 수 있습니다. 대부분 정책 변경은 1분 이내에 적용됩니다. 네트워크 상태에 따라 지연 시간이 늘어날 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
                "kafka-cluster:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:111122223333:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:*Topic*",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:topic/MyTestCluster/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:group/MyTestCluster/*"
            ]
        }
    ]
}
```

------

데이터 생산 및 소비와 같은 일반적인 Apache Kafka 사용 사례에 해당하는 조치 요소가 포함된 정책을 생성하는 방법을 알아보려면 [클라이언트 권한 부여 정책의 일반적인 사용 사례](iam-access-control-use-cases.md)를 참조하세요.

Kafka 버전 2.8.0 이상에서는 **WriteDataIdempotently** 권한이 더 이상 사용되지 않습니다([KIP-679](https://cwiki.apache.org/confluence/display/KAFKA/KIP-679%3A+Producer+will+enable+the+strongest+delivery+guarantee+by+default)). 기본적으로 `enable.idempotence = true`가 설정되어 있습니다. 따라서 Kafka 버전 2.8.0 이상의 경우 IAM은 Kafka ACL과 동일한 기능을 제공하지 않습니다. 해당 주제에 대한 `WriteData` 액세스 권한만 제공해서는 주제에 `WriteDataIdempotently`를 수행할 수 없습니다. 이는 **모든** 주제에 `WriteData`가 제공되는 경우에는 영향을 미치지 않습니다. 이 경우 `WriteDataIdempotently`가 허용됩니다. 이는 IAM 로직의 구현 방식과 Kafka ACL의 구현 방식에 차이가 있기 때문입니다. 또한 주제에 멱등적으로 쓰려면 `transactional-ids`에 대한 액세스 권한도 필요합니다.

이 문제를 해결하려면 다음 정책과 유사한 정책을 사용하는 것을 권장합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
                "kafka-cluster:DescribeCluster",
                "kafka-cluster:WriteDataIdempotently"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:*Topic*",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic",
                "arn:aws:kafka:us-east-1:123456789012:transactional-id/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*"
            ]
        }
    ]
}
```

------

이 경우 `WriteData`는 `TestTopic`에 대한 쓰기를 허용하고 `WriteDataIdempotently`은 클러스터에 대한 멱등성 쓰기를 허용합니다. 또한 이 정책은 필요한 `transactional-id` 리소스에 대한 액세스 권한을 추가합니다.

`WriteDataIdempotently`는 클러스터 수준 권한이므로 주제 수준에서 사용할 수 없습니다. `WriteDataIdempotently`가 주제 수준으로 제한되어 있으면 해당 정책이 작동하지 않습니다.

# IAM 액세스 제어를 위한 부트스트랩 브로커 가져오기
<a name="get-bootstrap-brokers-for-iam"></a>

[Amazon MSK 클러스터를 위한 부트스트랩 브로커 가져오기](msk-get-bootstrap-brokers.md)을(를) 참조하세요.

# IAM 권한 부여 정책 작업 및 리소스의 의미
<a name="kafka-actions"></a>

**참고**  
Apache Kafka 버전 3.8 이상을 실행하는 클러스터의 경우 IAM 액세스 제어는 트랜잭션을 종료하기 위한 WriteTxnMarkers API를 지원합니다. 3.8 이전 버전의 Kafka를 실행하는 클러스터의 경우 IAM 액세스 제어는 WriteTxnMarkers를 포함한 내부 클러스터 작업을 지원하지 않습니다. 이러한 이전 버전의 경우 트랜잭션을 종료하려면 IAM 인증 대신 적절한 ACLs을 사용하여 SCRAM 또는 mTLS 인증을 사용합니다.

이 섹션에서는 IAM 권한 부여 정책에서 사용할 수 있는 작업 및 리소스 요소의 의미에 대해 설명합니다. 정책 예제는 [IAM 역할에 대한 권한 부여 정책 생성](create-iam-access-control-policies.md)을 참조하세요.

## 권한 부여 정책 작업
<a name="actions"></a>

다음 표에는 Amazon MSK를 위한 IAM 액세스 제어를 사용할 때 권한 부여 정책에 포함할 수 있는 작업이 나열되어 있습니다. 권한 부여 정책에 표의 *작업* 열에 있는 작업을 포함할 때는 *필수 작업* 열에 있는 해당 작업도 포함해야 합니다.


| 작업 | 설명 | 필수 작업 | 필수 리소스 | 서버리스 클러스터에 적용 가능 | 
| --- | --- | --- | --- | --- | 
| kafka-cluster:Connect | 클러스터에 연결하고 인증할 수 있는 권한을 부여합니다. | 없음 | 클러스터 | 예 | 
| kafka-cluster:DescribeCluster | 클러스터의 다양한 측면을 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE CLUSTER ACL과 동일합니다. |  `kafka-cluster:Connect`  | 클러스터 | 예 | 
| kafka-cluster:AlterCluster | 클러스터의 다양한 측면을 변경할 수 있는 권한을 부여하며, 이는 Apache Kafka의 ALTER CLUSTER ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeCluster`  | 클러스터 | 아니요 | 
| kafka-cluster:DescribeClusterDynamicConfiguration | 클러스터의 동적 구성을 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE\$1CONFIGS CLUSTER ACL과 동일합니다. |  `kafka-cluster:Connect`  | 클러스터 | 아니요 | 
| kafka-cluster:AlterClusterDynamicConfiguration | 클러스터의 동적 구성을 변경할 수 있는 권한을 부여하며, 이는 Apache Kafka의 ALTER\$1CONFIGS CLUSTER ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeClusterDynamicConfiguration`  | 클러스터 | 아니요 | 
| kafka-cluster:WriteDataIdempotently | 클러스터에서 데이터를 멱등적으로 쓸 수 있는 권한을 부여하며, 이는 Apache Kafka의 IDEMPOTENT\$1WRITE CLUSTER ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:WriteData`  | 클러스터 | 예 | 
| kafka-cluster:CreateTopic | 클러스터에 주제를 생성할 수 있는 권한을 부여하며, 이는 Apache Kafka의 CREATE CLUSTER/TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect`  | 주제 | 예 | 
| kafka-cluster:DescribeTopic | 클러스터의 주제를 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect`  | 주제 | 예 | 
| kafka-cluster:AlterTopic | 클러스터의 주제를 변경할 수 있는 권한을 부여하며, 이는 Apache Kafka의 ALTER TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic`  | 주제 | 예 | 
| kafka-cluster:DeleteTopic | 클러스터에서 주제를 삭제할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DELETE TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic`  | 주제 | 예 | 
| kafka-cluster:DescribeTopicDynamicConfiguration | 클러스터에서 주제의 동적 구성을 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE\$1CONFIGS TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect`  | 주제 | 예 | 
| kafka-cluster:AlterTopicDynamicConfiguration | 클러스터에서 주제의 동적 구성을 변경할 수 있는 권한을 부여하며, 이는 Apache Kafka의 ALTER\$1CONFIGS TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopicDynamicConfiguration`  | 주제 | 예 | 
| kafka-cluster:ReadData | 클러스터의 토픽에서 데이터를 읽을 수 있는 권한을 부여하며, 이는 Apache Kafka의 READ TOPIC ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:AlterGroup`  | 주제 | 예 | 
| kafka-cluster:WriteData | Apache Kafka의 WRITE TOPIC ACL에 해당하는 클러스터에서 주제에 데이터를 쓸 수 있는 권한을 부여합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic`  | 주제 | 예 | 
| kafka-cluster:DescribeGroup | 클러스터에서 그룹을 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE GROUP ACL과 동일합니다. |  `kafka-cluster:Connect`  | 그룹 | 예 | 
| kafka-cluster:AlterGroup | 클러스터의 그룹에 참여할 수 있는 권한을 부여하며, 이는 Apache Kafka의 READ GROUP ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeGroup`  | 그룹 | 예 | 
| kafka-cluster:DeleteGroup | 클러스터에서 그룹을 삭제할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DELETE GROUP ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeGroup`  | 그룹 | 예 | 
| kafka-cluster:DescribeTransactionalId | 클러스터에서 트랜잭션 ID를 설명할 수 있는 권한을 부여하며, 이는 Apache Kafka의 DESCRIBE TRANSACTIONAL\$1ID ACL과 동일합니다. |  `kafka-cluster:Connect`  | transactional-id | 예 | 
| kafka-cluster:AlterTransactionalId | 클러스터의 트랜잭션 ID를 변경할 수 있는 권한을 부여하며, 이는 Apache Kafka의 WRITE TRANSACTIONAL\$1ID ACL과 동일합니다. |  `kafka-cluster:Connect` `kafka-cluster:DescribeTransactionalId` `kafka-cluster:WriteData`  | transactional-id | 예 | 

콜론 뒤에 오는 작업에서 별표(\$1) 와일드카드를 여러 번 사용할 수 있습니다. 예를 들면 다음과 같습니다.
+ `kafka-cluster:*Topic`은 `kafka-cluster:CreateTopic`, `kafka-cluster:DescribeTopic`, `kafka-cluster:AlterTopic`, `kafka-cluster:DeleteTopic`을 나타냅니다. `kafka-cluster:DescribeTopicDynamicConfiguration` 또는 `kafka-cluster:AlterTopicDynamicConfiguration`은 포함되지 않습니다.
+ `kafka-cluster:*`는 모든 권한을 나타냅니다.

## 권한 부여 정책 리소스
<a name="msk-iam-resources"></a>

다음 표에는 Amazon MSK를 위한 IAM 액세스 제어를 사용할 때 권한 부여 정책에 사용할 수 있는 4가지 유형의 리소스를 보여줍니다. 또는 [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) API AWS Management Console 또는 [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 명령을 사용하여 클러스터 Amazon 리소스 이름(ARN)을 가져올 수 있습니다. 그런 다음 클러스터 ARN을 사용하여 주제, 그룹, 트랜잭션 ID ARN을 구성할 수 있습니다. 권한 부여 정책에서 리소스를 지정하려면 해당 리소스의 ARN을 사용합니다.


| Resource | ARN 형식 | 
| --- | --- | 
| Cluster | arn:aws:kafka:region:account-id:cluster/cluster-name/cluster-uuid | 
| Topic | arn:aws:kafka:region:account-id:topic/cluster-name/cluster-uuid/topic-name | 
| Group | arn:aws:kafka:region:account-id:group/cluster-name/cluster-uuid/group-name | 
| 트랜잭션 ID | arn:aws:kafka:region:account-id:transactional-id/cluster-name/cluster-uuid/transactional-id | 

별표(\$1) 와일드카드는 ARN의 `:cluster/`, `:topic/`, `:group/`, `:transactional-id/` 뒤에 오는 부분 어디에서나 여러 번 사용할 수 있습니다. 다음은 별표(\$1) 와일드카드를 사용하여 여러 리소스를 참조하는 방법에 대한 몇 가지 예입니다.
+ `arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*`: 클러스터의 UUID에 관계없이 MyTestCluster라는 이름의 모든 클러스터에 있는 모든 주제입니다.
+ `arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test`: 이름이 MyTestCluster이고 UUID가 abcd1234-0123-abcd-5678-1234abcd-1인 클러스터에서 이름이 “\$1test”로 끝나는 모든 주제입니다.
+ `arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1`: 계정에 있는 MyTestCluster라는 클러스터의 모든 구현에서 트랜잭션 ID가 5555abcd-1111-abcd-1234-abcd1234-1인 모든 트랜잭션입니다. 즉, MyTestCluster라는 이름의 클러스터를 생성한 다음 삭제한 다음 같은 이름의 다른 클러스터를 생성하는 경우 이 리소스 ARN을 사용하여 두 클러스터에서 동일한 트랜잭션 ID를 나타낼 수 있습니다. 그러나 삭제된 클러스터는 액세스할 수 없습니다.

# 클라이언트 권한 부여 정책의 일반적인 사용 사례
<a name="iam-access-control-use-cases"></a>

다음 표의 첫 번째 열에는 몇 가지 일반적인 사용 사례가 나와 있습니다. 클라이언트가 특정 사용 사례를 수행하도록 권한을 부여하려면 클라이언트의 권한 부여 정책에 해당 사용 사례에 필요한 작업을 포함하고 `Effect`를 `Allow`로 설정합니다.

Amazon MSK에 대한 IAM 액세스 제어의 일부인 모든 작업에 대한 자세한 내용은 [IAM 권한 부여 정책 작업 및 리소스의 의미](kafka-actions.md) 섹션을 참조하세요.

**참고**  
기본적으로 작업이 거부됩니다. 클라이언트가 수행할 수 있도록 권한을 부여하려는 모든 작업을 명시적으로 허용해야 합니다.


****  

| 사용 사례: | 필수 작업 | 
| --- | --- | 
| 관리자 |  `kafka-cluster:*`  | 
| 주제 생성 |  `kafka-cluster:Connect` `kafka-cluster:CreateTopic`  | 
| 데이터 생산 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:WriteData`  | 
| 데이터 소비 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:DescribeGroup` `kafka-cluster:AlterGroup` `kafka-cluster:ReadData`  | 
| 멱등적으로 데이터 생산 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:WriteData` `kafka-cluster:WriteDataIdempotently`  | 
| 트랜잭션 방식으로 데이터 생산 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:WriteData` `kafka-cluster:DescribeTransactionalId` `kafka-cluster:AlterTransactionalId`  | 
| 클러스터 구성 설명 |  `kafka-cluster:Connect` `kafka-cluster:DescribeClusterDynamicConfiguration`  | 
| 클러스터의 구성 업데이트 |  `kafka-cluster:Connect` `kafka-cluster:DescribeClusterDynamicConfiguration` `kafka-cluster:AlterClusterDynamicConfiguration`  | 
| 주제 구성 설명 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopicDynamicConfiguration` | 
| 주제의 구성 업데이트 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopicDynamicConfiguration` `kafka-cluster:AlterTopicDynamicConfiguration`  | 
| 주제 변경 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTopic` `kafka-cluster:AlterTopic`  | 

# Amazon MSK에 대한 상호 TLS 클라이언트 인증
<a name="msk-authentication"></a>

애플리케이션에서 Amazon MSK 브로커로의 연결을 위해 TLS를 사용하여 클라이언트 인증을 활성화할 수 있습니다. 클라이언트 인증을 사용하려면 AWS Private CA가 필요합니다. 는 클러스터 AWS 계정 와 동일한 또는 다른 계정에 있을 AWS Private CA 수 있습니다. AWS Private CA에 대한 자세한 내용은 [생성 및 관리를 AWS Private CA](https://docs.aws.amazon.com/acm-pca/latest/userguide/create-CA.html) 참조하세요.

Amazon MSK는 인증서 해지 목록(CRL)을 지원하지 않습니다. 클러스터 주제에 대한 액세스를 제어하거나 손상된 인증서를 차단하려면 Apache Kafka ACLs 및 AWS 보안 그룹을 사용합니다. Apache Kafka ACL 사용에 대한 자세한 내용은 [Apache Kafka ACL](msk-acls.md) 섹션을 참조하세요.

**Topics**
+ [클라이언트 인증을 지원하는 Amazon MSK 클러스터 생성](msk-authentication-cluster.md)
+ [인증을 사용하도록 클라이언트 설정](msk-authentication-client.md)
+ [인증을 사용하여 메시지 생성 및 사용](msk-authentication-messages.md)

# 클라이언트 인증을 지원하는 Amazon MSK 클러스터 생성
<a name="msk-authentication-cluster"></a>

이 절차에서는를 사용하여 클라이언트 인증을 활성화하는 방법을 보여줍니다 AWS Private CA.
**참고**  
상호 TLS를 사용하여 액세스를 제어할 때는 각 MSK 클러스터 AWS Private CA 에 대해 독립적인를 사용하는 것이 좋습니다. 이렇게 하면 PCA가 서명한 TLS 인증서는 단일 MSK 클러스터에서만 인증됩니다.

1. 다음 콘텐츠를 가진 `clientauthinfo.json`이라는 파일을 생성합니다: *Private-CA-ARN*을 PCA의 ARN으로 바꿉니다.

   ```
   {
      "Tls": {
          "CertificateAuthorityArnList": ["Private-CA-ARN"]
       }
   }
   ```

1. [를 사용하여 프로비저닝된 Amazon MSK 클러스터 생성 AWS CLI](create-cluster-cli.md)에 설명된 대로 `brokernodegroupinfo.json` 파일을 생성합니다.

1. 클라이언트 인증을 사용하려면 클라이언트와 브로커 간 전송 중 암호화를 활성화해야 합니다. 다음 콘텐츠를 가진 `encryptioninfo.json`이라는 파일을 생성합니다: *KMS-Key-ARN*을 KMS 키의 ARN으로 바꿉니다. `ClientBroker`를 `TLS` 또는 `TLS_PLAINTEXT`로 설정할 수 있습니다.

   ```
   {
      "EncryptionAtRest": {
          "DataVolumeKMSKeyId": "KMS-Key-ARN"
       },
      "EncryptionInTransit": {
           "InCluster": true,
           "ClientBroker": "TLS"
       }
   }
   ```

   암호화에 대한 자세한 내용은 [Amazon MSK 암호화](msk-encryption.md) 섹션을 참조하세요.

1. 가 AWS CLI 설치된 시스템에서 다음 명령을 실행하여 인증 및 전송 중 암호화가 활성화된 클러스터를 생성합니다. 응답에 제공된 클러스터 ARN을 저장합니다.

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

# 인증을 사용하도록 클라이언트 설정
<a name="msk-authentication-client"></a>

이 프로세스는 인증을 사용할 클라이언트로 사용하도록 Amazon EC2 인스턴스를 설정하는 방법을 설명합니다.

이 프로세스는 클라이언트 머신을 생성하고, 주제를 생성하고, 필요한 보안 설정을 구성하여 인증을 사용해서 메시지를 생성하고 소비하는 방법을 설명합니다.

1. 클라이언트 머신으로 사용할 Amazon EC2 인스턴스를 생성합니다. 간단히 하기 위해 클러스터에 사용한 것과 동일한 VPC에 이 인스턴스를 생성합니다. 이러한 클라이언트 머신을 생성하는 방법에 대한 예제는 [3단계: 클라이언트 머신 생성](create-client-machine.md) 단원을 참조하십시오.

1. 주제를 생성합니다. 예를 들어, [4단계: Amazon MSK 클러스터에서 주제 생성](create-topic.md) 단원의 지침을 참조하십시오.

1. 가 AWS CLI 설치된 시스템에서 다음 명령을 실행하여 클러스터의 부트스트랩 브로커를 가져옵니다. *Cluster-ARN*을 클러스터의 ARN으로 바꿉니다.

   ```
   aws kafka get-bootstrap-brokers --cluster-arn Cluster-ARN
   ```

   응답에서 `BootstrapBrokerStringTls`에 연결된 문자열을 저장합니다.

1. 클라이언트 머신에서 다음 명령을 실행하여 JVM 트러스트 스토어를 사용하여 클라이언트 트러스트 스토어를 만듭니다. JVM 경로가 다른 경우 그에 따라 명령을 조정하십시오.

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

1. 클라이언트 머신에서 다음 명령을 실행하여 클라이언트에 대한 프라이빗 키를 만듭니다. *Distinguished-Name*, *Example-Alias*, *Your-Store-Pass*, *Your-Key-Pass*를 원하는 문자열로 바꿉니다.

   ```
   keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass Your-Store-Pass -keypass Your-Key-Pass -dname "CN=Distinguished-Name" -alias Example-Alias -storetype pkcs12 -keyalg rsa
   ```

1. 클라이언트 머신에서 다음 명령을 실행하여 이전 단계에서 만든 프라이빗 키로 인증서 요청을 만듭니다.

   ```
   keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. `client-cert-sign-request` 파일을 열고, `-----BEGIN CERTIFICATE REQUEST-----`로 시작해 `-----END CERTIFICATE REQUEST-----`로 끝나는지 확인합니다. `-----BEGIN NEW CERTIFICATE REQUEST-----`로 시작하는 경우, 파일의 시작 부분과 끝 부분에서 단어 `NEW` 및 그 뒤의 단일 공백을 삭제합니다.

1. 가 AWS CLI 설치된 시스템에서 다음 명령을 실행하여 인증서 요청에 서명합니다. *Private-CA-ARN*을 PCA의 ARN으로 바꿉니다. 원하는 경우 유효성 값을 변경할 수 있습니다. 여기에서는 300을 사용합니다.

   ```
   aws acm-pca issue-certificate --certificate-authority-arn Private-CA-ARN --csr fileb://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"
   ```

   응답에 제공된 인증서 ARN을 저장합니다.
**참고**  
클라이언트 인증서를 검색하려면 `acm-pca get-certificate` 명령을 사용하고 사용자 인증서 ARN을 지정합니다. 자세한 내용은 *AWS CLI 명령 참조*에서 [get-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm-pca/get-certificate.html)를 참조하세요.

1. 다음 명령을 실행하여가 자동으로 AWS Private CA 서명한 인증서를 가져옵니다. *Certificate-ARN*을 이전 명령에 대한 응답에서 얻은 ARN으로 바꿉니다.

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
   ```

1. 이전 명령을 실행한 JSON 결과에서 `Certificate` 및 `CertificateChain`에 연결된 문자열을 복사합니다. 이 두 문자열을 signed-certificate-from-acm이라는 새 파일에 붙여 넣습니다. 우선 `Certificate`에 연결된 문자열을 붙여 넣은 다음, `CertificateChain`와 연결된 문자열을 붙여 넣습니다. `\n` 문자를 새 줄로 바꿉니다. 다음은 인증서 및 인증서 체인을 붙여 넣은 이후의 파일 구조입니다.

   ```
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   ```

1. 클라이언트 머신에서 다음 명령을 실행하여 MSK 브로커와 통신할 때 제공할 수 있도록 키 스토어에 이 인증서를 추가합니다.

   ```
   keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. 다음 콘텐츠를 가진 `client.properties`이라는 파일을 생성합니다: 트러스트 스토어 및 키 스토어 위치를 `kafka.client.truststore.jks`를 저장한 경로로 조정합니다. *\$1YOUR KAFKA VERSION\$1* 자리 표시자를 Kafka 클라이언트 버전으로 대체합니다.

   ```
   security.protocol=SSL
   ssl.truststore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.truststore.jks
   ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.keystore.jks
   ssl.keystore.password=Your-Store-Pass
   ssl.key.password=Your-Key-Pass
   ```

# 인증을 사용하여 메시지 생성 및 사용
<a name="msk-authentication-messages"></a>

이 프로세스는 인증을 사용하여 메시지를 생성하고 사용하는 방법을 설명합니다.

1. 다음 명령을 실행해 주제를 생성합니다. `client.properties`라는 파일은 이전 절차에서 생성한 파일입니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBroker-String --replication-factor 3 --partitions 1 --topic ExampleTopic --command-config client.properties
   ```

1. 콘솔 생산자를 시작하려면 다음 명령을 실행합니다. `client.properties`라는 파일은 이전 절차에서 생성한 파일입니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
   ```

1. 클라이언트 머신의 새 명령 창에서 다음 명령을 실행하여 콘솔 소비자를 시작합니다.

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

1. 생산자 창에 메시지를 입력하고 소비자 창에 표시되는지 확인합니다.

# AWS Secrets Manager를 사용한 로그인 보안 인증
<a name="msk-password"></a>

 AWS Secrets Manager를 사용하여 저장되고 보호되는 로그인 자격 증명을 사용하여 Amazon MSK 클러스터에 대한 액세스를 제어할 수 있습니다. Secrets Manager에 사용자 보안 인증 정보를 저장하면 보안 인증 정보 감사, 업데이트, 교체와 같은 클러스터 인증의 오버헤드가 줄어듭니다. 또한 Secrets Manager를 사용하면 클러스터 간에 사용자 보안 인증 정보를 공유할 수 있습니다.

보안 암호를 MSK 클러스터와 연결하면 MSK는 자격 증명 데이터를 주기적으로 동기화합니다.

**Topics**
+ [로그인 자격 증명 인증의 작동 방식](msk-password-howitworks.md)
+ [Amazon MSK 클러스터를 위해 SASL/SCRAM 인증 설정](msk-password-tutorial.md)
+ [사용자 작업](msk-password-users.md)
+ [SCRAM 비밀 사용 시 제한 사항](msk-password-limitations.md)

# 로그인 자격 증명 인증의 작동 방식
<a name="msk-password-howitworks"></a>

Amazon MSK의 로그인 보안 인증 정보 인증은 SASL/SCRAM(Simple Authentication and Security Layer/Salted Challenge Response Mechanism) 인증을 사용합니다. 클러스터에 대한 로그인 보안 인증 정보 인증을 설정하려면 [AWS Secrets Manager](https://docs.aws.amazon.com//secretsmanager/?id=docs_gateway)에서 보안 암호 리소스를 생성하고 로그인 보안 인증 정보를 해당 보안 암호에 연결합니다.

SASL/SCRAM은 [RFC 5802](https://tools.ietf.org/html/rfc5802)에 정의되어 있습니다. SCRAM은 보안 해싱 알고리즘을 사용하며 클라이언트와 서버 간에 일반 텍스트 로그인 보안 인증 정보를 전송하지 않습니다.

**참고**  
클러스터에 대해 SASL/SCRAM 인증을 설정하면 Amazon MSK는 클라이언트와 브로커 간의 모든 트래픽에 대해 TLS 암호화를 설정합니다.

# Amazon MSK 클러스터를 위해 SASL/SCRAM 인증 설정
<a name="msk-password-tutorial"></a>

 AWS Secrets Manager에서 보안 암호를 설정하려면 [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)의 [보안 암호 생성 및 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html) 자습서를 따르세요.

Amazon MSK 클러스터에 대한 보안 암호를 생성하는 경우에는 다음 요구 사항에 유의하세요.
+ 암호 유형으로 **다른 유형의 보안 암호(예: API 키)**를 선택합니다.
+ 보안 암호 이름은 접두사 **AmazonMSK\$1**로 시작해야 합니다.
+ 기존 사용자 지정 AWS KMS 키를 사용하거나 보안 암호에 대한 새 사용자 지정 AWS KMS 키를 생성해야 합니다. Secrets Manager는 기본적으로 보안 암호에 기본 AWS KMS 키를 사용합니다.
**중요**  
기본 AWS KMS 키로 생성된 보안 암호는 Amazon MSK 클러스터에서 사용할 수 없습니다.
+ **일반 텍스트** 옵션을 사용하여 키-값 페어를 입력하려면 로그인 보안 인증 정보 데이터가 다음 형식이어야 합니다.

  ```
  {
    "username": "alice",
    "password": "alice-secret"
  }
  ```
+ 보안 암호에 대한 Amazon 리소스 이름(ARN) 값 
+ 
**중요**  
[클러스터 크기를 적절하게 조정: Standard 브로커당 파티션 수](bestpractices.md#partitions-per-broker)에 설명된 제한을 초과하는 클러스터에는 Secrets Manager 보안 암호를 연결할 수 없습니다.
+  AWS CLI 를 사용하여 보안 암호를 생성하는 경우 `kms-key-id` 파라미터의 키 ID 또는 ARN을 지정합니다. 별칭을 지정하지 마세요.
+ 보안 암호를 클러스터에 연결하려면 Amazon MSK 콘솔 또는 [BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret) 작업을 사용합니다.
**중요**  
암호를 클러스터와 연결하면 Amazon MSK는 클러스터가 정의한 보안 암호 값에 액세스하고 읽을 수 있도록 허용하는 리소스 정책을 암호에 연결합니다. 이 리소스 정책을 수정해서는 안 됩니다. 이렇게 하면 클러스터가 보안 암호에 액세스하는 것을 방지할 수 있습니다. 보안 암호 리소스 정책 및/또는 보안 암호 암호화에 사용되는 KMS 키를 변경하는 경우 보안 암호를 MSK 클러스터에 다시 연결해야 합니다. 이를 통해 클러스터가 보안 암호에 계속 액세스할 수 있습니다.

  다음 `BatchAssociateScramSecret` 작업의 예제 JSON 입력은 보안 암호를 클러스터와 연결합니다.

  ```
  {
    "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4",          
    "secretArnList": [
      "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret"
    ]
  }
  ```

# 로그인 보안 인증 정보를 사용하여 클러스터에 연결
<a name="msk-password-tutorial-connect"></a>

보안 암호를 생성하고 클러스터에 연결하면 클라이언트를 클러스터에 연결할 수 있습니다. 다음 절차에서는 SASL/SCRAM 인증을 사용하는 클러스터에 클라이언트를 연결하는 방법을 보여줍니다. 또한 예제 주제에서 이를 생성하고 소비하는 방법을 보여줍니다.

**Topics**
+ [SASL/SCRAM 인증을 사용하여 클러스터에 클라이언트 연결](#w2aab9c13c29c17c13c11b9b7)
+ [연결 문제 해결](#msk-password-tutorial-connect-troubleshooting)

## SASL/SCRAM 인증을 사용하여 클러스터에 클라이언트 연결
<a name="w2aab9c13c29c17c13c11b9b7"></a>

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

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

   이 명령의 JSON 결과에서 `BootstrapBrokerStringSaslScram`이라는 문자열과 연관된 값을 저장합니다. 이후 단계에서 이 값을 사용합니다.

1. 클라이언트 머신에서 암호에 저장된 사용자 보안 인증 정보가 포함된 JAAS 구성 파일을 생성합니다. 예를 들어 사용자 **alice**에 대해 다음과 같은 내용으로 `users_jaas.conf`라는 파일을 생성합니다.

   ```
   KafkaClient {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username="alice"
      password="alice-secret";
   };
   ```

1. 다음 명령을 사용하여 JAAS 구성 파일을 `KAFKA_OPTS` 환경 파라미터로 내보냅니다.

   ```
   export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
   ```

1. `/tmp` 디렉터리에 `kafka.client.truststore.jks`라는 파일을 생성합니다.

1. (선택 사항) 다음 명령을 사용하여 JVM `cacerts` 폴더에 이전 단계에서 생성한 `kafka.client.truststore.jks` 파일로 JDK 키 저장소 파일을 복사합니다. *JDKFolder*를 인스턴스의 JDK 폴더 이름으로 변경합니다. 예를 들어 JDK 폴더의 이름은 `java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64`일 수 있습니다.

   ```
   cp /usr/lib/jvm/JDKFolder/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. Apache Kafka 설치의 `bin` 디렉터리에 다음 내용으로 `client_sasl.properties`라는 클라이언트 속성 파일을 생성합니다. 이 파일은 SASL 메커니즘과 프로토콜을 정의합니다.

   ```
   security.protocol=SASL_SSL
   sasl.mechanism=SCRAM-SHA-512
   ```

1. 예제 주제를 생성하려면 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 얻은 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBrokerStringSaslScram --command-config <path-to-client-properties>/client_sasl.properties --replication-factor 3 --partitions 1 --topic ExampleTopicName
   ```

1. 생성한 예제 주제로 생성하려면 클라이언트 머신에서 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 검색한 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
   ```

1. 생성한 주제에서 사용하려면 클라이언트 머신에서 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 얻은 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties
   ```

## 연결 문제 해결
<a name="msk-password-tutorial-connect-troubleshooting"></a>

Kafka 클라이언트 명령을 실행하는 경우, 특히 대규모 주제 또는 데이터세트로 작업할 때 Java 힙 메모리 오류가 발생할 수 있습니다. 이러한 오류는 Kafka 도구가 워크로드에 충분하지 않을 수 있는 기본 메모리 설정이 있는 Java 애플리케이션으로 실행되기 때문에 발생합니다.

`Out of Memory Java Heap` 오류를 해결하려면 메모리 설정을 포함하도록 `KAFKA_OPTS` 환경 변수를 수정하여 Java 힙 크기를 늘릴 수 있습니다.

다음 예제에서는 최대 힙 크기를 1GB(`-Xmx1G`)로 설정합니다. 사용 가능한 시스템 메모리 및 요구 사항에 따라 이 값을 조정할 수 있습니다.

```
export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf -Xmx1G"
```

대규모 주제를 사용하는 경우 메모리 사용량을 제한하는 `--from-beginning` 대신 시간 기반 또는 오프셋 기반 파라미터를 사용하는 것이 좋습니다.

```
<path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --max-messages 1000 --consumer.config client_sasl.properties
```

# 사용자 작업
<a name="msk-password-users"></a>

**사용자 생성**: 보안 암호에 키-값 페어로 사용자를 생성합니다. Secrets Manager 콘솔에서 **일반 텍스트** 옵션을 사용하는 경우 로그인 보안 인증 정보 데이터를 다음 형식으로 지정해야 합니다.

```
{
  "username": "alice",
  "password": "alice-secret"
}
```

**사용자 액세스 취소:** 클러스터에 액세스하기 위한 사용자의 보안 인증 정보를 취소하려면 먼저 클러스터에서 ACL을 제거하거나 적용한 다음 보안 암호 연결을 해제하는 것을 권장합니다. 이는 다음과 같은 이유 때문입니다.
+ 사용자를 제거해도 기존 연결은 닫히지 않습니다.
+ 보안 암호에 대한 변경 사항이 전파되는 데에는 최대 10분이 소요됩니다.

Amazon MSK에서 ACL을 사용하는 방법에 대한 자세한 내용은 [Apache Kafka ACL](msk-acls.md) 섹션을 참조하세요.

ZooKeeper 모드를 사용하는 클러스터의 경우 사용자가 ACL을 수정하지 못하도록 ZooKeeper 노드에 대한 액세스를 제한하는 것이 좋습니다. 자세한 내용은 [Amazon MSK 클러스터의 Apache ZooKeeper 노드에 대한 액세스 제어](zookeeper-security.md) 단원을 참조하십시오.

# SCRAM 비밀 사용 시 제한 사항
<a name="msk-password-limitations"></a>

SCRAM 보안 암호를 사용할 때는 다음 제한 사항에 유의하세요.
+ Amazon MSK는 SCRAM-SHA-512 인증만 지원합니다.
+ Amazon MSK 클러스터는 최대 1,000명의 사용자를 보유할 수 있습니다.
+ 보안 암호와 AWS KMS key 함께를 사용해야 합니다. 기본 시크릿 관리자 암호화 키를 사용하는 보안 암호는 Amazon MSK와 함께 사용할 수 없습니다. KMS 키 생성에 대한 자세한 내용은 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.
+ Secrets Manager에서는 비대칭 KMS 키를 사용할 수 없습니다.
+ [BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret) 작업을 사용하여 한 번에 최대 10개의 보안 암호를 클러스터에 연결할 수 있습니다.
+ Amazon MSK 클러스터와 연결된 보안 암호의 이름에는 접두사 **AmazonMSK\$1**가 있어야 합니다.
+ Amazon MSK 클러스터와 연결된 보안 암호는 클러스터와 동일한 Amazon Web Services 계정 및 AWS 리전에 있어야 합니다.

# Apache Kafka ACL
<a name="msk-acls"></a>

Apache Kafka에는 플러그형 권한 부여자가 있으며, 기본 제공 권한 부여자 구현이 함께 제공됩니다. Amazon MSK는 브로커의 `server.properties` 파일에서 이 권한 부여자를 활성화합니다.

Apache Kafka ACL의 형식은 "Principal P is [Allowed/Denied] Operation O From Host H on any Resource R matching ResourcePattern RP"입니다. RP가 특정 리소스 R과 일치하지 않으면 R에 연결된 ACL이 없으므로 수퍼유저 이외의 누구도 R에 액세스할 수 없습니다. 이 Apache Kafka 동작을 변경하려면 속성 `allow.everyone.if.no.acl.found`를 true로 설정합니다. Amazon MSK는 이 속성을 기본적으로 true로 설정합니다. 즉, Amazon MSK 클러스터를 사용할 때 리소스에 ACL을 명시적으로 설정하지 않으면 모든 보안 주체가 이 리소스에 액세스할 수 있습니다. 리소스에 대해 ACL을 활성화하면 권한이 부여된 보안 주체만 ACL에 액세스할 수 있습니다. TLS 상호 인증을 사용하여 주제에 대한 액세스를 제한하고 클라이언트에 권한을 부여하려면 Apache Kafka 권한 부여자 CLI를 사용하여 ACL을 추가합니다. ACL 추가, 제거 및 나열 방법에 대한 자세한 내용은 [Kafka 인증 명령줄 인터페이스](https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Authorization+Command+Line+Interface)를 참조하십시오.

Amazon MSK는 브로커를 슈퍼 사용자로 구성하므로 모든 주제에 액세스할 수 있습니다. 이를 통해 브로커가 클러스터 구성에 `allow.everyone.if.no.acl.found` 속성이 정의되어 있는지 여부에 관계없이 기본 파티션에서 메시지를 복제할 수 있습니다.

**주제에 대한 읽기 및 쓰기 액세스 권한을 추가하거나 제거하려면**

1. 브로커가 ACL이 있는 모든 주제에서 읽을 수 있도록 ACL 테이블에 브로커를 추가합니다. 브로커에게 주제에 대한 읽기 액세스 권한을 부여하려면 MSK 클러스터와 통신할 수 있는 클라이언트 머신에서 다음 명령을 실행합니다.

   *Distinguished-Name*을 해당 클러스터의 부트스트랩 브로커의 DNS로 바꾼 다음 이 고유 이름의 첫 번째 마침표 앞에 있는 문자열을 별표(`*`)로 바꿉니다. 예를 들어, 클러스터의 부트스트랩 브로커 중 하나에 DNS `b-6.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com`이 있는 경우 다음 명령의 *Distinguished-Name*을 `*.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com`으로 바꿉니다. 부트스트랩 브로커를 가져오는 방법에 대한 자세한 내용은 [Amazon MSK 클러스터를 위한 부트스트랩 브로커 가져오기](msk-get-bootstrap-brokers.md) 단원을 참조하십시오.

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

1. 주제에 대한 클라이언트 애플리케이션 읽기 액세스 권한을 부여하려면 클라이언트 머신에서 다음 명령을 실행합니다. 상호 TLS 인증을 사용하는 경우 프라이빗 키를 생성할 때 사용한 것과 동일한 *Distinguished-Name*을 사용합니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

   읽기 액세스 권한을 제거하려면 `--add`를 `--remove`로 바꾸어 같은 명령을 실행하면 됩니다.

1. 주제에 대한 쓰기 액세스 권한을 부여하려면 클라이언트 머신에서 다음 명령을 실행합니다. 상호 TLS 인증을 사용하는 경우 프라이빗 키를 생성할 때 사용한 것과 동일한 *Distinguished-Name*을 사용합니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topic Topic-Name
   ```

   쓰기 액세스 권한을 제거하려면 `--add`를 `--remove`로 바꾸어 같은 명령을 실행하면 됩니다.

# Amazon MSK 클러스터의 보안 그룹 변경
<a name="change-security-group"></a>

이 페이지에서는 기존 MSK 클러스터의 보안 그룹을 변경하는 방법을 설명합니다. 특정 사용자 세트에 액세스 권한을 제공하거나 클러스터에 대한 액세스를 제한하기 위해 클러스터의 보안 그룹을 변경해야 할 수도 있습니다. 보안 그룹에 대한 자세한 내용은 Amazon VPC 사용 설명서에서 [VPC의 보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하세요.

1. [ListNodes](https://docs.amazonaws.cn/en_us/msk/1.0/apireference/clusters-clusterarn-nodes.html#ListNodes) API 또는의 [list-nodes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/list-nodes.html) 명령을 사용하여 클러스터의 브로커 목록을 AWS CLI 가져옵니다. 이 작업의 결과에는 브로커와 연결된 탄력적 네트워크 인터페이스(ENI)의 ID가 포함됩니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) Amazon EC2 콘솔을 엽니다.

1. 화면 오른쪽 상단에 있는 드롭다운 목록을 사용하여 클러스터가 배포될 리전을 선택합니다.

1. 왼쪽 창의 **네트워크 및 보안**에서 **네트워크 인터페이스**를 선택합니다.

1. 첫 번째 단계에서 가져온 첫 번째 ENI를 선택합니다. 화면 상단의 **작업** 메뉴를 선택한 다음 **보안 그룹 변경**을 선택합니다. 해당 ENI에 새 보안 그룹을 할당합니다. 첫 번째 단계에서 가져온 각 ENI에 대해 이 단계를 반복합니다.
**참고**  
Amazon EC2 콘솔을 사용하여 클러스터의 보안 그룹에 대한 변경 사항은 **네트워크 설정**의 MSK 콘솔에 반영되지 않습니다.

1. 새 보안 그룹의 규칙을 구성하여 고객이 브로커에 액세스할 수 있도록 합니다. 보안 그룹 규칙 설정에 대한 자세한 내용은 Amazon VPC 사용 설명서에서 [규칙 추가, 제거, 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#AddRemoveRules)를 참조하세요.

**중요**  
클러스터의 브로커와 연결된 보안 그룹을 변경한 다음 해당 클러스터에 새 브로커를 추가하면 Amazon MSK는 새 브로커를 클러스터가 생성될 때 클러스터와 연결된 원래 보안 그룹에 연결합니다. 그러나 클러스터가 올바르게 작동하려면 모든 브로커가 동일한 보안 그룹에 연결되어 있어야 합니다. 따라서 보안 그룹을 변경한 후 새 브로커를 추가하는 경우 이전 절차를 다시 수행하여 새 브로커의 ENI를 업데이트해야 합니다.

# Amazon MSK 클러스터의 Apache ZooKeeper 노드에 대한 액세스 제어
<a name="zookeeper-security"></a>

보안상의 이유로 Amazon MSK 클러스터의 일부인 Apache ZooKeeper 노드에 대한 액세스를 제한할 수 있습니다. 노드에 대한 액세스를 제한하기 위해 별도의 보안 그룹을 할당할 수 있습니다. 그런 다음 해당 보안 그룹에 대한 액세스 권한을 결정할 수 있습니다.

**중요**  
이 섹션은 KRaft 모드에서 실행되는 클러스터에는 적용되지 않습니다. [KRaft 모드](metadata-management.md#kraft-intro)을(를) 참조하세요.

**Topics**
+ [Apache ZooKeeper 노드를 별도의 보안 그룹에 배치하려면](zookeeper-security-group.md)
+ [Apache ZooKeeper에서 TLS 보안 사용](zookeeper-security-tls.md)

# Apache ZooKeeper 노드를 별도의 보안 그룹에 배치하려면
<a name="zookeeper-security-group"></a>

Apache ZooKeeper 노드에 대한 액세스를 제한하기 위해 별도의 보안 그룹을 할당할 수 있습니다. 보안 그룹 규칙을 설정하여 이 새 보안 그룹에 액세스할 수 있는 사용자를 선택할 수 있습니다.

1. 클러스터에 대한 Apache ZooKeeper 연결 문자열을 가져옵니다. 자세한 방법은 [ZooKeeper 모드](metadata-management.md#msk-get-connection-string)을 참조하세요. 이 연결 문자열은 Apache ZooKeeper 노드의 DNS 이름을 포함합니다.

1. `host` 또는 `ping` 같은 도구를 사용하여 이전 단계에서 얻은 DNS 이름을 IP 주소로 변환합니다. 이 절차의 뒷부분에 필요하므로 이 IP 주소를 저장하십시오.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) Amazon EC2 콘솔을 엽니다.

1. 탐색 창의 **NETWORK & SECURITY(네트워크 및 보안)** 아래에서 **Network Interfaces(네트워크 인터페이스)**를 선택합니다.

1. 네트워크 인터페이스 테이블 위의 검색 필드에 클러스터 이름을 입력한 다음 return을 입력합니다. 이렇게 하면 테이블에 표시되는 네트워크 인터페이스 수가 클러스터와 연결된 인터페이스로 제한됩니다.

1. 목록의 첫 번째 네트워크 인터페이스에 해당하는 행의 시작 부분에 있는 확인란을 선택합니다.

1. 페이지 하단의 세부 정보 창에서 **주 프라이빗 IPv4 IP**를 찾습니다. 이 IP 주소가 이 절차의 첫 번째 단계에서 얻은 IP 주소 중 하나와 일치하면 이 네트워크 인터페이스가 클러스터의 일부인 Apache ZooKeeper 노드에 할당된다는 뜻입니다. 그렇지 않으면 이 네트워크 인터페이스 옆의 확인란 선택을 취소하고, 목록에서 다음 네트워크 인터페이스를 선택합니다. 네트워크 인터페이스를 선택하는 순서는 중요하지 않습니다. 다음 단계에는 Apache ZooKeeper 노드에 할당된 모든 네트워크 인터페이스에서 일일이 동일한 작업을 수행합니다.

1. Apache ZooKeeper 노드에 해당하는 네트워크 인터페이스를 선택하는 경우 페이지 상단의 **작업** 메뉴를 선택한 다음, **보안 그룹 변경**을 선택합니다. 이 네트워크 인터페이스에 새 보안 그룹을 할당합니다. 보안 그룹 생성에 대한 자세한 내용은 Amazon VPC 설명서에서 [보안 그룹 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#CreatingSecurityGroups)을 참조하세요.

1. 이전 단계를 반복하여 클러스터의 Apache ZooKeeper 노드와 연결된 모든 네트워크 인터페이스에 동일한 새 보안 그룹을 할당합니다.

1. 이제 이 새 보안 그룹에 액세스할 수 있는 사용자를 선택할 수 있습니다. 보안 그룹 규칙 설정에 대한 자세한 내용은 Amazon VPC 설명서에서 [규칙 추가, 제거, 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#AddRemoveRules)를 참조하세요.

# Apache ZooKeeper에서 TLS 보안 사용
<a name="zookeeper-security-tls"></a>

클라이언트와 Apache ZooKeeper 노드 간의 전송 시 암호화에 TLS 보안을 사용할 수 있습니다. Apache ZooKeeper 노드로 TLS 보안을 구현하려면 다음을 수행합니다.
+ Apache ZooKeeper에서 TLS 보안을 사용하려면 클러스터는 Apache Kafka 버전 2.5.1 이상을 사용해야 합니다.
+ 클러스터를 생성하거나 구성할 때 TLS 보안을 활성화합니다. TLS가 활성화된 Apache Kafka 버전 2.5.1 이상에서 생성된 클러스터는 Apache ZooKeeper 엔드포인트에서 자동으로 TLS 보안을 사용합니다. TLS 보안 설정에 대한 자세한 내용은 [Amazon MSK 암호화 시작하기](msk-working-with-encryption.md) 섹션을 참조하세요.
+ [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) 작업을 사용하여 TLS Apache ZooKeeper 엔드포인트를 검색합니다.
+ `kafka-configs.sh` 및 [https://kafka.apache.org/documentation/#security_authz_cli](https://kafka.apache.org/documentation/#security_authz_cli) 도구 또는 ZooKeeper 셸과 함께 사용할 Apache ZooKeeper 구성 파일을 생성합니다. 각 도구에서 `--zk-tls-config-file` 파라미터를 사용하여 Apache ZooKeeper 구성을 지정합니다.

  다음 예제는 일반적인 Apache ZooKeeper 구성 파일을 보여줍니다.

  ```
  zookeeper.ssl.client.enable=true
  zookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
  zookeeper.ssl.keystore.location=kafka.jks
  zookeeper.ssl.keystore.password=test1234
  zookeeper.ssl.truststore.location=truststore.jks
  zookeeper.ssl.truststore.password=test1234
  ```
+ 다른 명령(예: `kafka-topics`)의 경우 `KAFKA_OPTS` 환경 변수를 사용하여 Apache ZooKeeper 파라미터를 구성해야 합니다. 다음 예제는 Apache ZooKeeper 파라미터를 다른 명령에 전달하도록 `KAFKA_OPTS` 환경 변수를 구성하는 방법을 보여줍니다.

  ```
  export KAFKA_OPTS="
  -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty 
  -Dzookeeper.client.secure=true 
  -Dzookeeper.ssl.trustStore.location=/home/ec2-user/kafka.client.truststore.jks
  -Dzookeeper.ssl.trustStore.password=changeit"
  ```

  `KAFKA_OPTS` 환경 변수를 구성한 후에는 CLI 명령을 정상적으로 사용할 수 있습니다. 다음 예제는 `KAFKA_OPTS` 환경 변수의 Apache ZooKeeper 구성을 사용하여 Apache Kafka 주제를 생성합니다.

  ```
  <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --zookeeper ZooKeeperTLSConnectString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopic
  ```

**참고**  
Apache ZooKeeper 구성 파일에서 사용하는 파라미터 `KAFKA_OPTS`의 이름과 환경 변수에서 사용하는 파라미터의 이름이 일치하지 않습니다. 구성 파일 및 `KAFKA_OPTS` 환경 변수에서 어떤 이름을 어떤 파라미터와 함께 사용하는지에 대해 주의하세요.

TLS로 Apache ZooKeeper 노드에 액세스하는 방법에 대한 자세한 내용은 [KIP-515: ZK 클라이언트에서 새로운 TLS 지원 인증 활성화](https://cwiki.apache.org/confluence/display/KAFKA/KIP-515%3A+Enable+ZK+client+to+use+the+new+TLS+supported+authentication)를 참조하세요.

# Amazon Managed Streaming for Apache Kafka에 대한 규정 준수 검증
<a name="MSK-compliance"></a>

타사 감사자는 AWS 규정 준수 프로그램의 일환으로 Amazon Managed Streaming for Apache Kafka의 보안 및 규정 준수 여부를 평가합니다. 여기에는 PCI 및 HIPAA BAA가 포함됩니다.

특정 규정 준수 프로그램의 범위에 속하는 AWS 서비스 목록은 규정 준수 프로그램 [제공 범위 내 Amazon 서비스규정 준수 프로그램 제공](https://aws.amazon.com/compliance/services-in-scope/) . 일반 정보는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/).

를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다 AWS Artifact. 자세한 내용은 [Downloading Reports inDownloading AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)을 참조하세요.

Amazon MSK 사용 시 규정 준수 책임은 데이터의 민감도, 회사의 규정 준수 목표 및 관련 법률과 규정에 따라 결정됩니다.는 규정 준수를 지원하기 위해 다음 리소스를 AWS 제공합니다.
+ [보안 및 규정 준수 빠른 시작 안내서](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance): 이 배포 안내서에서는 아키텍처 고려 사항에 관해 설명하고 AWS에서 보안 및 규정 준수에 중점을 둔 기본 환경을 배포하기 위한 단계를 제공합니다.
+ [HIPAA 보안 및 규정 준수를 위한 설계 백서 ](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html)-이 백서에서는 기업이 AWS 를 사용하여 HIPAA 준수 애플리케이션을 생성하는 방법을 설명합니다.
+ [AWS 규정 준수 리소스](https://aws.amazon.com/compliance/resources/) -이 워크북 및 가이드 모음은 산업 및 위치에 적용될 수 있습니다.
+ *AWS Config 개발자 안내서*의 [규칙을 사용하여 리소스 평가](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) -이 AWS Config 서비스는 리소스 구성이 내부 관행, 업계 지침 및 규정을 얼마나 잘 준수하는지 평가합니다.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) -이 AWS 서비스는 보안 업계 표준 및 모범 사례 준수 여부를 확인하는 데 도움이 AWS 되는 내 보안 상태에 대한 포괄적인 보기를 제공합니다.

# Amazon Managed Streaming for Apache Kafka의 복원력
<a name="disaster-recovery-resiliency"></a>

 AWS 글로벌 인프라는 AWS 리전 및 가용 영역을 중심으로 구축됩니다. AWS 리전은 물리적으로 분리되고 격리된 여러 가용 영역을 제공하며,이 가용 영역은 지연 시간이 짧고 처리량이 높으며 중복성이 높은 네트워킹과 연결됩니다. 가용 영역을 사용하면 중단 없이 영역 간에 자동으로 장애 극복 조치가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또는 다중 데이터 센터 인프라보다 가용성, 내결함성, 확장성이 뛰어납니다.

 AWS 리전 및 가용 영역에 대한 자세한 내용은 [AWS 글로벌 인프라를](https://aws.amazon.com/about-aws/global-infrastructure/) 참조하세요.

# Amazon Managed Streaming for Apache Kafka의 인프라 보안
<a name="infrastructure-security"></a>

관리형 서비스인 Amazon Managed Streaming for Apache Kafka는 [Amazon Web Services: 보안 프로세스 개요](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf) 백서에 설명된 AWS 글로벌 네트워크 보안 절차로 보호됩니다.

 AWS 에서 게시한 API 호출을 사용하여 네트워크를 통해 Amazon MSK에 액세스합니다. 클라이언트가 전송 계층 보안(TLS) 1.0 이상을 지원해야 합니다. TLS 1.2 이상을 권장합니다. 클라이언트는 Ephemeral Diffie-Hellman(DHE) 또는 Elliptic Curve Ephemeral Diffie-Hellman(ECDHE)과 같은 PFS(전달 완전 보안, Perfect Forward Secrecy)가 포함된 암호 제품군도 지원해야 합니다. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

또한 요청은 액세스 키 ID 및 IAM 위탁자와 관련된 시크릿 액세스 키를 사용하여 서명해야 합니다. 또는 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)(AWS STS)를 사용하여 임시 보안 자격 증명을 생성하여 요청에 서명할 수 있습니다.