고객 관리 암호화 키 사용

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

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

CMEK로 보호되는 대상

워크플로를 배포할 때 Cloud KMS 키를 지정할 수 있습니다. 이 키는 워크플로 및 실행을 암호화하는 데 사용됩니다.

  • 워크플로에는 유효한 워크플로 정의가 포함된 소스 파일이 필요합니다. 이 소스 파일은 키를 사용하여 암호화됩니다.

  • 워크플로 실행은 현재 워크플로 정의(특정 워크플로 버전)를 실행합니다. 배포 시 워크플로 버전과 연결된 키를 사용하면 컴파일된 워크플로는 물론 저장된 실행 입력, 출력, 런타임 데이터가 암호화됩니다. 여기에는 실행 인수, 결과, 오류, 예외는 물론 전송된 Eventarc 이벤트, 콜백, HTTP 요청 및 응답이 포함됩니다.

시작하기 전에

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

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

    콘솔

    1. API Cloud KMS and Workflows 사용 설정

      API 사용 설정

    gcloud

    1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

      Cloud Shell 활성화

      Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

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

Cloud KMS 키링 및 키 만들기

새 키링을 만들거나 기존 키링을 사용할 수 있습니다. 키링 내에서 새 키를 추가하거나 기존 키를 사용할 수 있습니다.

  1. 키링을 만듭니다.

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

Cloud KMS 키의 리소스 ID 검색

워크플로에 CMEK를 사용 설정할 때 Cloud KMS 키의 리소스 ID가 필요합니다. 이 문서에서 워크플로에 CMEK 사용 설정을 참조하세요.

콘솔

  1. Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.

    키 관리로 이동

  2. 키가 포함된 키링을 클릭합니다.

  3. 리소스 ID를 검색할 키에 대하여 더 보기를 클릭합니다.

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

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

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    
  5. 키에는 0개 이상의 키 버전이 있습니다. 키 버전의 리소스 ID는 키 ID, 슬래시(/) 및 버전 ID입니다. 키의 모든 버전을 나열하려면 다음 안내를 따르세요.

    1. 키 이름을 클릭합니다.
    2. 특정 버전의 경우 더보기를 클릭합니다.
    3. 리소스 이름 복사를 클릭합니다.

gcloud

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

    gcloud kms keys list --keyring RING_NAME --location LOCATION
    

    다음을 바꿉니다.

    • RING_NAME: 키링의 이름
    • LOCATION: 키링의 리전

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

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
  2. 키에는 0개 이상의 키 버전이 있습니다. 키 버전의 리소스 ID는 키 ID, 슬래시(/) 및 버전 ID입니다. 키의 모든 버전을 나열합니다.

    gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
    

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

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
    

Workflows 서비스 에이전트에 키에 대한 액세스 권한 부여

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

콘솔

콘솔을 통해 워크플로에 CMEK를 사용 설정하면 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화 역할을 부여하라는 메시지가 표시됩니다. 자세한 내용은 이 문서의 워크플로에 CMEK 사용 설정을 참조하세요.

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring RING_NAME \
    --location LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

다음을 바꿉니다.

  • KEY_NAME: 키의 이름입니다. my-key).
  • RING_NAME: 키링의 이름입니다. 예: my-keyring
  • LOCATION: 키의 위치입니다. 예를 들면 us-central1입니다.
  • PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.

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

서비스 에이전트에 roles/cloudkms.cryptoKeyEncrypterDecrypter 역할이 있는 경우 프로젝트 워크플로는 CMEK 키를 사용하여 데이터를 암호화하고 복호화할 수 있습니다. 이 역할을 취소하거나 CMEK 키를 사용 중지하거나 폐기하면 해당 데이터에 액세스할 수 없습니다. 이 문서에서 Cloud KMS 사용 중지를 참조하세요.

워크플로에 CMEK 사용 설정

워크플로를 만들거나 나중에 업데이트할 때는 워크플로에서 데이터 암호화에 사용해야 하는 Cloud KMS 키를 지정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. 업데이트할 워크플로의 이름을 클릭합니다.

    Workflows 세부정보 페이지가 나타납니다.

  3. 수정을 클릭합니다.

  4. 고객 관리 암호화 키(CMEK)를 선택합니다.

  5. 고객 관리 키 선택 목록에서 Cloud KMS 키를 선택하거나 필터링합니다.

  6. 선택사항: 키의 리소스 이름을 수동으로 입력하려면 고객 관리 키 선택 목록에서 수동으로 키 입력을 클릭하고 지정된 형식의 키 리소스 이름을 입력합니다.

  7. 메시지가 표시되면 workflows.serviceAgent 역할을 가진 Workflows 서비스 계정에 cloudkms.cyptoKeyEncrypterDecrypter 역할을 부여합니다.

  8. 다음을 클릭합니다.

  9. 변경사항을 저장하고 업데이트된 워크플로를 배포하려면 배포를 클릭합니다.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --kms-key=KEY \
    --location LOCATION \
    --service-account=SERVICE_ACCOUNT

다음을 바꿉니다.

  • WORKFLOW_NAME: 워크플로의 이름입니다.
  • SOURCE_FILE: YAML 파일의 yaml 파일 확장자 또는 JSON 파일의 json 파일 확장자가 있는 워크플로 소스 파일입니다(예: myWorkflow.yaml).
  • KEY: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME 형식의 키 리소스 ID입니다. 키 ID를 검색할 수 있습니다.

  • LOCATION: 워크플로의 위치

  • SERVICE_ACCOUNT: 워크플로가 다른 Google Cloud 서비스에 액세스하기 위해 사용할 서비스 계정입니다(예: SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com). 필요한 리소스에 액세스하는 데 필요한 최소 권한이 포함된 서비스 계정을 사용하는 것이 좋습니다. 비워두면 기본 서비스 계정이 사용됩니다. 자세한 내용은 워크플로에 Google Cloud 리소스에 대한 액세스 권한 부여를 참조하세요.

다음에 유의하세요.

  • 워크플로 버전 및 실행은 배포 시 지정된 키로 암호화됩니다. 이전 키로 암호화된 리소스는 이전 키를 사용해 암호화된 상태로 유지됩니다. 워크플로가 나중에 수정되고 새 키가 지정되면 워크플로 버전은 새 키로 암호화되고, 이후의 실행은 새 키를 사용합니다.
  • 이전에 CMEK로 암호화되지 않은 워크플로 버전과 실행은 암호화되지 않은 상태로 유지됩니다.
  • 워크플로 버전에 대해 CMEK를 사용 중지하면 후속 실행이 CMEK 암호화 없이 생성됩니다. 이 문서에서 워크플로에 CMEK 사용 중지를 참조하세요. 기존 워크플로 버전 및 실행은 이전의 암호화된 키로 암호화된 상태로 유지됩니다.

Cloud KMS 통합 확인

워크플로의 메타데이터를 표시하여 CMEK 통합을 확인할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. 확인하려는 워크플로의 이름을 클릭합니다.

    Workflows 세부정보 페이지가 나타납니다.

  3. 세부정보 탭을 클릭합니다.

    암호화 값은 워크플로 및 실행을 보호하는 데 사용되는 Cloud KMS 키의 리소스 ID를 표시합니다.

gcloud

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

출력은 다음과 비슷하게 표시됩니다.

createTime: '2022-08-10T19:57:58.233177709Z'
cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME
revisionCreateTime: '2022-11-18T19:44:04.933633237Z'
revisionId: 000009-8be
serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com
sourceContents:
[...]
state: ACTIVE
updateTime: '2022-11-18T19:44:05.171793128Z'

cryptokeyName 값은 워크플로와 실행을 보호하는 데 사용되는 Cloud KMS 키의 리소스 ID입니다.

워크플로에 CMEK 사용 중지

연결된 Cloud KMS 키를 더 이상 사용하지 않도록 워크플로의 CMEK를 사용 중지할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. 업데이트할 워크플로의 이름을 클릭합니다.

    Workflows 세부정보 페이지가 나타납니다.

  3. 수정을 클릭합니다.

  4. 고객 관리 암호화 키(CMEK) 라디오 버튼을 삭제하려면 Google 관리 암호화 키를 선택합니다.

  5. 다음을 클릭합니다.

  6. 변경사항을 저장하고 업데이트된 워크플로를 배포하려면 배포를 클릭합니다.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --clear-kms-key \
    --service-account=SERVICE_ACCOUNT

이렇게 하면 현재 워크플로 버전에 대한 CMEK가 사용 중지되고 이후의 모든 실행이 CMEK 암호화 없이 생성됩니다. 기존 워크플로 버전 및 실행은 이전의 암호화된 키로 암호화된 상태로 유지됩니다.

Cloud KMS 사용 중지

워크플로 또는 워크플로 실행에 대한 데이터 액세스 권한을 취소하려면 다음 중 하나를 수행하여 Cloud KMS를 사용 중지합니다.

  • 고객 관리 암호화 키의 기본 키 버전을 사용 중지하거나 폐기합니다. CMEK 키 버전을 사용 중지하면 이 키 버전으로 보호되는 모든 데이터에 대한 액세스가 정지됩니다. 키 버전 폐기는 이 작업에 영구적으로 포함됩니다. 둘 다 특정 키와 연결된 워크플로 및 워크플로 실행에만 영향을 미칩니다. 새 실행을 만들거나 사용 중지 또는 폐기된 키와 연결된 리소스를 볼 수 없습니다. 활성 실행은 해당 오류 메시지와 함께 실패합니다.

  • Workflows 서비스 에이전트에서 cloudkms.cryptoKeyEncrypterDecrypterIAM 역할을 취소합니다. 그러면 CMEK를 사용한 암호화를 지원하는 Google Cloud 프로젝트의 모든 워크플로에 영향을 줍니다. CMEK 통합 워크플로 및 실행을 새로 만들거나 CMEK로 암호화된 리소스를 볼 수 없습니다. 활성 실행은 해당 오류 메시지와 함께 실패합니다.

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

문제 해결

Workflows에서 Cloud KMS를 사용할 때 오류가 발생할 수 있습니다. 다음 표는 다양한 문제와 해결 방법을 설명합니다.

문제 설명
cloudkms.cryptoKeyVersions.useToEncrypt 권한이 거부됨 제공된 Cloud KMS 키가 없거나 권한이 올바르게 구성되지 않았습니다.

솔루션:

키 버전이 사용 설정되지 않음 제공된 Cloud KMS 키가 사용 중지되었습니다.

솔루션: Cloud KMS 키 버전을 다시 사용 설정합니다.

키링 리전이 보호할 리소스와 일치하지 않음 제공된 KMS 키링 리전은 워크플로의 리전과 다릅니다.

솔루션 동일한 리전에서 Cloud KMS 키링과 보호된 워크플로를 사용합니다. (다른 프로젝트에 있을 수 있습니다.) 자세한 내용은 Cloud KMS 위치Workflows 위치를 참조하세요.

Cloud KMS 할당량 한도를 초과함 Cloud KMS 요청의 할당량 한도에 도달했습니다.

솔루션: Cloud KMS 호출 수를 제한하거나 할당량 한도를 늘립니다. 자세한 내용은 Cloud KMS 할당량을 참조하세요.

사용할 수 없는 키 상태의 처리 방법

특정 이유로 Cloud KMS를 사용할 수 없는 경우 Workflows가 Cloud KMS에서 키 상태를 검색하지 못할 수 있습니다.

키 상태를 사용할 수 없는 경우 워크플로 또는 실행에서 stateError 필드에 state: UNAVAILABLE 값과 관련 세부정보를 반환합니다.

워크플로 실행 중에 키 상태를 사용할 수 없게 되면(예: 콜백 중에 권한이 취소됨) 런타임 오류가 발생하여 state: FAILED 값 및 관련 세부정보가 error 필드에 반환됩니다.

가격 책정

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