로그 라우터 데이터를 보호하는 키 관리

이 페이지에서는 조직의 규정 준수 요구사항을 충족하기 위해 로그 라우터에 대해 CMEK(고객 관리 암호화 키)를 구성하고 관리하는 방법을 설명합니다.

로그 라우터의 CMEK는 Google Cloud 조직 수준에서 구성됩니다. 이 구성은 Google Cloud 조직에 포함된 모든 클라우드 프로젝트 및 폴더에 적용됩니다.

개요

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

조직에는 Google의 기본 저장 데이터 암호화가 제공하지 않는 규제 요건, 규정 준수 관련 요건, 고급 암호화 요건이 있을 수 있습니다. 조직의 요건을 충족하려면 Google이 데이터를 보호하는 키 암호화 키를 관리하는 것이 아니라 사용자가 자체 암호화를 제어하고 관리하도록 CMEK를 구성할 수 있습니다.

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

현재까지 Cloud Logging에 저장된 로그에 대해 CMEK를 사용할 수는 없지만, 로그 라우터에 사용되는 임시 재해 복구 파일과 Cloud Storage에 로그를 라우팅할 때 사용되는 임시 파일을 보호하기 위해 CMEK를 사용할 수 있습니다.

기본 요건

로그 라우터에 CMEK를 사용 설정하려면 다음 단계를 완료하세요.

  1. Cloud SDK 설치 및 초기화

    이 가이드에서는 Cloud SDK를 사용하여 설치되는 gcloud 명령줄 도구를 사용하는 방법을 설명합니다.

  2. CMEK를 사용 설정할 조직을 식별합니다.

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

    Cloud 프로젝트가 포함된 Google Cloud 조직이 logging.cmekSettings.{get,update} 권한이 있는 IAM 역할을 부여하는지 확인합니다. 필요한 권한이 포함되어 있는 로그 구성 작성자 역할이 있는 것이 좋습니다.

  4. Cloud KMS를 실행할 클라우드 프로젝트에 대해 Cloud KMS API를 사용 설정합니다.

  5. Cloud KMS를 실행할 클라우드 프로젝트에 키링 및 키를 만듭니다.

    단일 조직에 여러 리전으로 라우팅된 데이터가 있을 수 있으므로 로그 라우터를 사용하면 모든 리전의 키를 사용할 수 있습니다. 조직의 모든 데이터 또는 대부분의 데이터가 리전 하나로 제한되는 경우 리전이 데이터의 리전 범위와 일치하는 키를 사용하는 것이 좋습니다.

  6. 아래의 필수 매개변수를 식별합니다. 이 페이지의 샘플에서는 다음 변수를 사용하여 Google Cloud 리소스 메타데이터를 나타냅니다.

    • ORGANIZATION_ID는 CMEK를 사용 설정할 Google Cloud 조직의 고유한 숫자 식별자입니다.
    • KMS_PROJECT_ID는 Cloud KMS를 실행할 Google 프로젝트의 고유한 영숫자 식별자로 Google 프로젝트 이름과 임의로 할당된 번호로 구성됩니다.
    • KMS_KEY_NAME은 Cloud KMS 키의 리소스 이름으로, projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY와 같은 형식으로 지정해야 합니다.

    리소스 식별자 찾기에 대한 자세한 내용은 프로젝트 식별조직 ID 가져오기를 참조하세요.

조직에 CMEK 사용 설정

기본 요건 단계를 완료한 후 다음 안내에 따라 Google Cloud 조직에 CMEK를 사용 설정하세요.

서비스 계정 ID 확인

조직 수준에서 CMEK를 구성하려면 CMEK를 적용할 조직과 연결된 서비스 계정 ID를 가져와야 합니다. 다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. GET 요청을 실행하여 CMEK를 사용 설정할 Google Cloud 조직과 연결된 서비스 계정 ID를 확인합니다.

     curl -H "Authorization: Bearer AUTH_TOKEN" \
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings
    

gcloud

gcloud logging cmek-settings describe --organization=ORGANIZATION_ID

이 명령어를 실행하면 존재하지 않을 경우 조직의 서비스 계정이 생성되고 serviceAccountId 필드에 ID가 반환됩니다.

serviceAccountId: "SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"

이 프로비저닝 프로세스는 리소스당 한 번만 실행하면 됩니다. 이 명령어를 여러 번 실행하면 serviceAccountId 필드에 동일한 값이 반환됩니다.

암호화/복호화 역할 할당

CMEK를 사용하려면 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화 역할을 할당하여 Cloud KMS 사용 권한을 서비스 계정에 부여합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다. 자세한 내용은 API 인증을 참조하세요.
  2. 다음 정보를 포함하는 JSON 파일을 만듭니다.

    {
      "policy": {
        "bindings": {
          "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter",
          "members": "serviceAccount:SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"
        },
      }
    }
  3. cURL을 사용하여 POST setIamPolicy 요청에서 Cloud KMS API를 호출합니다.

    curl -X POST --data-binary @JSON_FILE_NAME.json \
    -H "Authorization: Bearer OAUTH2_TOKEN" \
    -H "Content-Type: application/json" \
    "https://cloudkms.googleapis.com/v1/KEY_RESOURCE:setIamPolicy"

gcloud

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

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

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

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

    • KMS_PROJECT_ID를 Cloud KMS를 실행 중인 클라우드 프로젝트의 ID로 바꿉니다.
    • KMS_KEY_LOCATION을 Cloud KMS 키의 리전으로 바꿉니다.
    • KMS_KEY_RING을 Cloud KMS 키링의 이름으로 바꿉니다.
    • KMS_KEY를 Cloud KMS 키의 이름으로 바꿉니다.

Console

  1. Google Cloud Console에서 Cloud Key Management Service 키 브라우저를 엽니다.
    Cloud KMS 키 브라우저 열기
  2. 원하는 키가 포함된 키링의 이름을 클릭합니다.

  3. 원하는 키의 체크박스를 선택합니다.

    권한 탭을 사용할 수 있게 됩니다.

  4. 구성원 추가 대화상자에서 액세스 권한을 부여할 로깅 서비스 계정의 이메일 주소를 지정합니다.

  5. 역할 선택 드롭다운에서 Cloud KMS CryptoKey 암호화/복호화를 선택합니다.

  6. 추가를 클릭합니다.

Cloud KMS 키 구성

CMEK 사용 설정을 완료하려면 조직에 Cloud KMS 키 이름을 추가합니다. 다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. 다음 정보를 포함하는 JSON 파일을 만듭니다.

    {
        "kms_key_name": "KMS_KEY_NAME"
    }
    
  3. PATCH 요청을 실행하여 CMEK를 사용 설정할 Google Cloud 조직과 연결할 kms_key_name을 업데이트합니다.

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

gcloud logging cmek-settings update \
    --organization=ORGANIZATION_ID --kms-key-name=KMS_KEY_NAME

키 사용 설정 확인

조직에 CMEK가 성공적으로 사용 설정되었는지 확인하려면 다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. GET 요청을 실행하여 키 사용 설정 여부를 확인할 Google Cloud 조직과 연결된 CMEK 설정을 확인합니다.

     curl -H "Authorization: Bearer AUTH_TOKEN" \
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings
    
    {
        "kmsKeyName": "KMS_KEY_NAME",
        "serviceAccountId": "SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"
    }
    

gcloud

gcloud logging cmek-settings describe --organization=ORGANIZATION_ID

이 명령어를 실행하면 Cloud KMS 키 이름이 반환됩니다.

kmsKeyName: KMS_KEY_NAME
serviceAccountId: SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com

kmsKeyName 필드가 채워지면 조직에 CMEK가 사용 설정됩니다.

Cloud KMS 키 관리

다음 섹션에서는 Cloud KMS 키를 변경, 액세스 취소 또는 사용 중지하는 방법을 설명합니다.

Cloud KMS 키 변경

조직과 연결된 Cloud KMS 키를 변경하려면 키를 만들고 새 Cloud KMS 키 이름으로 조직의 CMEK 설정을 업데이트합니다.

다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. 다음 정보를 포함하는 JSON 파일을 만듭니다.

    {
        "kms_key_name": "NEW_KMS_KEY_NAME"
    }
    
  3. PATCH 요청을 실행하여 kms_key_name을 업데이트합니다.

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

gcloud logging cmek-settings update \
    --organization=ORGANIZATION_ID
    --kms-key-name=NEW_KMS_KEY_NAME

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

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

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

다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. 다음 정보를 포함하는 JSON 파일을 만듭니다.

    revoke.json:
    {
      "policy": {
        "bindings": {
          "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter",
          "members":
        },
      }
    }
    
  3. POST 요청을 실행합니다.

    curl -X POST --data-binary @revoke.json -H "Authorization: Bearer
    ${OAUTH_TOKEN}" -H "Content-Type: application/json"
    "https://cloudkms.googleapis.com/v1/{$KEY}:setIamPolicy"
    

gcloud

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

조직의 CMEK 사용 중지

조직에서 CMEK를 사용 중지하면 이후 작업에만 CMEK 정책 적용이 삭제되고 이전에 적용된 구성은 그대로 유지됩니다.

조직에 CMEK를 사용 중지하려면 다음 명령어를 실행합니다.

API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.

  2. 다음 정보를 포함하는 JSON 파일을 만듭니다.

    {
        "kms_key_name": ""
    }
    
  3. PATCH 요청을 실행하여 kms_key_name을 업데이트합니다.

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

gcloud logging cmek-settings update --organization=ORGANIZATION_ID --clear-kms-key

키를 삭제하려면 키 버전 삭제 및 복원을 참조하세요.

Cloud KMS 키 순환이 미치는 영향

로그 라우터는 Google Cloud 조직과 연결된 Cloud KMS 키가 순환할 때 임시 재해 복구 파일의 암호화 키를 자동으로 순환하지 않습니다. 기존 복구 파일은 생성될 때 사용한 키 버전을 계속 사용합니다. 새 복구 파일은 현재 기본 키 버전을 사용합니다.

지원되는 대상으로 로그 라우팅

로그 싱크를 사용하여 지원되는 대상으로 로그를 라우팅하려면 다음을 고려하세요.

  • Cloud Storage는 로그 라우팅을 위한 CMEK를 지원합니다. 이 페이지의 안내에 따라 데이터를 올바르게 암호화합니다. 자세한 내용은 고객 관리 암호화 키 사용을 참조하세요.

    로그 데이터를 Cloud Storage로 라우팅하는 경우 키를 사용할 수 없어 데이터가 손실되면 로그를 Cloud Storage에 일괄적으로 소급할 수 있습니다. 자세한 내용은 로그 항목 복사를 참조하세요.

  • BigQuery는 기본적으로 비활성 상태로 저장된 고객 콘텐츠를 암호화합니다. 자세한 내용은 Cloud Key Management Service 키로 데이터 보호를 참조하세요.

  • Pub/Sub는 기본적으로 비활성 상태로 저장된 고객 콘텐츠를 암호화합니다. 자세한 내용은 메시지 암호화 구성을 참조하세요.

외부 키 고려사항

Cloud EKM 키를 사용하는 경우 Google은 외부 키 관리 파트너 시스템에서 외부 관리 키의 가용성을 제어 할 수 없습니다.

외부 관리 키를 사용할 수 없으면 클라우드 로깅은 최대 1시간 동안에만 키 액세스를 시도하고 수신 로그 데이터를 버퍼링합니다. 1시간이 지난 후에도 클라우드 로깅이 외부 관리 키에 액세스할 수 없으면 Cloud Logging이 데이터 삭제를 시작합니다.

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

제한사항

다음은 로그 라우터에 대한 CMEK의 알려진 제한사항입니다.

조직 수준 구성에만 해당

로그 라우터의 CMEK는 현재 Google Cloud 조직에 대해서만 구성할 수 있습니다. CMEK는 구성되면 Google Cloud 조직의 모든 Cloud 프로젝트 및 폴더에 전파됩니다.

Cloud Logging 스토리지에 CMEK가 지원되지 않음

CMEK는 Cloud Logging에 저장된 로그에 대해 지원되지 않습니다. 로그 라우터에서 사용된 임시 재해 복구 파일과 Cloud Storage로 로그를 라우팅하는 동안 사용된 임시 파일은 CMEK를 사용해 보호할 수 있습니다.

로그 항목이 Cloud Logging 스토리지에 기록되지 않도록 제외 필터로 싱크를 만들 수 있습니다.

재해 복구 파일 사용 불가능

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

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

Logging에서 Cloud KMS 키에 액세스하지 못하면 Logging이 임시 재해 복구 파일을 작성할 수 없으며 사용자는 쿼리 작동을 중지합니다. 키 액세스가 복원된 후에도 쿼리 성능이 저하될 수 있습니다.

로그 라우터가 라우팅 지원을 위해 필요한 임시 파일을 쓸 수 없기 때문에 Cloud Storage에 로그 라우팅도 영향을 받을 수 있습니다. 데이터를 암호화 또는 복호화하는 동안 오류가 발생하면 Cloud KMS 키를 포함하는 클라우드 프로젝트에 알림이 전송됩니다.

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

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

할당량

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

구성 오류 문제 해결

다음 섹션에서는 일반적인 CMEK 구성 오류를 찾아 해결하는 방법을 설명합니다.

CMEK를 구성하면 Cloud KMS 키가 포함된 Cloud 프로젝트에 관련 문제에 대한 알림이 전송됩니다. 예를 들어 KMS_KEY_NAME이 유효하지 않거나 연결된 서비스 계정에 필요한 Cloud Key Management Service CryptoKey 암호화/복호화 역할이 없거나 키 액세스가 사용 중지되면 업데이트가 실패합니다.

구성 오류 식별

CMEK 구성 오류를 찾아 확인하려면 다음 안내를 따르세요.

  1. Google Cloud Console로 이동합니다.

    Google Cloud Console로 이동

  2. 암호화 키가 포함된 클라우드 프로젝트를 선택합니다.

    다음 명령어를 실행하여 프로젝트 ID를 식별할 수 있습니다.

    gcloud logging cmek-settings describe --organization=ORGANIZATION_ID
    
    

    이 명령어를 실행하면 다음이 반환됩니다.

     kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY
     serviceAccountId: SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com
     

    kmsKeyName 필드의 값에는 키의 프로젝트 ID가 포함됩니다.

  3. Cloud Console에서 활동 탭을 선택합니다.

  4. Cloud Logging Cloud Logging CMEK 구성 오류 알림을 확인하세요.

    각 오류 알림에는 문제를 완화하기 위해 취할 수 있는 단계가 포함되어 있습니다.

    오류 권장사항
    암호화 키 권한이 거부되었습니다. 클라우드 프로젝트와 연관된 로깅 서비스 계정에 지정된 Cloud KMS 키로 작업을 수행하기 위한 IAM 권한이 부족합니다. 오류나 암호화/복호화 권한 부여의 안내에 따라 적절한 IAM 권한을 부여하세요.
    암호화 키가 사용 중지되었습니다. 지정된 Cloud KMS 키가 사용 중지되었습니다. 오류의 안내에 따라 키를 다시 사용 설정합니다.
    암호화 키가 폐기되었습니다. 지정된 Cloud KMS 키가 폐기되었습니다. 오류나 Cloud KMS 키 구성의 안내에 따라 다른 키로 CMEK 암호화를 구성하세요.

키 사용성 확인

키의 사용성을 확인하려면 다음 명령어를 실행하여 모든 키를 나열합니다.

gcloud kms keys list \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING

이 명령어는 각 키에 대한 정보를 표 형식으로 반환합니다. 출력의 첫 번째 줄은 열 이름 목록입니다.

NAME PURPOSE ...

명령어 결과에 Cloud KMS CryptoKey가 ENABLED으로 표시되고 키의 용도가 대칭적 암호화인지 확인합니다. PURPOSE 열에는 ENCRYPT_DECRYPT가 포함되고 PRIMARY_STATE 열에는 ENABLED가 포함되어 있어야 합니다.

필요하면 새 키를 만듭니다.

권한 구성 확인

조직의 CMEK 설정과 연결된 서비스 계정에는 반드시 구성된 키에 대한 Cloud KMS CryptoKey 암호화/복호화 역할이 있어야 합니다.

키의 Cloud IAM 정책을 나열하려면 다음 명령어를 실행합니다.

gcloud kms keys get-iam-policy KMS_KEY_NAME

필요하면 Cloud KMS CryptoKey 암호화/복호화 역할이 포함된 서비스 계정을 키에 추가합니다.