고객 관리 암호화 키 사용

기본적으로 Cloud Tasks는 저장 데이터를 암호화합니다. Google Cloud는 사용자의 추가 작업 없이 이 기본 암호화를 관리합니다.

데이터를 보호하는 키와 관련된 특정 규정 준수 또는 규제 요구사항이 있으면 Cloud Spanner에 고객 관리 암호화 키(CMEK)를 사용할 수 있습니다. 태스크 및 관련 저장 데이터(본문 및 헤더)는 사용자만 액세스할 수 있는 암호화 키를 사용하여 보호되며 Cloud Key Management Service(Cloud KMS)를 사용하여 제어 및 관리할 수 있습니다.

CMEK로 보호되는 대상

Cloud Tasks에서 CMEK를 사용 설정하면 리전에 CMEK를 사용 설정합니다. 사용 설정하면 해당 리전에서 생성된 태스크의 본문 및 헤더가 저장 시 키로 보호됩니다. CMEK가 사용 설정된 상태에서 태스크가 생성되고 나중에 키를 사용 중지 또는 삭제하거나, CMEK를 사용 중지하여 키가 비활성화된 경우 태스크는 키로 암호화되지만 실행할 수 없습니다.

다음과 같은 경우 태스크는 CMEK로 보호되지 않습니다.

  • CMEK를 사용 설정하기 전에 태스크를 만들었습니다.
  • CMEK가 사용 설정된 리전에 태스크가 없습니다.
  • 태스크가 호환성 제한사항의 영향을 받습니다.

호환성 제한사항

CMEK와 Cloud Tasks 통합은 다음을 지원하지 않습니다.

  • 4.0.0 이하 google-gax 버전: Node.js용 NPM 패키지 google-gax4.0.0 이하 버전에서 제한적으로 지원됩니다. 이러한 버전에서 CMEK는 us-central1 리전에서만 지원됩니다. 해당 리전에 태스크만 있는 경우에도 4.0.0 이상 버전으로 업그레이드하는 것이 좋습니다.

  • App Engine 기본 제공 Taskqueue 서비스: App Engine 기본 제공 Taskqueue 서비스를 사용하여 생성된 태스크는 사용 설정된 리전에 있더라도 CMEK로 보호되지 않습니다. CMEK를 사용 설정해도 이러한 태스크의 생성이나 작업(예: 실행 또는 삭제)은 방지되지 않습니다.

  • pull 큐: CMEK를 사용 설정하면 pull 큐에서 태스크를 만들고 실행할 수 있지만 이러한 태스크는 CMEK로 보호되지 않습니다. pull 큐는 일반적이지 않습니다. 큐가 pull 큐인지 확인하려면 터미널에서 다음 gcloud CLI 명령어를 실행합니다.

    gcloud tasks queues describe QUEUE_NAME
    

    QUEUE_NAME을 큐 이름으로 바꿉니다.

    나열된 typepull이면 큐가 pull 큐입니다. 나열된 typepush인 경우 이 제한이 큐의 태스크에 영향을 미치지 않습니다.

  • 큐 수준 라우팅: CMEK가 사용 설정된 경우 큐 수준 라우팅을 적용할 수 없습니다. 큐 수준 라우팅이 사용 설정된 경우 CMEK를 사용 설정할 수 없습니다. 큐 수준 라우팅이 사용 설정되었는지 확인하려면 다음을 수행합니다.

    1. 터미널에서 다음 gcloud CLI 명령어를 실행합니다.

      gcloud tasks queues describe QUEUE_NAME
      QUEUE_NAME을 큐 이름으로 바꿉니다.

    2. 출력에서 httpTarget 필드를 찾고 uriOverride가 설정되었는지 확인합니다. host가 지정되면 큐에 큐 수준 라우팅이 사용 설정되고 CMEK와 호환되지 않습니다. 큐 수준 라우팅을 삭제하려면 큐 수준 라우팅 업데이트 또는 삭제를 참조하세요. 출력에 host가 지정된 uriOverride가 표시되지 않으면 큐는 큐 수준 라우팅을 사용하지 않는 것입니다.

  • 태스크 TTL: CMEK가 사용 설정된 경우 task_ttl을 60일 이상으로 설정할 수 없습니다. task_ttl이 60일을 초과하도록 설정된 경우 CMEK를 사용 설정할 수 없습니다.

시작하기 전에

Cloud Tasks에서 CMEK를 사용하기 전에 다음 단계를 완료합니다.

  1. API를 사용 설정합니다.

    콘솔

    1. Enable the Cloud KMS and Cloud Tasks APIs.

      Enable the APIs

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      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.

    2. 기본 프로젝트를 설정합니다. CMEK로 보호하려는 Cloud Tasks 리소스가 포함된 프로젝트여야 합니다. Cloud KMS 리소스가 포함된 프로젝트와 같은 다른 프로젝트에서 명령어를 실행해야 하는 경우, 이 페이지의 gcloud CLI 명령어에 --project 플래그가 포함되어 있고 지정할 프로젝트를 알려줍니다.

      gcloud config set project PROJECT_ID
      

      PROJECT_ID를 Cloud Tasks 리소스가 포함된 프로젝트의 ID로 바꿉니다.

    3. gcloud 구성요소를 업데이트합니다.

      gcloud components update
      

    4. 암호화 키를 저장할 프로젝트에 Cloud KMS 및 Cloud Tasks API를 사용 설정합니다.

      gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com 
      --project=PROJECT_ID

      PROJECT_ID를 암호화 키를 저장할 프로젝트의 ID로 바꿉니다. Cloud Tasks 리소스와 동일한 프로젝트일 수 있지만 Cloud KMS 키에 대한 액세스를 제한하려면 별도의 프로젝트에서 Cloud KMS 설정을 고려하세요.

  2. Cloud KMS는 키를 사용 설정, 사용 중지 또는 Cloud Tasks 리소스에서 데이터를 암호화 및 복호화할 때 Cloud 감사 로그를 생성합니다. 프로젝트의 Cloud KMS API에 로깅이 사용 설정되어 있고, 사용 사례에 적용할 로깅별 권한 및 역할이 결정되었는지 확인합니다. 자세한 내용은 Cloud KMS 감사 로깅 정보를 참조하세요.

  3. Identity and Access Management 역할을 가져옵니다.

    Cloud Tasks에서 CMEK를 사용하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

    • CMEK를 사용 설정 또는 사용 중지합니다. roles/cloudtasks.admin
    • 사용 중인 키를 봅니다 roles/cloudtasks.viewer

    역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

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

Cloud KMS 키링 및 키 만들기

Cloud Tasks 리소스와 동일한 리전에 키링이 이미 있고 이 키와 키링을 사용하려면 이 섹션을 건너뜁니다. 그렇지 않은 경우 다음 안내에 따라 Cloud KMS 키 및 키링을 만듭니다.

  1. 키링을 만듭니다.

  2. 지정된 키링의 키를 만듭니다.

Cloud KMS 키의 ID 검색

Cloud Tasks에 CMEK를 사용 설정할 때 Cloud KMS 키의 리소스 ID가 필요합니다.

콘솔

  1. Google Cloud 콘솔에서 키 관리 페이지로 이동하여 키 인벤토리 탭을 선택합니다.

    키 인벤토리로 이동

  2. 리소스 ID를 검색할 키에 대하여 작업을 클릭합니다.

  3. 리소스 이름 복사를 클릭합니다.

    키의 리소스 ID가 클립보드에 복사됩니다. 형식은 다음과 비슷합니다.

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

gcloud

  1. 지정된 키링의 모든 키를 나열합니다.

    gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
    

    다음을 바꿉니다.

    • KEY_RING: 키링의 이름
    • LOCATION: 키링의 리전
    • PROJECT_ID: 키링이 포함된 프로젝트의 ID

    출력에는 각 키의 키 ID가 포함됩니다. 예를 들면 다음과 같습니다.

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

Cloud Tasks 서비스 에이전트에 키 액세스 권한 부여

Cloud KMS 키에 액세스할 수 있도록 Cloud Tasks 서비스 에이전트Cloud KMS CryptoKey 암호화/복호화 Identity and Access Management(IAM) 역할을 부여해야 합니다.

콘솔

  1. Google Cloud Console에서 Identity and Access Management 페이지로 이동합니다.

    IAM으로 이동

  2. Google 제공 역할 부여 포함 체크박스를 선택합니다.

  3. 필터에 cloudtasks.iam.gserviceaccount.com을 입력하여 Cloud Tasks 서비스 계정을 찾습니다.

    Cloud Tasks 서비스 계정의 형식은 service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com입니다.

  4. 주 구성원 수정 연필 아이콘을 클릭합니다.

  5. 패널이 열리면 다른 역할 추가를 클릭합니다.

  6. Cloud KMS CryptoKey 암호화/복호화 역할을 검색하고 선택합니다.

  7. 저장을 클릭합니다.

gcloud

gcloud kms keys add-iam-policy-binding KEY_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

다음을 바꿉니다.

  • KEY_ID: 키의 정규화된 리소스 ID. 이 ID를 찾는 방법은 Cloud KMS 키의 ID 검색을 참조하세요. 키 버전 번호를 포함하지 마세요. 키 버전 번호를 포함하면 이 명령어가 실패할 수 있습니다.
  • PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.

    PROJECT=$(gcloud info --format='value(config.project)')
    gcloud projects describe ${PROJECT} --format="value(projectNumber)"
    

서비스 에이전트에 roles/cloudkms.cryptoKeyEncrypterDecrypter 역할이 있는 한 CMEK가 사용 설정된 리전의 태스크가 CMEK 키를 사용하여 데이터를 암호화하고 복호화할 수 있습니다. 이 역할을 취소하거나 CMEK 키를 사용 중지하거나 폐기하면 해당 데이터에 액세스할 수 없습니다. 이 문서에서 Cloud KMS 사용 중지를 참조하세요.

Cloud Tasks에 CMEK 사용 설정

API 또는 gcloud CLI를 사용하여 CMEK를 사용 설정할 수 있습니다. Cloud Tasks의 경우 리전별로 CMEK가 사용 설정됩니다. 개별 태스크에서는 사용 설정되지 않습니다. CMEK가 Cloud Tasks의 지정된 리전에 사용 설정되면 해당 리전의 모든 태스크가 CMEK로 보호됩니다.

API

Update CMEK config 메서드를 호출하여 CMEK를 사용 설정할 수 있습니다. Cloud Tasks API는 REST API와 RPC API 모두에서 Update CMEK config 메서드를 제공합니다.

gcloud

Google Cloud CLI를 사용하여 CMEK를 사용 설정하려면 다음 명령어를 사용합니다.

gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID

다음을 바꿉니다.

  • LOCATION: Cloud Tasks 리소스의 리전
  • KEY_ID: 키의 정규화된 리소스 ID. 이 ID를 찾는 방법은 Cloud KMS 키의 ID 검색을 참조하세요. 키 버전 번호를 포함하지 마세요. 키 버전 번호를 포함하면 이 명령어가 실패할 수 있습니다.

키가 사용 설정되었는지 확인하려면 사용 중인 키 확인 섹션의 안내를 따르세요.

기존 태스크에 사용 설정

CMEK는 Cloud Tasks에 CMEK를 사용 설정하기 전에 생성된 태스크를 보호하지 않습니다. CMEK로 기존 태스크를 보호하려면 다음 안내를 따르세요.

  1. CMEK를 사용 설정합니다(CMEK 사용 설정 섹션 참조).
  2. 기존 태스크를 바꿉니다. 이 작업을 실행하는 두 가지 기본 방법은 다음과 같습니다. 가장 적합한 방법은 무엇을 중요하게 여기는지에 따라 달라집니다.

    • 지속적 실행: 지속적 실행('최소 1회' 전송)을 보장하려면 먼저 태스크를 다시 만든 다음 새 태스크가 예상대로 작동하는지 확인한 후 기존 태스크를 삭제하면 됩니다. 이전 태스크를 삭제하기 전에 이전 태스크와 새 태스크가 모두 실행될 수 있으므로 중복 실행이 발생할 수 있습니다.

    • 중복 방지: 중복 실행을 방지하려면('최대 1회' 전송) 먼저 이전 태스크를 삭제한 후 다시 만들면 됩니다. 이전 태스크를 삭제하고 새 태스크를 만드는 데 경과된 시간으로 인해 실행 손실이 발생할 수 있습니다.

사용 중인 키 식별

Cloud Tasks 리소스에 사용 중인 CMEK 키를 식별하려면 터미널에서 다음 gcloud CLI 명령어를 실행합니다.

gcloud tasks cmek-config describe --location=LOCATION

LOCATION을 Cloud Tasks 리소스의 리전으로 바꿉니다.

출력이 없으면 지정된 위치에 CMEK가 구성되지 않은 것입니다.

Cloud Tasks에 CMEK 사용 중지

API 또는 gcloud CLI를 사용하여 CMEK를 사용 중지할 수 있습니다. Cloud Tasks의 경우 리전별로 CMEK가 사용 중지됩니다. 개별 태스크에서는 사용 중지되지 않습니다. CMEK가 Cloud Tasks의 지정된 리전에 사용 중지되면 해당 리전의 태스크가 CMEK로 보호되지 않습니다.

CMEK를 사용 중지하면 이전에 만든 태스크가 아니라 나중에 생성되는 태스크에 영향을 줍니다.

  • 새 태스크: CMEK로 보호되지 않음
  • 기존 태스크: CMEK를 사용 설정한 동안 생성된 태스크는 암호화된 상태로 유지되며 Cloud KMS 키가 활성 상태로 유지되는 한 계속 실행됩니다.

API

CMEK를 사용 중지하려면 Update CMEK config 메서드를 호출하고 Cloud KMS 키를 빈 문자열로 바꿔서 삭제합니다. Cloud Tasks API는 REST API와 RPC API 모두에서 Update CMEK config 메서드를 제공합니다.

gcloud

Google Cloud CLI를 사용하여 CMEK를 사용 중지하려면 다음 명령어를 사용합니다.

gcloud tasks cmek-config update --location=LOCATION --clear-kms-key

다음을 바꿉니다.

  • LOCATION: Cloud Tasks 리소스의 리전입니다.

Cloud KMS 삭제

태스크에 대한 데이터 액세스 권한을 취소하려면 Cloud KMS를 삭제하면 됩니다. 다음 세 가지 방법을 사용할 수 있습니다.

  • 고객 관리 암호화 키를 사용 중지합니다. CMEK 키를 사용 중지하면 키가 사용 중지된 상태에서 해당 키 버전으로 보호되는 모든 데이터에 대한 액세스가 정지됩니다. 사용 중지된 키로 태스크에 액세스하거나 태스크를 만들 수 없습니다. 키가 사용 중지된 상태에서 CMEK로 보호되는 태스크를 실행하려고 하면 Cloud Logging에 UNKNOWN 오류가 발생합니다. 원하는 경우 나중에 키를 다시 사용 설정할 수 있습니다. 고객 관리 암호화 키를 사용 중지한 후 변경사항이 적용되는 데 최대 5분이 걸릴 수 있습니다.

  • 고객 관리 암호화 키를 폐기합니다. CMEK 키를 폐기하면 이 키 버전으로 보호되는 모든 데이터에 대한 액세스가 영구적으로 정지됩니다. 폐기된 키로 태스크에 액세스하거나 태스크를 만들 수 없습니다. CMEK가 사용 설정된 상태에서 태스크를 만들고 나중에 키를 삭제하면 태스크는 키로 암호화되지만 실행할 수 없습니다. 태스크 실행이 시도되면 Cloud Logging이 UNKNOWN 오류를 로깅합니다. 고객 관리 암호화 키를 폐기하면 변경사항이 적용되는 데 최대 5분이 걸릴 수 있습니다.

  • Cloud Tasks 서비스 에이전트에서 cloudkms.cryptoKeyEncrypterDecrypterIAM 역할을 취소합니다. 그러면 CMEK를 사용한 암호화를 지원하는 Google Cloud 프로젝트의 모든 태스크에 영향을 줍니다. CMEK 통합 작업을 새로 만들거나 CMEK로 암호화된 리소스를 볼 수 없습니다.

이러한 작업은 즉시 액세스 취소를 보장하지는 않지만 일반적으로 IAM 변경 사항은 더 빠르게 적용됩니다. 자세한 내용은 Cloud KMS 리소스 일관성액세스 변경 전파를 참조하세요.

가격 책정

이 통합은 Google Cloud 프로젝트에 비용이 청구되는 키 작업 이외의 추가 비용을 발생시키지 않습니다. 현재 가격 책정 관련 정보는 Cloud KMS 가격 책정을 참조하세요.