로그 라우터에 고객 관리 암호화 키 사용 설정

이 페이지에서는 규정 준수 요구사항을 충족하기 위해 Cloud Logging의 로그 라우터에 고객 관리 암호화 키(CMEK)를 사용 설정하는 방법을 설명합니다. Google이 데이터를 보호하는 암호화 키를 관리하는 것이 아니라 사용자가 Cloud Key Management Service에서 암호화 키를 만들고 제어하고 관리할 수 있습니다.

암호화 옵션을 요약한 내용은 저장 데이터 암호화를 참조하세요.

로그 라우터용 CMEK

CMEK를 사용하면 저장 데이터를 암호화하는 데 사용되는 키를 제어할 수 있으며, Google Cloud 조직과 관련한 다음 요구사항을 충족할 수 있습니다.

  • 규정 준수 및 내부 제어: CMEK를 사용하여 Google Cloud 제품에 저장된 민감한 데이터 또는 규제 대상 데이터를 제어할 수 있습니다. 이러한 제어는 일반적으로 내부 규정 준수 절차로 문서화되어 있으며, 규제 당국에 공개될 수 있고 변경이 어려울 수 있습니다.

  • 고급 암호화: 조직에서 Google 기본 저장 데이터 암호화가 제공하지 않는 고급 암호화 조건(예: 빠른 키 삭제)을 필요로 할 수 있습니다. CMEK를 사용하면 Cloud KMS와의 통합을 통해 이러한 요구사항을 충족할 수 있습니다.

  • 규제 요구사항: 조직은 정부 규제(예: 수출관리규정(EAR))에 따라 민감한 자료를 관리해야 할 수 있습니다.

저장 데이터 암호화는 로그 라우터를 포함한 Google Cloud 서비스 전반에 이미 제공되어 있습니다. 현재 Cloud Logging에 저장된 로그에서 CMEK를 사용할 수 없지만, 로그 라우터에서 사용된 임시 재해 복구 파일과 Cloud Storage로 내보내는 동안 사용된 임시 파일은 CMEK를 사용해 보호할 수 있습니다. 자세한 내용은 제한사항을 참조하세요.

로그 라우터에 대한 설명은 개요를 참조하세요.

시작하기

  1. Cloud KMS를 실행할 Google Cloud 프로젝트를 만들거나 지정합니다.
  2. Cloud KMS를 실행할 Google Cloud 프로젝트에 대해 Cloud KMS API를 사용 설정합니다.
  3. Cloud KMS를 실행할 Google Cloud 프로젝트에 키링 및 키를 만듭니다.

    키의 리전 범위는 데이터의 리전 범위와 일치해야 합니다. Cloud KMS 위치에 사용 가능한 리전이 나열됩니다.

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

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

    이러한 매개변수 식별에 대한 정보는 프로젝트 식별조직 ID 가져오기를 참조하세요.

조직에 CMEK 사용 설정

시작하기 단계를 완료했으면 다음 안내에 따라 Google Cloud 조직에 CMEK를 사용 설정하세요.

암호화 및 복호화 권한 부여

적절한 서비스 계정 ID를 확인하고 Cloud KMS 키 사용에 필요한 권한을 서비스 계정에 부여하세요.

서비스 계정 ID 확인

REST API

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

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

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

gcloud

CMEK를 사용 설정할 Google Cloud 조직과 연결된 serviceAccountId를 확인하려면 다음 gcloud 명령어를 실행합니다.

gcloud alpha logging cmek-settings describe --organization=[ORGANIZATION_ID]

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

암호화/복호화 역할 할당

CMEK를 사용하려면 서비스 계정에 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 할당하여 Cloud KMS 사용 권한을 서비스 계정에 부여하세요.

REST API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.
  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]

[KMS_PROJECT_ID]는 Cloud KMS를 실행하는 Google Cloud 프로젝트의 ID로 바꾸고 [KMS_KEY_LOCATION], [KMS_KEY_RING], [KMS_KEY_RING], [KMS_KEY]는 Cloud KMS 키의 위치, 키링, 키 이름으로 바꾸세요.

Console

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

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

    오른쪽 창의 권한 탭이 활성화됩니다.

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

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

  6. 추가를 클릭합니다.

Cloud KMS 키 구성

Cloud KMS 키 이름으로 Google Cloud 조직의 CMEK 설정을 업데이트하여 조직에 이 기능을 사용 설정합니다.

[KMS_KEY_NAME]이 유효하지 않은 경우 또는 연결된 서비스 계정에 필요한 암호화/복호화 역할이 없거나 키에 대한 액세스 권한이 사용 중지된 경우 이 업데이트는 실패합니다.

REST 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 명령어를 실행합니다.

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

키 사용 설정 확인

Cloud KMS 키 이름으로 Google Cloud 조직의 CMEK 설정을 업데이트하여 CMEK가 조직에 대해 사용 설정되었는지 확인합니다.

REST API

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

  2. GET 요청을 실행하여 키 사용 설정 여부를 확인할 Google Cloud 조직과 연결된 CMEK 설정을 확인합니다. kms_key_name을 입력하면 조직에 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

키 사용 설정 여부를 확인할 Google Cloud 조직과 연결된 CMEK 설정을 가져오려면 다음 gcloud 명령어를 실행합니다. kmsKeyName을 입력하면 조직에 CMEK가 사용 설정됩니다.

gcloud alpha logging cmek-settings describe --organization=[ORGANIZATION_ID]

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

Cloud KMS 키 관리

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

Cloud KMS 키 변경

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

REST 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 명령어를 실행합니다.

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

[KMS_KEY_NAME]이 유효하지 않은 경우 또는 연결된 서비스 계정에 필요한 암호화/복호화 역할이 없거나 키에 대한 액세스 권한이 사용 중지된 경우 이 업데이트는 실패합니다.

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

언제든지 Cloud KMS 키에 대한 Logging의 액세스 권한을 취소하려면 이 키의 IAM 권한을 삭제합니다.

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

REST 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 명령어를 실행합니다.

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 사용 중지

REST 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

CMEK를 사용 중지할 조직과 연결된 serviceAccountId를 업데이트하려면 다음 gcloud 명령어를 실행합니다.

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

[KMS_KEY_NAME] 이 유효하지 않은 경우 또는 연결된 서비스 계정에 필요한 암호화/복호화 역할이 없거나 키에 대한 액세스 권한이 사용 중지된 경우 이 업데이트는 실패합니다.

키를 폐기하는 방법은 키 버전 폐기 및 복원을 참조하세요.

Cloud KMS 키 순환이 미치는 영향

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

내보내기용 CMEK

다른 대상으로 로그를 내보내는 데 로그 싱크를 사용하려면 해당 대상에 저장된 데이터를 보호하도록 CMEK를 올바르게 구성해야 합니다.

대상이 CMEK로 암호화된 경우 Cloud Storage는 로그 내보내기에 CMEK를 지원합니다. 자세한 내용은 고객 관리 암호화 키 사용을 참조하세요.

나머지 두 Logging 싱크 대상인 BigQuery와 Pub/Sub에서는 아직 Cloud Logging에서 내보낸 데이터를 보호하는 데 CMEK를 지원하지 않습니다.

제한사항

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

조직 수준 구성에만 해당

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

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

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

로그 항목이 Cloud Logging 스토리지에 기록되지 않도록 로그 항목을 제외할 수 있습니다. 자세한 안내는 제외 쿼리 사용을 참조하세요.

재해 복구 파일 사용 불가능

Logging에서 Cloud KMS 키에 액세스하지 못하면 사용자 경험이 크게 저하되고 데이터 손실이 발생할 수 있습니다. CMEK로 보호되는 임시 재해 복구 파일과 Cloud Storage로 내보내기에 사용된 임시 파일에 포함된 데이터에 더 이상 액세스할 수 없습니다.

다음과 같은 조건에서 Logging은 Cloud KMS 키를 사용하고 액세스할 수 있습니다.

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

Cloud KMS 키를 사용할 수 없게 된 경우 로그 라우터가 임시 재해 복구 파일을 작성할 수 없습니다. 이 기간 동안 처리된 데이터에는 재해 복구 파일을 사용할 수 없습니다.

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

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

Logging 클라이언트 라이브러리는 CMEK를 구성하는 명령어를 지원하지 않습니다.

가격 책정

Logging 사용량 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요. 발생 가능한 비용에 대한 자세한 내용은 가격 책정을 참조하세요.

구성 오류 문제해결

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

구성 오류 식별

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

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

    Google Cloud Console로 이동

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

    프로젝트 ID는 다음 gcloud 명령어를 통해 식별할 수 있습니다.

    gcloud alpha 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
    

    명령어 결과에 표시된 Cloud KMS 키의 전체 이름에는 kmsKeyName 필드의 프로젝트 ID가 포함됩니다.

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

  4. 선택한 프로젝트에서 Cloud Logging Stackdriver Logging CMEK 구성 오류 알림을 확인하세요.

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

오류 권장사항
암호화 키 권한이 거부되었습니다. 프로젝트와 연결된 Logging 서비스 계정에는 지정된 Cloud KMS 키에서 작동하는 데 IAM 권한이 부족합니다. 오류나 본 문서의 안내에 따라 적절한 IAM 권한을 부여하세요.
암호화 키가 사용 중지되었습니다. 지정된 Cloud KMS가 사용 중지되었습니다. 오류의 안내에 따라 키를 다시 사용 설정합니다.
암호화 키가 폐기되었습니다. 지정된 Cloud KMS가 폐기되었습니다. 오류나 본 문서의 안내에 따라 다른 키로 CMEK 암호화를 구성하세요.

문제를 해결하려면 오류 알림 메시지에 설명된 단계를 따르세요.

키 사용성 확인

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

    gcloud kms keys list 
--location=[KMS_KEY_LOCATION]
--keyring=[KMS_KEY_RING]

NAME    PURPOSE   ALGORITHM   PROTECTION_LEVEL  LABELS  PRIMARY_ID  PRIMARY_STATE
<var>[KMS_KEY_NAME]</var>  ENCRYPT_DECRYPT  GOOGLE_SYMMETRIC_ENCRYPTION  SOFTWARE  1  ENABLED

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

필요하면 새 키를 만듭니다. 자세한 안내는 위의 섹션을 참조하세요.

권한 구성 확인

조직의 CMEK 설정과 연결된 서비스 계정에는 구성된 키에 대한 Cloud KMS CryptoKey Encrypter/Decrypter IAM 역할이 있어야 합니다.

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

    gcloud kms keys get-iam-policy [KMS_KEY_NAME]
   

필요한 경우 Cloud KMS CryptoKey Encrypter/Decrypter IAM 역할이 있는 서비스 계정을 키에 추가합니다.