이 문서에서는 Google Cloud Managed Service for Apache Kafka 클러스터용 고객 관리 암호화 키 (CMEK)를 구성하는 방법을 설명합니다.
Apache Kafka용 관리형 서비스는 기본적으로 Google-owned and Google-managed encryption keys 를 사용하여저장된 메시지를 암호화합니다. Google-owned and Google-managed encryption keys를 사용하는 데 추가 설정은 필요하지 않습니다.
CMEK 정보
CMEK는 사용자가 소유하는 암호화 키이며 Cloud Key Management Service(Cloud KMS)에서 관리 및 저장됩니다. Managed Service for Apache Kafka 저장 데이터를 보호하는 데 사용되는 암호화 키를 더 세부적으로 제어해야 하는 경우 CMEK를 사용할 수 있습니다.
CMEK로 Managed Service for Apache Kafka 클러스터를 구성하면 서비스가 지정된 키를 사용하여 모든 클러스터 저장 데이터를 자동으로 암호화합니다. CMEK에 Cloud KMS를 사용하는 경우 사용 패턴에 따라 추가 비용이 발생할 수 있습니다.
Apache Kafka용 관리형 서비스 클러스터와 연결된 CMEK는 키 암호화 키(KEK)입니다. KEK는 데이터 암호화 키 (DEK)를 암호화하는 데 사용됩니다. 그런 다음 DEK는 브로커에 연결된 영구 디스크의 미사용 데이터와 Cloud Storage의 계층화된 스토리지에 있는 데이터를 읽고 쓰는 데 사용됩니다.
디스크 암호화에 대한 자세한 내용은 디스크 암호화 정보를 참고하세요. Cloud Storage의 암호화에 대한 자세한 내용은 Cloud Storage 문서의 고객 관리 암호화 키를 참고하세요.
키 순환
새 키 버전을 만들고 키의 기본 버전으로 설정하여 키를 순환할 수 있습니다.
브로커에 연결된 디스크의 경우 브로커를 다시 시작한 후에만 새 KEK가 적용됩니다. 클러스터의 용량 구성을 업데이트하여 브로커의 순차적 재시작을 강제할 수 있습니다. 예를 들어 클러스터 RAM 양을 변경할 수 있습니다.
모든 새 파티션 세그먼트 파일은 새 기본 키 버전을 사용하여 계층화된 스토리지에 작성됩니다. 새 기본 키 버전이 선택된 후 몇 분 정도 지연될 수 있습니다.
CMEK용 Managed Service for Apache Kafka 클러스터 구성
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 Apache Kafka용 관리형 서비스 클러스터의 CMEK를 구성할 수 있습니다.
시작하기 전에
다음 작업을 완료합니다.
Cloud KMS API를 사용 설정합니다.
Cloud KMS에 키링과 키를 만듭니다. 키와 키링은 삭제할 수 없습니다. Apache Kafka용 관리형 서비스 리소스는 리전별이므로 Kafka 클러스터가 있는 리전과 동일한 리전에 CMEK를 만드는 것이 좋습니다.
이러한 태스크를 수행하는 방법은 Cloud KMS 빠른 시작 가이드를 참조하세요.
CMEK를 구성하는 데 필요한 역할 및 권한
Apache Kafka용 관리형 서비스는 Google Cloud 서비스 에이전트를 사용하여 Cloud KMS에 액세스합니다. Google Cloud프로젝트의 서비스 에이전트는 첫 번째 Apache Kafka용 관리형 서비스 클러스터를 만든 후 자동으로 생성됩니다.
서비스 에이전트는 각 프로젝트의 Managed Service for Apache Kafka에 의해 내부적으로 관리되며 기본적으로 Google Cloud 콘솔의 서비스 계정 페이지에는 표시되지 않습니다.
Managed Service for Apache Kafka 서비스 에이전트의 형식은 service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com입니다.
Managed Service for Apache Kafka에는 CMEK를 사용하여 데이터를 암호화 및 복호화하기 위한 특정 권한이 필요합니다.
다음 단계에 따라 필요한 액세스를 설정합니다.
선택사항: gcloud beta services identity create 명령어를 사용하여 Apache Kafka용 관리형 서비스 서비스 에이전트를 수동으로 만듭니다.
이전에 프로젝트에서 클러스터를 만든 경우 Apache Kafka용 관리형 서비스 서비스 에이전트가 이미 프로젝트에 생성되어 있으므로 이 단계를 건너뛸 수 있습니다.
gcloud beta services identity create \ --service=managedkafka.googleapis.com \ --project=PROJECT_IDPROJECT_ID를 프로젝트 ID로 바꿉니다.
Apache Kafka용 관리형 서비스 서비스 에이전트에 Cloud KMS CryptoKey 암호화/복호화(
roles/cloudkms.cryptoKeyEncrypterDecrypter) 역할을 부여합니다.gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter다음을 바꿉니다.
CLOUD_KMS_KEY_NAME: Cloud KMS 키의 이름입니다.
이 키는
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY형식입니다.한 가지 예시는
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key입니다.PROJECT_NUMBER: Apache Kafka용 관리형 서비스 프로젝트의 프로젝트 번호입니다.
IAM 역할 부여에 대한 자세한 내용은 리소스에 역할 부여를 참조하세요.
CMEK로 클러스터 만들기
Google Cloud 콘솔 또는 gcloud CLI를 사용하여 Kafka 클러스터를 만들 때 암호화 키를 추가할 수 있습니다.
Enable the Apache Kafka for BigQuery, Compute Engine, Cloud DNS, and Cloud KMS APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
클러스터를 만들기 전에 클러스터 속성 문서를 검토하세요.
CMEK로 클러스터를 만들려면 다음 단계를 따르세요.
콘솔
-
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
- 만들기를 선택합니다.
Kafka 클러스터 만들기 페이지가 열립니다.
- 클러스터 이름에 문자열을 입력합니다.
클러스터 이름을 지정하는 방법에 관한 자세한 내용은 Apache Kafka용 관리형 서비스 리소스 이름 지정 가이드라인을 참고하세요.
- 위치에 지원되는 위치를 입력합니다.
지원되는 위치에 대한 자세한 내용은 지원되는 Apache Kafka용 관리형 서비스 위치를 참고하세요.
- 용량 구성의 경우 메모리 및 vCPU 값을 입력합니다.
vCPU와 메모리 비율은 1:1~1:8 사이여야 합니다.
Apache Kafka용 관리형 서비스 클러스터의 크기를 조정하는 방법에 대한 자세한 내용은 Kafka 클러스터 크기 계획을 참고하세요.
- 네트워크 구성에 다음 세부정보를 입력합니다.
- 프로젝트: 서브네트워크가 있는 프로젝트입니다. 서브넷은 클러스터와 동일한 리전에 있어야 하지만 프로젝트는 다를 수 있습니다.
- 네트워크: 서브넷이 연결된 네트워크입니다.
- 서브네트워크: 서브넷의 이름입니다.
- 서브넷 URI 경로: 이 필드는 자동으로 채워집니다. 또는 여기에 서브넷 경로를 입력할 수 있습니다. 서브넷 이름은
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID형식이어야 합니다. - 완료를 클릭합니다.
- (선택사항) 연결된 서브넷 추가를 클릭하여 서브넷을 추가합니다.
최대 10개까지 서브넷을 추가할 수 있습니다.
- 암호화에서 Cloud KMS 키를 선택합니다.
- 키 유형에서 Cloud KMS를 선택하고 고객 관리 키 선택에 만든 CMEK를 입력합니다.
- 만들기를 클릭합니다.
gcloud
gcloud managed-kafka clusters create명령어를 실행합니다.gcloud managed-kafka clusters create CLUSTER_ID \ --location=LOCATION \ --cpu=CPU \ --memory=MEMORY \ --subnets=SUBNETS \ --encryption-key=CLOUD_KMS_KEY \
다음을 바꿉니다.
-
CLUSTER_ID: 클러스터의 ID 또는 이름입니다.
클러스터 이름을 지정하는 방법에 대한 자세한 내용은 Apache Kafka용 관리형 서비스 리소스 이름 지정 가이드라인을 참고하세요.
-
LOCATION: 클러스터의 위치입니다.
지원되는 위치에 대한 자세한 내용은 지원되는 Apache Kafka용 관리형 서비스 위치를 참고하세요.
-
CPU: 클러스터의 가상 CPU 수입니다. vCPU와 메모리 비율은 1:1~1:8 사이여야 합니다.
Apache Kafka용 관리형 서비스 클러스터의 크기를 조정하는 방법을 자세히 알아보려면 Kafka 클러스터 크기 계획을 참고하세요.
-
MEMORY: 클러스터의 메모리 양입니다. 'MB', 'MiB', 'GB', 'GiB', 'TB', 'TiB' 단위를 사용합니다. 예를 들어 '10GiB'입니다.
-
SUBNETS: 연결할 서브넷 목록입니다. 쉼표를 사용하여 여러 서브넷 값을 구분합니다.
서브넷 형식은
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID입니다. -
ENCRYPTION_KEY: 클러스터에 사용할 CMEK의 ID입니다.
형식은
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY입니다.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
클러스터 생성 확인
gcloud managed-kafka clusters describe 명령어를 실행하여 클러스터가 CMEK용으로 구성되었는지 확인합니다.
gcloud managed-kafka clusters describe CLUSTER_ID \
--location=LOCATION
출력에는 구성된 CMEK가 포함됩니다.
감사 로그
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를 사용할 수 없는 시간이 늘어나면 키 취소와 동일한 영향을 줍니다.
제한사항
Cloud KMS 키와 Apache Kafka용 관리형 서비스 클러스터 간의 연결은 변경할 수 없습니다. 클러스터와 연결된 키는 변경할 수 없습니다. 대신 새 버전을 만들어 키를 순환할 수 있습니다.
기본 키가 아닌 키 버전을 사용 중지하면 로컬 디스크는 변경 없이 계속 작동합니다. 각 브로커는 다시 시작될 때 새 KEK를 다운로드합니다. 하지만 Cloud Storage는 원래 버전을 사용하여 암호화된 주제 세그먼트 파일에 액세스할 수 없으므로 이러한 세그먼트 파일에서 메시지를 사용할 수 없을 수 있습니다. 따라서 이전 데이터를 사용할 수 없을 수도 있습니다.
키의 기본 버전을 사용 중지하면 브로커가 계층화된 스토리지에 새 세그먼트 파일을 쓸 수 없으므로 로컬 디스크 사용률이 증가합니다. 또한 브로커 다시 시작이 실패합니다. 언제든지 사용자가 선제적으로 또는 서비스에서 시작한 클러스터 업데이트에 의해 다시 시작이 트리거될 수 있습니다.
Apache Kafka용 관리형 서비스 서비스 에이전트의 키 액세스 권한을 삭제하면 기본 키와 비기본 키 버전을 모두 사용 중지하는 경우와 유사한 동작이 발생합니다.
키를 삭제하면 클러스터가 종료되도록 예약되며 복구할 수 없습니다.
저장된 데이터의 재암호화를 요청할 수 없습니다. CMEK는 KEK로 사용되지만 재암호화하려면 데이터 암호화 키를 변경해야 합니다.