이 문서에서는 Pub/Sub용 고객 관리 암호화 키(CMEK)를 구성하는 방법을 설명합니다.
Pub/Sub는 기본적으로 Google 소유 및 Google 관리 키로 메시지를 암호화합니다. Google 관리 암호화 키를 사용할 때는 추가 설정이 필요하지 않습니다.
CMEK 정보
CMEK는 사용자가 소유하는 암호화 키이며 Cloud Key Management Service(Cloud KMS)에서 관리 및 저장됩니다. Pub/Sub 데이터 보호를 위해 사용되는 암호화 키를 더 세부적으로 제어해야 할 경우에는 CMEK를 사용할 수 있습니다. 일부 조직에서는 CMEK 사용도 의무화합니다.
CMEK를 사용하면 암호화 키를 완전히 제어할 수 있으므로 수명 주기, 순환, 액세스 정책을 관리할 수 있습니다. CMEK로 Pub/Sub를 구성하면 이 서비스가 지정된 키를 사용하여 모든 데이터를 자동으로 암호화합니다. CMEK에 Cloud KMS를 사용하는 경우 사용 패턴에 따라 추가 비용이 발생할 수 있습니다.
모든 메시지는 다음 상태 및 레이어에서 암호화됩니다.
애플리케이션 레이어에서 Pub/Sub는 메시지가 수신되는 즉시 받은 메시지를 개별적으로 암호화합니다. 이 구현에는 다음 기능이 추가되었습니다.
- 데이터 센터 내부 링크에서 메시지를 암호화된 상태로 유지
- 고객 관리 암호화 키(CMEK)를 사용 설정
Pub/Sub용 CMEK
Pub/Sub는 CMEK와 함께 봉투 암호화 패턴을 사용합니다. 이 접근 방식에서 메시지는 Cloud KMS에 의해 암호화되지 않습니다. 대신 Cloud KMS는 각 주제에 대해 Pub/Sub가 만든 데이터 암호화 키(DEK)를 암호화하는 데 사용됩니다. 이러한 DEK는 Pub/Sub에 의해 암호화된 형태, 즉 래핑된 형태로만 저장됩니다. DEK를 저장하기 전에 서비스는 DEK를 Cloud KMS로 전송하여 해당 주제에 지정된 키 암호화 키(KEK)로 암호화합니다. 약 6시간마다 각 주제에 대해 새 DEK가 생성됩니다.
Pub/Sub는 메시지를 구독에 게시하기 전에 해당 주제에 대해 생성된 최신 DEK를 사용하여 메시지를 암호화합니다. Pub/Sub는 메시지가 구독자에게 전달되기 직전에 메시지를 복호화합니다.
시작하기 전에
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 Pub/Sub용 CMEK를 구성할 수 있습니다.
다음 태스크를 완료합니다.
Cloud KMS API를 사용 설정합니다.
Cloud KMS에 키링과 키를 만듭니다. 키와 키링은 삭제할 수 없습니다.
이러한 태스크를 수행하는 방법은 Cloud KMS 빠른 시작 가이드를 참조하세요.
Pub/Sub 리소스는 전역이므로 전역 Cloud KMS 키를 사용하여 CMEK가 사용 설정된 주제를 구성하는 것이 좋습니다. 주제 게시자와 구독자의 위치에 따라 리전별 Cloud KMS 키를 사용하면 리전 간 네트워크 링크에 불필요한 종속 항목이 발생할 수 있습니다.
CMEK를 구성하는 데 필요한 역할 및 권한
Pub/Sub는 Google Cloud 서비스 에이전트를 사용하여 Cloud KMS에 액세스합니다. 서비스 에이전트는 각 프로젝트의 Pub/Sub에 의해 내부적으로 관리되며 기본적으로 Google Cloud 콘솔의 서비스 계정 페이지에는 표시되지 않습니다.
Pub/Sub 서비스 에이전트에는 service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
양식이 있습니다.
Pub/Sub에는 CMEK를 사용하여 데이터를 암호화 및 복호화하기 위한 특정 권한이 필요합니다.
다음 단계에 따라 필요한 액세스를 설정합니다.
Pub/Sub 서비스 에이전트에 Cloud KMS CryptoKey 암호화/복호화(
roles/cloudkms.cryptoKeyEncrypterDecrypter
) 역할을 부여합니다.gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.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: Pub/Sub 프로젝트의 프로젝트 번호입니다.
IAM 역할 부여에 대한 자세한 내용은 리소스에 역할 부여를 참조하세요.
CMEK로 주제 구성
Google Cloud 콘솔 또는 gcloud CLI를 사용하여 주제의 CMEK를 구성할 수 있습니다.
콘솔
CMEK로 주제를 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Pub/Sub 주제 페이지로 이동합니다.
주제 만들기를 클릭합니다.
주제 ID 필드에 주제의 ID를 입력합니다.
주제 이름 지정에 대한 자세한 내용은 이름 지정 가이드라인을 참조하세요.
암호화에서 Cloud KMS 키를 클릭합니다.
키 유형을 선택합니다. 고객 관리 키 선택 드롭다운이 표시되지 않으면 프로젝트에 대해 Cloud KMS API를 사용 설정했는지 확인합니다.
주제 만들기를 클릭합니다.
gcloud
-
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.
-
CMEK로 주제를 만들려면
gcloud pubsub topics create
명령어를 실행합니다.gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
다음을 바꿉니다.
-
TOPIC_ID: 주제의 ID 또는 이름입니다.
주제 이름을 지정하는 방법에 대한 자세한 내용은 주제, 구독, 스키마, 스냅샷 이름 지정 가이드라인을 참조하세요.
-
ENCRYPTION_KEY: 주제에 사용할 CMEK의 ID입니다.
형식은
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
입니다.
-
주제의 CMEK 업데이트
Pub/Sub 주제에 연결된 CMEK를 자유롭게 변경할 수 있습니다. gcloud CLI를 사용하여 CMEK를 업데이트할 수 있습니다. 그러나 이 변경사항은 소급해서 적용되지 않습니다.
키 변경 전에 주제에 게시된 메시지는 원래 키로 암호화된 상태로 유지됩니다. CMEK 없이 주제를 만든 경우 나중에 CMEK를 추가할 수 있습니다. 기존 메시지는 기본 Google 관리 암호화로 계속 보호됩니다. 주제의 CMEK를 변경해도 이전에 게시된 메시지는 다시 암호화되지 않습니다. 이러한 메시지는 처음에 암호화된 키로 계속 보호됩니다.
Pub/Sub에는 약 5분 동안 지속되는 키 캐싱 메커니즘이 있습니다. Pub/Sub가 새 키 버전을 인식하고 사용하기까지 이 정도의 시간이 걸릴 수 있습니다.
감사 로그
Cloud KMS는 키가 사용, 사용 중지 설정되거나, Pub/Sub에서 메시지를 암호화하고 복호화할 때 감사 로그를 생성합니다. 이는 게시 또는 전송 가용성 문제를 디버깅하는 데 유용합니다.
Cloud KMS 키는 Pub/Sub 주제 리소스의 감사 로그에 첨부됩니다. Pub/Sub에는 다른 Cloud KMS 관련 정보가 포함되어 있지 않습니다.
가격 및 비용
다음 Pub/Sub 요청의 경우 CMEK 사용 시 Pub/Sub 가격을 기준으로 Cloud KMS 서비스에 대한 요금이 청구됩니다.
CMEK를 사용하는 각 주제에 대해 6시간마다 새로운 DEK가 암호화되고 저장됩니다.
이 키는 6분마다 DEK를 복호화하는 데 사용됩니다. 복호화는 Pub/Sub 서비스가 실행되는 리전의 모든 영역에 대해 한 번씩 3번 수행됩니다.
예를 들어 다음과 같은 주제를 살펴보겠습니다.
구독 1개 이상
동일한 리전의 게시자 및 구독자 고객
Cloud KMS 암호화 연산 수는 다음과 같이 계산할 수 있습니다.
1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours + 3 key accesses for DECRYPT * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes = 21,720 Cloud KMS key access events암호화 작업의 10,000개의 연산당 비용이 $0.03인 가격 책정 구조를 사용할 경우 위의 사용량은 약 $0.07입니다. 최신 가격 정보는 Cloud KMS 가격 책정을 참조하세요.
실제로는 액세스 패턴에 따라 키를 가져오는 빈도를 늘리거나 줄일 수 있습니다. 이 수치는 추정치로만 사용합니다.
모니터링 및 문제 해결
키 액세스 문제는 다음과 같은 영향을 미칠 수 있습니다.
메시지 전송 지연
게시 오류
response_class
및 response_code
기준으로 그룹화된 다음 측정항목을 사용하여 게시 및 pull 요청 오류를 모니터링합니다.
topic/send_request_count
subscription/pull_request_count
subscription/streaming_pull_response_count
StreamingPull 응답의 오류율은 100%입니다. 이는 요청이 실패한 것이 아니라 스트림이 종료되었음을 나타냅니다. StreamingPull을 모니터링하려면 FAILED_PRECONDITION
응답 코드를 찾습니다.
메시지 게시 및 전송은 여러 가지 이유로 FAILED_PRECONDITION
오류가 발생하며 실패할 수 있습니다.
Cloud KMS 키는 사용 중지될 수 있습니다. 자세한 내용은 이 페이지에서 키 사용 중지 및 다시 사용 설정을 참조하세요.
Cloud EKM을 통해 외부 관리 키를 사용하는 경우 Cloud EKM 오류 참조를 확인하세요.
푸시 구독의 경우 CMEK별 전송 문제를 직접 감지할 수 없습니다. 대신 다음과 같은 방법을 사용할 수 있습니다.
subscription/num_unacked_messages
을 사용하여 푸시 구독의 백로그 크기 및 기간을 모니터링합니다.비정상적인 급증의 경우
subscription/oldest_unacked_message_age
를 모니터링합니다.게시 오류 및 CMEK 감사 로그를 사용하여 문제를 식별합니다.
키 사용 중지 및 다시 사용 설정
Pub/Sub가 메시지 데이터를 복호화하지 못하도록 하는 방법에는 두 가지가 있습니다.
권장: Pub/Sub를 사용하여 주제와 관련된 Cloud KMS 키를 사용 중지합니다. 이 접근 방식은 특정 키와 관련된 Pub/Sub 주제 및 구독에만 영향을 미칩니다.
Pub/Sub 서비스 계정(
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
)에서 IAM을 사용하여 Pub/Sub CryptoKey 암호화/복호화 역할을 취소합니다. 이 접근 방식은 CMEK를 사용하여 암호화된 메시지를 포함하는 프로젝트의 모든 Pub/Sub 주제와 구독에 영향을 줍니다.
어느 작업도 즉시 액세스 취소를 보장하지는 않지만 일반적으로 IAM 변경사항은 더 빠르게 전파됩니다. 자세한 내용은 Cloud KMS 리소스 일관성 및 액세스 변경 전파를 참조하세요.
Pub/Sub가 Cloud KMS 키에 액세스할 수 없는 경우 StreamingPull 또는 pull을 사용한 메시지 게시 및 전송이 FAILED_PRECONDITION
오류와 함께 실패합니다. 푸시 엔드포인트로의 메시지 전송이 중지됩니다. 전송 및 게시를 재개하려면 Cloud KMS 키에 대한 액세스를 복원합니다.
Cloud KMS 키가 Pub/Sub에 액세스할 수 있게 되면 12시간 이내에 게시를 사용할 수 있고 메시지 전송은 2시간 이내에 재개됩니다.
Cloud KMS이 1분 미만 정도로 간헐적으로 중단될 경우에는 게시 및 제공이 크게 중단되지 않을 수 있지만 Cloud KMS를 사용할 수 없는 시간이 늘어나면 키 취소와 동일한 영향을 줍니다.