etcd 및 컨트롤 플레인 부팅 디스크 암호화 키 순환


이 페이지에서는 GKE 컨트롤 플레인 권한에 대해 구성한 etcd 및 컨트롤 플레인 부팅 디스크 암호화 키를 순환하는 방법을 설명합니다. 이 페이지는 클러스터 관리자 및 보안 엔지니어를 대상으로 합니다.

이 페이지를 읽기 전에 다음 GKE 컨트롤 플레인 권한 개념을 숙지하세요.

키 순환 계획

이 페이지에서는 컨트롤 플레인에서 다음 사용자 인증 정보 구성요소를 순환하는 방법을 보여줍니다.

  • etcd 및 컨트롤 플레인 부팅 디스크의 암호화 키입니다.
  • 재해 복구에 Google Cloud 사용되는 etcd 내부 백업의 암호화 키입니다.

GKE 컨트롤 플레인 권한으로 구성한 고객 관리 인증 기관 (CA)과 서비스 계정 서명 키를 순환할 수도 있습니다. 자세한 내용은 고객 관리 컨트롤 플레인 CA 및 서명 키 순환을 참고하세요.

Cloud Key Management Service (Cloud KMS)의 키는 만료되지 않습니다. 조직에 키 순환에 관한 보안 요구사항이 있는 경우 키를 수동으로 순환하세요. 실행 중인 워크로드의 중단을 최소화하려면 이러한 키에 자동 키 순환을 구성하지 마세요.

컨트롤 플레인 부팅 디스크 및 etcd의 암호화 키를 순환하면 GKE는 새 키를 사용하여 암호화된 새 디스크를 만듭니다. 리전별 클러스터의 경우 복제된 컨트롤 플레인으로 인해 이 작업에 다운타임이 없습니다. 영역 클러스터의 경우 새 디스크를 사용할 수 있을 때까지 제어 영역을 사용할 수 없습니다.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.
  • 컨트롤 플레인 부팅 디스크 및 etcd 암호화를 사용하는 기존 클러스터가 있어야 합니다.

  • 다음 Google Cloud 프로젝트의 프로젝트 ID를 확인합니다.

    • 키 프로젝트: Cloud KMS 리소스가 포함된 프로젝트입니다.
    • 클러스터 프로젝트: GKE 클러스터가 포함된 프로젝트입니다.
  • 이 페이지에서 검증 작업을 수행하려면 Cloud Key Management Service (KMS) API에 DATA_READ 데이터 액세스 감사 로그가 사용 설정되어 있는지 확인하세요. 자세한 내용은 데이터 액세스 감사 로그 사용 설정을 참고하세요.

필수 역할 및 권한

고객 관리 CA 및 키를 순환하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

제한사항

기존 키의 새 버전으로 클러스터를 업데이트할 수는 있지만 이러한 암호화 작업에 완전히 새로운 키를 사용하도록 클러스터를 업데이트할 수는 없습니다.

GKE 서비스 에이전트에 IAM 역할 부여

부팅 디스크 및 etcd의 암호화 키를 순환하려면 키 프로젝트의 암호화 키에 대한 Kubernetes Engine KMS 암호화 키 사용자(roles/container.cloudKmsKeyUser) 역할을 클러스터 프로젝트의 GKE 서비스 에이전트에 부여합니다.

gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
    --keyring=KEYRING_NAME \
    --location=LOCATION \
    --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role=roles/container.cloudKmsKeyUser \
    --project=KEY_PROJECT_ID

다음을 바꿉니다.

  • KCP_DISK_KEY_NAME: 컨트롤 플레인 부팅 디스크 및 etcd 디스크의 암호화 키 이름
  • KEYRING_NAME: 키가 저장된 키링의 이름입니다.
  • LOCATION: 키링의 Google Cloud 위치입니다. 클러스터 위치와 같아야 합니다. 리전 목록은 Cloud KMS 위치 표에서 '리전'을 필터링하세요.
  • CLUSTER_PROJECT_NUMBER: 클러스터 프로젝트의 숫자 프로젝트 번호입니다.
  • KEY_PROJECT_ID: 키 프로젝트의 프로젝트 ID

etcd 및 컨트롤 플레인 부팅 디스크의 키 순환

  1. 부팅 디스크 및 etcd 암호화 키의 새 기본 키 버전을 만듭니다.

    gcloud kms keys versions create \
        --key=KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    변경사항이 프로젝트에 전파되는 데 최대 10분이 걸릴 수 있습니다.

  2. 클러스터 컨트롤 플레인의 현재 패치 버전을 확인합니다.

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format='value(currentMasterVersion)'
    

    다음을 바꿉니다.

    • CLUSTER_NAME: GKE 클러스터의 이름입니다.
    • LOCATION: GKE 클러스터 컨트롤 플레인의 위치입니다(예: us-central1).
  3. 클러스터 컨트롤 플레인을 이미 사용 중인 버전과 동일한 버전으로 업그레이드합니다.

    gcloud container clusters upgrade CLUSTER_NAME \
        --master \
        --location=LOCATION \
        --cluster-version=CONTROL_PLANE_VERSION \
        --project=CLUSTER_PROJECT_ID
    

    다음을 바꿉니다.

    • CONTROL_PLANE_VERSION: 이전 단계의 출력에 있는 클러스터 컨트롤 플레인의 버전입니다.
    • CLUSTER_PROJECT_ID: 클러스터 프로젝트의 프로젝트 ID입니다.

컨트롤 플레인 업그레이드 작업이 완료되면 클러스터는 새 키 버전을 사용하여 컨트롤 플레인 부팅 디스크와 모든 etcd 디스크를 암호화합니다.

etcd 내부 백업 암호화 키 순환

이 섹션에서는 재해 복구 목적으로 사용되는 etcd 내부 백업의 암호화 키를 순환하는 방법을 보여줍니다. Google Cloud 이 키의 자동 순환을 구성할 수 있지만 수동 순환을 대신 실행하는 것이 좋습니다. 키를 순환한 후 클러스터는 새 키 버전을 사용하여 새 etcd 내부 백업을 암호화합니다.

etcd 내부 백업은 기본 키 버전을 사용하며 다음 간격으로 발생합니다.

  • 영역 클러스터의 경우 30분마다
  • Autopilot 클러스터 및 리전 Standard 클러스터의 경우 10분마다

키를 순환한 후 이전 키 버전을 즉시 사용 중지하거나 삭제하지 마세요. GKE가 새 키 버전을 사용하는 새 etcd 내부 백업을 만들 수 있을 때까지 충분히 기다립니다.

  • etcd 내부 백업 암호화 키의 새 기본 키 버전을 만듭니다.

    gcloud kms keys versions create \
        --key=ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    다음을 바꿉니다.

    • ETCD_BACKUP_KEY_NAME: etcd 내부 백업 암호화 키의 이름입니다.
    • KEYRING_NAME: 키가 저장된 키링의 이름입니다.
    • LOCATION: 키링의 Google Cloud 위치입니다. 클러스터 위치와 같아야 합니다. 리전 목록은 Cloud KMS 위치 표에서 '리전'을 필터링하세요.
    • KEY_PROJECT_ID: 키 프로젝트의 프로젝트 ID

다음 단계