로그 버킷에 CMEK 구성

이 문서에서는 로그 버킷에 저장된 로그에 대해 고객 관리 암호화 키(CMEK)를 구성하는 방법을 설명합니다. 이 문서에서는 또한 이러한 키를 관리하는 방법과 CMEK를 사용할 때의 제한사항을 설명합니다.

CMEK를 조직 또는 폴더에 대한 기본 리소스 설정으로 구성할 수 있습니다. 구성된 경우 Cloud Logging은 조직 또는 폴더의 모든 새 로그 버킷을 고객 관리 키로 암호화합니다. 로그 버킷을 만들 때 키를 제공하지 않으면 기본 키가 사용됩니다. 자세한 내용은 Cloud Logging에 CMEK 구성을 참조하세요.

개요

기본적으로 Cloud Logging은 저장된 미사용 고객 콘텐츠를 암호화합니다. Logging에서 로그 버킷에 저장한 데이터는 봉투 암호화라고 하는 프로세스인 키 암호화 키를 통해 암호화됩니다. 로깅 데이터에 액세스하려면 사용자의 작업 없이 Google에서 대신 관리하는 이러한 키 암호화 키에 액세스해야 합니다.

조직에는 Google의 기본 저장 데이터 암호화가 제공하지 않는 규제 요건, 규정 준수 관련 요건, 고급 암호화 요건이 있을 수 있습니다. 조직 요구사항을 충족하기 위해 데이터를 보호하는 암호화 키를 Google에서 관리하는 대신 사용자 키를 직접 관리할 수 있습니다.

장점 및 제한사항을 포함하여 CMEK 사용에 대한 자세한 내용은 고객 관리 암호화 키를 참조하세요.

대칭적 암호화의 경우 보안을 위해 주기적으로 그리고 자동으로 키를 순환하는 것이 권장됩니다. 자세한 내용은 키 순환을 참조하세요.

기본 요건

다음 단계를 완료합니다.

  1. CMEK 사용 시에는 몇 가지 제한사항이 있습니다. CMEK가 사용 설정된 로그 버킷을 만들기 전에 제한사항을 검토하세요.

  2. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

    이 가이드에서는 Google Cloud CLI를 사용하는 방법을 설명합니다.

  3. Cloud KMS를 실행할 Google Cloud 프로젝트를 만들거나 지정합니다.

  4. 키를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트 또는 상위 리소스에 대한 Cloud KMS 관리자(roles/cloudkms.admin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

  5. 다음 Cloud Logging 권한이 있는지 확인합니다.

    • logging.settings.get
    • logging.buckets.get
    • logging.buckets.list
    • logging.buckets.create
    • logging.buckets.update
  6. Cloud KMS를 실행할 Google Cloud 프로젝트에 대해 Cloud KMS API를 사용 설정합니다.

  7. Cloud KMS를 실행할 Google Cloud 프로젝트에 키링 및 키를 만듭니다.

    장애 도메인을 정렬하려면 해당 위치가 데이터의 리전 범위와 일치하는 키링을 사용해야 합니다.

    global 리전에 생성된 로그 버킷에 대해서는 CMEK를 사용 설정할 수 없습니다.

  8. 다음 변수의 값을 확인합니다.

    • BUCKET_ID는 생성할 Logging 버킷의 고유한 숫자 식별자입니다.
    • BUCKET_PROJECT_ID는 새 로그 버킷을 포함하는 Google Cloud 프로젝트의 이름입니다.
    • KMS_PROJECT_ID는 고유한 영숫자 식별자로, Cloud KMS를 실행하는 Google Cloud 프로젝트의 Google Cloud 프로젝트 이름과 임의로 할당된 번호로 구성되어 있습니다.
    • KMS_KEY_LOCATION은 Cloud KMS 키의 리전입니다.
    • KMS_KEY_RING은 Cloud KMS 키링의 이름입니다.
    • KMS_KEY_NAME은 Cloud KMS 키 이름입니다. projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY와 같은 형식으로 지정해야 합니다.

    리소스 식별자 찾기에 대한 자세한 내용은 프로젝트 식별을 참조하세요.

CMEK 사용 설정

기본 요건 단계를 완료했으면 다음 안내에 따라 개별 로그 버킷에 대해 CMEK를 사용 설정합니다.

서비스 계정 ID 확인

CMEK를 적용할 Google Cloud 리소스와 연관된 서비스 계정 ID를 확인하려면 다음을 수행합니다.

  1. 다음 gcloud logging settings describe 명령어를 실행합니다.

    gcloud logging settings describe --project=BUCKET_PROJECT_ID
    

    이전 명령어는 지정된 리소스의 서비스 계정(아직 없는 경우)을 생성하고 kmsServiceAccountId 필드에 해당 서비스 계정의 ID를 반환합니다.

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    name: projects/BUCKET_PROJECT_ID/settings
    

    kmsServiceAccountId 필드에는 Cloud Logging에서 Cloud Key Management Service를 호출하는 데 사용하는 서비스 계정이 나열됩니다. KMS_SERVICE_ACCT_NAME 필드의 형식은 service-PROJECT_NUMBER 또는 cmek-pPROJECT_NUMBER입니다.

  2. KMS_SERVICE_ACCT_NAME 필드의 형식이 cmek-pPROJECT_NUMBER이고, VPC 서비스 제어를 사용하거나, 도메인 제한 공유를 사용 설정한 경우 CMEK 서비스 계정을 마이그레이션해야 하는지 결정합니다. 마이그레이션해야 하는 경우와 마이그레이션 단계에 관한 자세한 내용은 VPC 서비스 제어 및 도메인 제한 공유 문제 해결을 참고하세요.

암호화/복호화 역할 할당

로그 버킷 수준에서 CMEK를 구성할 때 Cloud KMS CryptoKey 암호화/복호화 역할을 kmsServiceAccountId 필드로 식별된 서비스 계정에 할당하여 Cloud KMS 사용 권한을 서비스 계정에 부여합니다.

gcloud kms keys add-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY_NAME

이전 명령어에서 다음과 같이 변수를 설정합니다.

  • KMS_SERVICE_ACCT_NAME를 이전 단계에서 결정한 kmsServiceAccountId 값으로 바꿉니다.

  • 다른 변수를 기본 요건 단계에서 결정한 값으로 바꿉니다.

로그 버킷 만들기 및 Cloud KMS 키 제공

로그 버킷을 만들고 로그 버킷에 CMEK를 사용 설정하려면 다음 gcloud logging buckets create 명령어를 실행합니다.

gcloud logging buckets create BUCKET_ID \
--location=LOCATION \
--cmek-kms-key-name=KMS_KEY_NAME

키 사용 설정 확인

CMEK가 사용 설정된 로그 버킷을 성공적으로 만들었는지 확인하려면 다음 명령어를 실행합니다.

gcloud logging buckets list --project=BUCKET_PROJECT_ID

표 형식 출력에서 라벨이 CMEK로 지정된 열을 확인합니다. CMEK 열의 값이 TRUE이면 CMEK가 로그 버킷에 사용 설정된 것입니다.

키 세부정보를 포함하여 특정 로그 버킷의 세부정보를 보려면 다음 명령어를 실행합니다.

gcloud logging buckets describe BUCKET_ID

Cloud KMS 키 관리

다음 섹션에서는 Cloud KMS 키의 최신 기본 키 버전을 사용하도록 로그 버킷을 업데이트하는 방법을 설명합니다. 또한 Cloud KMS 키를 변경, 액세스 취소, 사용 중지하는 방법을 설명합니다.

Cloud KMS 키 순환

Cloud KMS 키를 만들 때 순환 기간을 구성할 수 있습니다. Cloud KMS 키를 수동으로 순환할 수도 있습니다. 키가 순환될 때마다 해당 키의 새 버전이 생성됩니다.

Cloud KMS 키를 순환하는 경우 새 키 버전은 키 순환 후 생성된 로그 버킷에만 적용됩니다. 기존 로그 버킷에서 키를 사용하는 경우 키를 순환해도 로그 버킷이 데이터를 보호하는 방법은 변경되지 않습니다.

예를 들어 로그 버킷을 만들고 CMEK를 사용 설정한 후 Cloud KMS 키를 순환한다고 가정해 보겠습니다. 만든 로그 버킷은 새 키 버전을 사용하지 않습니다. 대신 로그 버킷이 생성될 때 기본 버전으로 표시된 키 버전으로 데이터를 계속 보호합니다.

Cloud KMS 키의 최신 기본 키 버전을 사용하도록 로그 버킷을 업데이트하려면 다음을 수행합니다.

  1. 로그 버킷의 현재 Cloud KMS 키를 식별합니다. 자세한 내용은 키 사용 설정 확인을 참조하세요.
  2. 사용 가능한 다른 Cloud KMS 키를 확인합니다. 키링에 키가 하나만 있으면 키를 만듭니다.
  3. 로그 버킷의 Cloud KMS 키를 이전 단계에서 생성된 Cloud KMS 키로 변경합니다.
  4. 로그 버킷의 Cloud KMS 키를 원래의 Cloud KMS 키로 변경합니다.

Cloud KMS 키 변경

로그 버킷과 연결된 Cloud KMS 키를 변경하려면 키를 만들고 로그 버킷에 대해 CMEK 설정을 업데이트합니다.

gcloud logging buckets update BUCKET_ID --cmek-kms-key-name=NEW_KMS_KEY_NAME

Cloud KMS 키에 대한 액세스 권한 취소

Cloud KMS 키에 대한 Logging의 액세스 권한을 취소하려면 언제든지 해당 키에 대해 구성된 서비스 계정의 IAM 권한을 삭제하면 됩니다.

키에 대한 Logging의 액세스 권한을 삭제한 후 변경사항이 적용되려면 최대 1시간까지 걸릴 수 있습니다.

연결된 BigQuery 데이터 세트가 있는 경우 BigQuery는 이 액세스 권한을 사용하여 새 BigQuery 테이블에 키에 적용할 수 없습니다. Logging에 연결되지 않은 BigQuery 테이블에서 키를 사용하려면 BigQuery 문서를 따르세요. 키에 대한 Logging의 액세스 권한을 취소하고 연결된 BigQuery 데이터 세트가 있는 경우 동일한 키에 대한 BigQuery의 액세스 권한도 취소됩니다.

Logging의 액세스 권한을 보존하면서 연결된 데이터 세트의 키에 대한 BigQuery 액세스 권한을 취소할 수 없습니다.

액세스 권한 취소가 미치는 영향에 대한 자세한 내용은 제한사항을 참조하세요.

키에 대한 로깅의 액세스 권한을 삭제하려면 다음 명령어를 실행합니다.

gcloud kms keys remove-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY_NAME

제한사항

다음은 알려진 제한사항입니다.

CMEK의 Error Reporting 사용 중지

Error Reporting을 사용하려면 로그 버킷에서 고객 관리 암호화 키(CMEK)를 사용 설정하지 마세요. 자세한 내용은 문제 해결을 참조하세요.

로그 버킷에서 CMEK를 삭제할 수 없음

CMEK를 변경하거나 삭제하도록 로그 버킷을 재구성할 수 없습니다.

Cloud KMS 키 사용 불가로 인한 성능 저하

다음 두 조건을 모두 충족하는 경우 Logging은 Cloud KMS 키를 사용하고 액세스할 수 있습니다.

  • 키가 사용 설정되어 있습니다.
  • Logging 서비스 계정에는 키에 대한 암호화 및 복호화 권한이 있습니다.

Logging에서는 모든 키가 올바르게 구성되어 있고 항상 사용 가능한 상태인지 확인하는 것이 좋습니다.

재해 복구 손실

Cloud Logging 기본 스토리지에 중대한 오류가 발생한 경우 Logging이 로깅 데이터를 재해 복구 파일로 미러링합니다. CMEK가 Google Cloud 조직과 같은 리소스에 대해 사용 설정되어 있는 경우 해당 리소스에 속하는 로그는 구성된 CMEK 키로 보호됩니다. CMEK 키에 액세스할 수 없으면 해당 리소스에 대해 재해 복구 파일을 기록할 수 없습니다.

재해 복구 파일이 손실되어도 일반 로깅 작업에는 영향을 주지 않습니다. 하지만 스토리지 재해가 발생한 경우 Cloud Logging은 CMEK가 올바르게 구성되지 않은 리소스에서 로그를 복구하지 못할 수 있습니다.

지원 제약조건

Cloud Customer Care는 해당 키가 올바르게 구성되지 않았거나 사용할 수 없게 되었을 때 리소스 로그를 읽을 수 없습니다.

쿼리 성능 저하

고객 관리 암호화 키에 액세스할 수 없을 때도 Cloud Logging은 데이터를 계속 암호화하고 데이터를 로그 버킷에 저장합니다. 그러나 Cloud Logging에서 이 데이터에 대한 백그라운드 최적화를 수행할 수 없습니다. 키 액세스가 복원되면 데이터가 사용 가능해지지만 데이터가 처음에 최적화되지 않은 상태로 저장되고 쿼리 성능이 저하될 수 있습니다.

Cloud EKM 키 사용 불가로 인한 성능 저하

Cloud EKM 키를 사용하는 경우 Google은 외부 키 관리 파트너 시스템에서 외부 관리 키의 가용성을 제어 할 수 없습니다. 버킷 수준 CMEK의 경우 외부에서 관리되는 키를 사용할 수 없으면 Cloud Logging에서 로그를 계속 로그 버킷에 저장하지만 사용자는 이러한 로그에 액세스할 수 없습니다.

외부 키를 사용할 때의 고려사항과 가능한 대안은 Cloud 외부 키 관리자 문서를 참조하세요.

리전성

로그 버킷을 만들고 CMEK를 사용 설정할 때는 리전이 데이터의 리전 범위와 일치하는 키를 사용해야 합니다. global 리전에 생성된 로그 버킷에 대해서는 CMEK를 구성할 수 없습니다.

클라이언트 라이브러리 가용성

Logging 클라이언트 라이브러리는 CMEK를 구성하는 메서드를 제공하지 않습니다.

할당량

로깅 사용량 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.

구성 오류 문제 해결

CMEK 구성 오류 문제 해결에 대한 자세한 내용은 CMEK 및 조직 설정 오류 문제 해결을 참조하세요.