Confidential Google Kubernetes Engine 노드로 사용 중인 워크로드 데이터 암호화


이 페이지에서는 Confidential Google Kubernetes Engine 노드를 사용하여 노드 및 워크로드에서 사용 중 데이터 암호화를 시행하는 방법을 보여줍니다.

개요

Confidential GKE Node는 Compute Engine 컨피덴셜 VM을 기반으로 구축되어 사용 중인 VM의 메모리 콘텐츠를 암호화하는 AMD Secure Encryption Virtualization(SEV)을 사용합니다. 사용 중 암호화는 엔드 투 엔드 암호화의 세 가지 상태 중 하나입니다.

클러스터 또는 노드 풀에서 Confidential GKE Node를 사용 설정하면 컨피덴셜 노드에서 실행 중인 워크로드의 데이터가 사용 중 암호화됩니다. 제어 영역에 대한 가시성을 위해서는 액세스 투명성을 사용합니다.

다음 중 하나를 수행할 때 Confidential GKE Node를 사용 설정할 수 있습니다.

  • 새 클러스터 만들기
  • 새 노드 풀 만들기
  • 기존 노드 풀 업데이트

기존 클러스터를 업데이트하여 클러스터 수준의 Confidential GKE Node 설정을 변경할 수 없습니다.

다음 표에서는 클러스터 수준 또는 노드 풀 수준에서 Confidential GKE Node를 사용 설정할 때 적용되는 GKE 동작을 보여줍니다.

Confidential GKE Node 설정 구성 방법 동작
클러스터 수준 새 클러스터 만들기 모든 노드 풀의 클러스터에 있는 모든 노드는 Confidential GKE Node를 사용합니다. 다음을 수행할 수 없습니다.
  • 클러스터의 새 또는 기존 노드 풀에서 Confidential GKE Node 사용 중지
  • 클러스터에서 Confidential GKE Node 사용 중지
  • 기존 클러스터에서 Confidential GKE Node 사용 설정
노드 풀 수준
  • 새 노드 풀 만들기
  • 기존 노드 풀 업데이트
이 기능이 클러스터 수준에서 사용 중지된 경우에만 노드 풀에 Confidential GKE Node를 구성할 수 있습니다.

가격 책정

Compute Engine 컨피덴셜 VM 비용 이외에 Confidential GKE Node 배포에는 추가 비용이 들지 않습니다. 하지만 Confidential GKE Node는 표준 노드보다 시작 시 로그 데이터를 약간 더 생성할 수 있습니다. 로그 가격 책정에 대한 자세한 내용은 Google Cloud Observability 가격 책정을 참조하세요.

사용 가능 여부

Confidential GKE Node는 다음과 같은 경우에 제공됩니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

클러스터에서 Confidential GKE Node 사용 설정

gcloud CLI나 Google Cloud 콘솔을 사용하여 Confidential GKE Node가 사용 설정된 새 클러스터를 만들 수 있습니다. 클러스터 수준에서 Confidential GKE Node를 사용 설정하면 클러스터의 모든 노드가 컨피덴셜 VM이 됩니다.

gcloud

새 클러스터를 만들 때 gcloud CLI에서 --enable-confidential-nodes 옵션을 지정합니다.

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes

다음을 바꿉니다.

  • CLUSTER_NAME: 새 클러스터의 이름
  • MACHINE_TYPE: 클러스터의 기본 노드 풀에 대한 머신 유형으로, N2D 머신 유형 또는 C2D 머신 유형이어야 합니다.

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭합니다.

  3. 표준 섹션에서 구성을 클릭합니다.

  4. 탐색창의 클러스터에서 보안을 클릭합니다.

  5. Confidential GKE Node 사용 설정 체크박스를 선택합니다.

  6. 필요에 따라 클러스터를 구성합니다.

  7. 만들기를 클릭합니다.

리전별 클러스터 만들기에 대한 자세한 내용은 클러스터 만들기를 참조하세요.

Confidential GKE Node로 클러스터를 만든 후 이 클러스터에 생성되는 모든 노드 풀은 컨피덴셜 노드만 사용할 수 있습니다. Confidential GKE Node가 사용 설정된 클러스터에 일반 노드 풀을 만들 수 없습니다. 또한 클러스터 수준에서 Confidential GKE Node를 사용 설정하면 개별 노드 풀에서 Confidential GKE Node를 중지할 수 없습니다.

노드 풀에서 Confidential GKE Node 사용 설정

클러스터 수준에서 Confidential GKE Node가 중지된 경우 특정 노드 풀에서 Confidential GKE Node를 사용 설정할 수 있습니다.

새 노드 풀 만들기

Confidential GKE Node를 사용 설정하여 새 노드 풀을 만들려면 다음 명령어를 실행합니다.

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes

다음을 바꿉니다.

  • NODE_POOL_NAME: 새 노드 풀의 이름입니다.
  • CLUSTER_NAME: 클러스터의 이름입니다.
  • MACHINE_TYPE: 노드 풀의 머신 유형으로, N2D 머신 유형 또는 C2D 머신 유형이어야 합니다.

기존 노드 풀 업데이트

N2D 머신 유형 또는 C2D 머신 유형을 사용하는 기존 노드 풀에서 Confidential GKE Node를 사용 설정할 수 있습니다. 다음 명령어를 실행합니다.

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-confidential-nodes

다음을 바꿉니다.

  • NODE_POOL_NAME: 노드 풀의 이름입니다.
  • CLUSTER_NAME: 클러스터 이름입니다.

Confidential GKE Node가 사용 설정되어 있는지 확인

클러스터

gcloud CLI 또는 Google Cloud 콘솔을 사용해서 클러스터가 Confidential GKE Node를 사용 중인지 확인할 수 있습니다.

gcloud

클러스터를 설명합니다.

gcloud container clusters describe CLUSTER_NAME

Confidential GKE Node가 사용 설정되면 명령어 출력에 다음 줄이 포함됩니다.

confidentialNodes:
  enabled: true

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 검사할 클러스터의 이름을 클릭합니다.

  3. 보안Confidential GKE Node 필드에서 Confidential GKE Node가 사용 설정되어 있는지 확인합니다.

노드 풀

노드 풀에서 Confidential GKE Node를 사용 중인지 확인하려면 다음 명령어를 실행합니다.

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME

Confidential GKE Node가 사용 설정되면 출력은 다음과 비슷합니다.

confidentialNodes:
  enabled: true

노드

특정 노드의 기밀성을 검증하려면 다음을 수행하면 됩니다.

  1. AMD SEV가 사용 설정되었는지 검증
  2. Cloud Monitoring을 사용하여 컨피덴셜 VM의 유효성 검사

Confidential GKE Node에서 애플리케이션 실행

컨피덴셜 컴퓨팅에 대한 Google의 접근 방식은 기존 애플리케이션에 대해 힘들이지 않고 리프트 앤 시프트를 사용 설정하는 것입니다. 오늘 실행하는 GKE 워크로드가 코드 변경 없이 Confidential GKE Node에서 실행될 수 있습니다.

선택적으로 워크로드가 Confidential GKE Node 클러스터에서만 실행되도록 선언적으로 표시하려면 cloud.google.com/gke-confidential-nodes 노드 선택기를 사용할 수 있습니다. 다음은 이 선택기를 사용하는 예시 포드 사양입니다.

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: my-confidential-app
    image: us-docker.pkg.dev/myproject/myrepo/my-confidential-app
  nodeSelector:
    cloud.google.com/gke-confidential-nodes: "true"

조직 정책 제약조건 설정

조직 정책 제약조건을 정의하여 조직 전체에서 생성된 모든 VM 리소스가 컨피덴셜 VM 인스턴스인지 확인할 수 있습니다. GKE의 경우 비컨피덴셜 컴퓨팅 제한 제약조건을 맞춤설정하여 모든 새 클러스터가 Confidential GKE Node를 사용 설정한 상태로 생성되도록 할 수 있습니다. 조직 정책 제약조건을 적용할 때 거부 목록에 container.googleapis.com API 서비스 이름을 추가합니다. 예를 들면 다음과 같습니다.

gcloud resource-manager org-policies deny \
    constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
    --project=PROJECT_ID

PROJECT_ID를 프로젝트 ID로 바꿉니다.

하이퍼디스크 균형의 비밀 모드용 PersistentVolume 만들기

처리량 또는 IOPS에 허용되는 값에 대한 안내는 하이퍼디스크 볼륨의 성능 수준 계획을 참조하세요.

다음 예시는 각 하이퍼디스크 유형에 대해 하이퍼디스크 균형 StorageClass의 비밀 모드를 만드는 방법을 보여줍니다.

하이퍼디스크 균형

  1. confidential-hdb-example-class.yaml이라는 파일에 매니페스트를 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
      enable-confidential-storage: true
      disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
    

    다음을 바꿉니다.

    • KMS_PROJECT_ID: Cloud KMS 키를 소유하는 프로젝트
    • REGION: 디스크가 있는 리전
    • KEY_RING: 키가 포함된 키링의 이름
    • HSM_KEY_NAME: 디스크를 암호화하는 데 사용된 HSM 키의 이름
  2. StorageClass를 만듭니다.

    kubectl create -f hdb-example-class.yaml
    
  3. 하이퍼디스크 균형 볼륨에 비밀 모드를 사용하는 GKE용 하이퍼디스크 영구 볼륨 신청을 만듭니다.

클러스터에서 사용할 수 있는 StorageClass의 이름을 찾으려면 다음 명령어를 실행합니다.

kubectl get sc

제한사항

Confidential GKE Node에는 다음과 같은 제한사항이 있습니다.

라이브 마이그레이션 제한사항

특정 Compute Engine 컨피덴셜 VM 머신 유형은 라이브 마이그레이션을 지원하여 호스트 유지보수 이벤트 시 발생할 수 있는 워크로드 중단을 최소화합니다. 라이브 마이그레이션은 다음 GKE 버전에서 수행됩니다.

  • 1.27.10-gke.1218000 이상
  • 1.28.6-gke.1393000 이상
  • 1.29.1-gke.1621000 이상

라이브 마이그레이션이 추가될 때 노드 풀에서 이미 지원되는 버전을 실행 중이었다면 동일한 버전 또는 다른 지원되는 버전으로 노드 풀을 수동으로 업그레이드합니다. 노드를 업그레이드하면 노드가 다시 생성되고 새 노드에서 라이브 마이그레이션이 사용 설정됩니다.

라이브 마이그레이션을 지원하는 Compute Engine 머신 유형에 대한 자세한 내용은 지원되는 구성을 참조하세요.

라이브 마이그레이션을 지원하지 않는 노드에서 호스트 유지보수 이벤트가 발생하면 노드가 NotReady 상태로 전환됩니다. 포드를 실행하면 노드가 다시 준비될 때까지 중단이 발생합니다. 유지보수하는 데 5분이 넘으면 GKE가 다른 노드에서 포드를 다시 만들려고 할 수 있습니다.

Confidential GKE Node 사용 중지

Confidential GKE Node를 사용 설정한 노드 풀에서만 Confidential GKE Node를 중지할 수 있습니다. Confidential GKE Node로 클러스터를 만든 경우에는 이 기능을 중지할 수 없습니다. 노드 풀에서 Confidential GKE Node를 중지하려면 다음 명령어를 실행합니다.

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --no-enable-confidential-nodes

다음 단계