Managed Service for Apache Kafka에서 메시지 암호화 구성

이 페이지에서는 Google Cloud Managed Service for Apache Kafka 클러스터에 고객 관리 암호화 키 (CMEK)를 구성하는 방법을 설명합니다.

메일 암호화 개요

기본적으로 Managed Service for Apache Kafka는 Google-owned and Google-managed encryption keys로 저장된 메시지를 암호화합니다. 추가 설정은 필요하지 않습니다.

저장 상태의 Managed Service for Apache Kafka 데이터를 보호하는 데 사용되는 암호화 키를 더 세밀하게 제어해야 하는 경우 클러스터를 만들 때 CMEK를 설정하면 됩니다. CMEK는 사용자가 소유한 암호화 키입니다. Cloud Key Management Service (Cloud KMS)에서 관리 및 저장됩니다. CMEK로 클러스터를 구성하면 서비스가 해당 키를 사용하여 저장 상태의 모든 클러스터 데이터를 자동으로 암호화합니다. CMEK를 사용하면 사용 패턴에 따라 추가 비용이 발생할 수 있습니다.

Apache Kafka용 관리형 서비스 클러스터와 연결된 CMEK는 키 암호화 키(KEK)입니다. KEK는 데이터 암호화 키 (DEK)를 암호화하는 데 사용됩니다. 그런 다음 DEK는 브로커에 연결된 영구 디스크의 미사용 데이터와 Cloud Storage의 계층화된 스토리지에 있는 데이터를 읽고 쓰는 데 사용됩니다.

Apache Kafka용 관리형 서비스 리소스는 리전별이므로 Kafka 클러스터와 동일한 리전에서 CMEK를 만드는 것이 좋습니다.

필수 역할 및 권한

관리형 Kafka 서비스 계정에는 CMEK를 사용하여 데이터를 암호화하고 복호화할 수 있는 권한이 있어야 합니다.

서비스 계정에 Cloud KMS 키에 대한 Cloud KMS 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter) 역할을 부여합니다.

gcloud kms keys add-iam-policy-binding KEY \
  --keyring=KEY_RING \
  --location=LOCATION \
  --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
  --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

다음을 바꿉니다.

  • KEY: 키 이름

  • KEY_RING: 키가 있는 키링의 이름

  • LOCATION: 키링의 Cloud KMS 위치입니다.

  • PROJECT_NUMBER: Apache Kafka용 관리형 서비스 클러스터가 포함된Google Cloud 프로젝트의 프로젝트 번호입니다.

Cloud KMS 키에 역할을 부여하는 방법에 대한 자세한 내용은 리소스에 역할 부여를 참고하세요.

키 순환

클러스터와 연결된 키는 변경할 수 없습니다. 대신 새 키 버전을 만들어 키의 기본 버전으로 설정하여 키를 순환할 수 있습니다.

브로커에 연결된 디스크의 경우 브로커를 다시 시작한 후에만 새 KEK가 적용됩니다. 클러스터의 용량 구성을 업데이트하여 브로커의 순차적 재시작을 강제할 수 있습니다. 예를 들어 클러스터 RAM 양을 변경할 수 있습니다.

모든 새 파티션 세그먼트 파일은 새 기본 키 버전을 사용하여 계층화된 스토리지에 작성됩니다. 새 기본 키 버전이 선택된 후 몇 분 정도 지연될 수 있습니다.

감사 로그

Cloud KMS는 키가 사용 설정 또는 사용 중지되거나 Managed Service for Apache Kafka에서 사용하여 메시지를 암호화 및 복호화할 때 감사 로그를 생성합니다. 이는 게시 또는 전송 가용성 문제를 디버깅하는 데 유용합니다.

Cloud KMS 키 ID는 Managed Service for Apache Kafka 클러스터 리소스의 감사 로그에 첨부됩니다. Managed Service for Apache Kafka에는 감사 로그에 다른 Cloud KMS 관련 정보가 포함되어 있지 않습니다.

CMEK 사용 중지 및 다시 사용 설정

CMEK를 사용 중지하는 방법에는 두 가지가 있습니다. 다음 방법 중 하나를 선택합니다.

  • 클러스터와 연결된 Cloud KMS 키를 사용 중지합니다. 이 접근 방식은 해당 키와 연결된 모든 Cloud 리소스에 영향을 미칩니다.

  • Identity and Access Management(IAM)를 사용하여 관리형 Apache Kafka 서비스 에이전트 (service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com)에서 CryptoKey 암호화/복호화 역할을 취소합니다. 이 접근 방식은 프로젝트의 모든 Apache Kafka용 관리형 서비스 클러스터와 CMEK를 사용하여 암호화된 메시지에 영향을 줍니다.

어느 작업도 즉시 액세스 취소를 보장하지는 않지만 일반적으로 IAM 변경사항은 더 빠르게 전파됩니다.

자세한 내용은 Cloud KMS 리소스 일관성액세스 변경 전파를 참고하세요.

Apache Kafka용 관리 서비스가 Cloud KMS 키에 액세스할 수 없는 경우 오류와 함께 메시지 게시 및 전송이 실패합니다. 전송 및 게시를 재개하려면 Cloud KMS 키에 대한 액세스를 복원합니다.

Cloud KMS 키가 Apache Kafka용 관리형 서비스에 액세스할 수 있게 되면 12시간 이내에 게시를 사용할 수 있고 메시지 전송은 2시간 이내에 재개됩니다.

Cloud KMS가 1분 미만 정도로 간헐적으로 중단될 경우에는 게시 및 제공이 크게 중단되지 않을 수 있지만 Cloud KMS를 사용할 수 없는 시간이 늘어나면 키 취소와 동일한 영향을 줍니다.

제한사항

  • 클러스터와 연결된 키는 변경할 수 없습니다. 대신 새 버전을 만들어 키를 순환할 수 있습니다.

  • 기본 키가 아닌 키 버전을 사용 중지하면 로컬 디스크는 변경 없이 계속 작동합니다. 각 브로커는 다시 시작될 때 새 KEK를 다운로드합니다. 하지만 Cloud Storage는 원래 버전을 사용하여 암호화된 주제 세그먼트 파일에 액세스할 수 없으므로 이러한 세그먼트 파일에서 메시지를 사용할 수 없을 수 있습니다. 이전 데이터를 사용할 수 없을 수도 있습니다.

  • 키의 기본 버전을 사용 중지하면 브로커가 계층화된 스토리지에 새 세그먼트 파일을 쓸 수 없으므로 로컬 디스크 사용률이 증가합니다. 또한 브로커 다시 시작이 실패합니다. 언제든지 사용자가 선제적으로 또는 서비스에서 시작한 클러스터 업데이트에 의해 다시 시작이 트리거될 수 있습니다.

  • Apache Kafka용 관리형 서비스 서비스 에이전트의 키 액세스 권한을 삭제하면 기본 키와 비기본 키 버전을 모두 사용 중지하는 경우와 유사한 동작이 발생합니다.

  • 키를 삭제하면 클러스터가 종료되도록 예약되며 복구할 수 없습니다.

  • 저장된 데이터의 재암호화를 요청할 수 없습니다. CMEK는 KEK로 사용되지만 재암호화하려면 데이터 암호화 키를 변경해야 합니다.

다음 단계

Apache Kafka®는 미국 및/또는 다른 국가에서 사용되는 Apache Software Foundation 또는 해당 계열사의 등록 상표입니다.