CMEK로 데이터 보호

Cloud Run 함수는 기본적으로 저장된 고객 콘텐츠를 암호화합니다. Cloud Run 함수는 사용자의 추가 작업 없이 자동으로 암호화를 처리합니다. 이 옵션을 Google 기본 암호화라고 부릅니다.

암호화 키를 제어하려면 Cloud Run 함수를 포함한 CMEK 통합 서비스와 함께 Cloud KMS에서 고객 관리 암호화 키(CMEK)를 사용하면 됩니다. Cloud KMS 키를 사용하면 보호 수준, 위치, 순환 일정, 사용 및 액세스 권한, 암호화 경계를 관리할 수 있습니다. Cloud KMS를 사용하면 감사 로그를 보고 키 수명 주기를 제어할 수도 있습니다. Google에서 데이터를 보호하는 대칭 키 암호화 키(KEK)를 소유하고 관리하는 대신 사용자가 Cloud KMS에서 이러한 키를 제어하고 관리할 수 있습니다.

CMEK로 리소스를 설정한 후 Cloud Run 함수 리소스에 액세스하는 환경은 Google 기본 암호화를 사용하는 것과 유사합니다. 암호화 옵션에 대한 자세한 내용은 고객 관리 암호화 키(CMEK)를 참조하세요.

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

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

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

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

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

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

Cloud Run Functions용 CMEK를 설정하려면 다음을 수행하세요.

  • 키에 필요한 서비스 계정에 대한 액세스 권한을 부여합니다.

    • 모든 함수의 경우 Cloud Run Functions, Artifact Registry, Cloud Storage 서비스 계정에 키에 대한 액세스 권한을 부여해야 합니다.

    • 이벤트 기반 Cloud Run 함수의 경우 Cloud RunEventarc에 대한 CMEK 설정도 완료해야 합니다.

  • CMEK로 보호되는 Artifact Registry 저장소를 만들어 함수 이미지를 저장합니다.

  • 함수에 CMEK를 사용 설정합니다.

  • 선택적으로 모든 새 기능이 CMEK와 강제로 호환되도록 하려면 CMEK 조직 정책을 사용 설정합니다.

이러한 단계는 아래에 자세히 설명되어 있습니다.

시작하기 전에

  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를 사용 설정하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔의 Cloud Run 함수 페이지로 이동합니다.
    Cloud Run 함수 페이지로 이동

  2. CMEK를 사용 설정할 함수의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드...를 클릭하여 고급 구성 옵션을 펼칩니다.

  5. 보안 및 이미지 저장소 탭을 선택합니다.

  6. 암호화 섹션에서 고객 관리 암호화 키(CMEK)를 선택합니다.

  7. 드롭다운에서 선택한 키를 선택합니다.

  8. 컨테이너 위치에서 고객 관리 Artifact Registry를 선택합니다.

  9. Artifact Registry 드롭다운에서 CMEK로 보호되는 저장소를 선택합니다.

  10. 다음을 클릭합니다.

  11. 배포를 클릭합니다.

gcloud

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

gcloud functions deploy FUNCTION \
[--gen2] \
--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가 사용 설정되었습니다.

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

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

CMEK 보호 테스트

CMEK 보호가 작동하는지 확인하려면 함수에 CMEK를 사용 설정하는 데 사용한 키를 중지한 후 함수를 트리거해 보면 됩니다.

  1. 함수를 보호하는 데 사용된 키를 중지합니다.

  2. 이 함수와 연결된 소스 코드를 보려고 시도합니다. 해당 시도가 실패해야 합니다.

  3. CMEK 보호 함수를 트리거해 봅니다. 해당 시도가 실패해야 합니다.

  4. CMEK 보호가 작동하는지 확인했으면 키를 사용 설정합니다.

이제 함수의 CMEK 보호가 확인되었습니다.

다음 단계