CMEK로 데이터 보호

Cloud Key Management Service 고객 관리 암호화 키(CMEK)를 사용하여 Cloud Functions 및 관련 저장 데이터를 보호할 수 있습니다. 이러한 키는 Cloud KMS를 통해 생성 및 관리되며 HSM 클러스터에 또는 외부적으로 소프트웨어 키로 저장됩니다.

CMEK로 함수를 배포하면 완전히 제어되는 암호화 키를 사용하여 함수와 연결된 데이터를 보호할 수 있습니다. 이 유형의 암호화를 사용하면 금융 서비스와 같은 특정 업계의 규정 준수 요구사항을 충족할 수 있습니다. 키는 개발자가 소유하며 Google에서 이 키를 제어하지 않으므로 키가 중지되거나 삭제되면 누구도 이러한 암호화 키로 보호되는 데이터에 액세스할 수 없습니다.

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

  • 배포를 위해 업로드되고 Google이 Cloud Storage에 저장하는 빌드 프로세스에서 사용되는 함수 소스 코드
  • 다음을 포함한 함수 빌드 프로세스 결과
    • 함수 소스 코드로 빌드된 컨테이너 이미지
    • 배포되는 함수의 각 인스턴스
  • 내부 이벤트 전송 채널의 저장 데이터(1세대만)

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

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

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

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

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

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

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

    • 이벤트 기반 Cloud Functions 2세대의 경우에만 Cloud RunEventarc에 대한 CMEK 설정도 완료해야 합니다.

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

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

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

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

시작하기 전에

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

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

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

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

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

  • Cloud 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)

2세대의 경우 다음 서비스 계정에 키에 대한 액세스 권한을 추가로 부여해야 합니다.

  • 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 역할을 부여합니다.

Console

  1. Google Cloud Console의 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 Functions에 키에 대한 액세스 권한을 부여하면 함수에 CMEK를 사용 설정할 수 있습니다.

함수에 CMEK를 사용 설정하려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console의 Cloud Functions 페이지로 이동합니다.
    Cloud Functions 페이지로 이동

  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 함수 배포를 참조하세요.

함수에 CMEK가 사용 설정되었습니다.

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

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

CMEK 보호 테스트

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

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

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

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

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

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

다음 단계