CMEK로 데이터 보호

이 페이지에서는 gcloud functions 명령어 또는 Cloud Functions v2 API를 사용하여 만든 함수의 고객 관리 암호화 키 (CMEK)로 데이터를 보호하는 방법을 보충 설명합니다.

수동 설정, Autokey 사용, CMEK 보호 테스트를 비롯한 CMEK에 관한 자세한 내용은 Cloud Run 문서를 참고하세요.

CMEK를 사용할 때 암호화되는 Cloud Run Functions 데이터 유형은 다음과 같습니다.

  • 배포를 위해 업로드되고 Google이 Cloud Storage에 저장하는 빌드 프로세스에서 사용되는 함수 소스 코드
  • 다음을 포함한 함수 빌드 프로세스 결과
    • 함수 소스 코드로 빌드된 컨테이너 이미지
    • 배포되는 함수의 각 인스턴스

함수 빌드 프로세스 자체는 각 빌드에 대해 고유하게 생성된 임시 키로 보호됩니다. 자세한 내용은 Cloud Build의 CMEK 규정 준수를 참조하세요. 또한 다음 사항에 유의하세요.

  • 파일 시스템 경로 또는 수정 타임스탬프와 같은 파일 메타데이터는 암호화되지 않습니다.

  • 키를 사용 중지하면 컨테이너 이미지를 배포할 수 없으며 새 인스턴스를 시작할 수 없습니다.

  • Cloud Run 함수 CMEK 보호는 Google 관리 Cloud Run 함수 리소스에만 적용됩니다. 소스 코드 저장소, 고객 프로젝트에 있는 이벤트 채널 또는 함수에서 사용하는 모든 서비스와 같이 사용자가 관리하는 데이터 및 리소스를 보호할 책임은 사용자에게 있습니다.

시작하기 전에

  1. 함수를 암호화하는 데 사용할 단일 리전 키를 만듭니다. 키를 만드는 방법은 대칭 암호화 키 만들기를 참조하세요.

  2. CMEK를 사용 설정Artifact Registry 저장소를 만듭니다. 함수에 CMEK를 사용 설정할 때 사용한 키와 동일한 키를 Artifact Registry 저장소에 사용해야 합니다.

  3. 이벤트 기반 함수의 경우 Google 채널에 CMEK 사용 설정에 설명된 추가 설정 단계를 따르세요.

서비스 계정에 키에 대한 액세스 권한 부여

모든 함수의 경우 다음 서비스 계정에 키에 대한 액세스 권한을 부여해야 합니다.

  • Cloud Run Functions 서비스 에이전트(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • Artifact Registry 서비스 에이전트(service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • Cloud Storage 서비스 에이전트 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

  • Cloud Run 서비스 에이전트(service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)

  • Eventarc 서비스 에이전트(service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com)

이러한 서비스 계정에 키에 대한 액세스 권한을 부여하려면 각 서비스 계정을 키의 주 구성원으로 추가한 후 서비스 계정에 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 부여합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Key Management Service 페이지로 이동합니다.
    Cloud KMS 페이지로 이동

  2. 선택한 키가 포함된 키링의 이름을 클릭합니다.

  3. 키 세부정보를 보려면 키 이름을 클릭합니다.

  4. 권한 탭에서 액세스 권한 부여를 클릭합니다.

  5. 새 주 구성원 필드에 앞에서 설명한 세 가지 서비스 계정의 이메일 주소를 입력하여 동시에 세 가지 계정 모두에 권한을 할당합니다.

  6. 역할 선택 메뉴에서 Cloud KMS CryptoKey 암호화/복호화를 선택합니다.

  7. 저장을 클릭합니다.

gcloud

앞에서 설명한 각 서비스 계정에 대해 다음 명령어를 실행합니다.

gcloud kms keys add-iam-policy-binding KEY \
  --keyring KEY_RING \
  --location LOCATION \
  --member serviceAccount:SERVICE_AGENT_EMAIL \
  --role roles/cloudkms.cryptoKeyEncrypterDecrypter

다음을 바꿉니다.

  • KEY: 키 이름입니다. 예를 들면 my-key입니다.

  • KEY_RING: 키링 이름입니다. 예: my-keyring

  • LOCATION: 키 위치입니다. 예: us-central1

  • SERVICE_AGENT_EMAIL: 서비스 계정의 이메일 주소입니다.

함수에 CMEK 사용 설정

CMEK를 사용 설정하여 Artifact Registry 저장소를 설정하고 Cloud Run Functions에 키에 대한 액세스 권한을 부여하면 함수에 CMEK를 사용 설정할 수 있습니다.

함수에 CMEK를 사용 설정하려면 다음 명령어를 실행합니다.

gcloud functions deploy FUNCTION \
    --kms-key=KEY \
    --docker-repository=REPOSITORY \
    --source=YOUR_SOURCE_LOCATION
    FLAGS...
 

다음을 바꿉니다.

  • FUNCTION: CMEK를 사용 설정할 함수의 이름입니다. 예를 들면 cmek-function입니다.

  • KEY: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME 형식의 정규화된 키 이름입니다.

  • REPOSITORY: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY 형식의 정규화된 Artifact Registry 저장소 이름입니다.

  • YOUR_SOURCE_LOCATION: 기존 함수에 CMEK를 사용 설정할 때는 이 매개변수를 명시적으로 지정하여 의도한 소스 코드가 다시 배포되는지 확인합니다.

  • FLAGS...: 함수를 배포(특히 배포 생성의 경우)하는 데 필요한 추가 플래그입니다. 자세한 내용은 Cloud Run 함수 배포를 참조하세요.

함수에 CMEK가 사용 설정되었습니다. 선택적으로 모든 새 함수가 CMEK와 강제로 호환되도록 하려면 CMEK 조직 정책을 사용 설정합니다.

Cloud Run Functions는 항상 CMEK 보호를 위해 키의 기본 버전을 사용합니다. 함수에 CMEK를 사용 설정할 때 사용할 특정 키 버전을 지정할 수 없습니다.

키가 폐기 또는 사용 중지되거나 키에 대한 필수 권한이 취소된 경우 해당 키로 보호되는 함수의 활성 인스턴스는 종료되지 않습니다. 이미 진행 중인 함수 실행은 계속 실행되지만 Cloud Run Functions에서 키에 액세스할 수 없으면 새 실행이 실패합니다.