GKE에서 자체 인증 기관 및 키 실행


에 문의하세요.

이 페이지에서는 관리하는 인증 기관 (CA) 및 키로 Google Kubernetes Engine (GKE) 클러스터 제어 영역을 구성하는 방법을 보여줍니다. 이 안내는 사용자 인증 정보 발급 및 서명 제어에 관한 특정 조직 규정 준수 또는 정책 요구사항이 있는 보안 관리자를 대상으로 합니다.

이 페이지에서는 GKE의 선택적 제어 영역 기능 세트 중 하나를 설명합니다. 이 기능을 사용하면 제어 영역 보안 상태를 확인하거나 관리하는 키를 사용하여 제어 영역에서 암호화 및 사용자 인증 정보 서명을 구성하는 등의 작업을 실행할 수 있습니다. 자세한 내용은 GKE 제어 영역 권한 정보를 참고하세요.

기본적으로 Google Cloud 는 관리형 제어 영역에 다양한 보안 조치를 적용합니다. 이 페이지에서는 GKE 컨트롤 플레인을 더 잘 확인하거나 제어할 수 있는 선택적 기능을 설명합니다.

다음 개념에 익숙해야 합니다.

제어 영역 사용자 인증 정보 구성요소

GKE 클러스터는 특정 CA 및 키를 사용하여 클러스터에서 X.509 인증서 또는 ServiceAccount 토큰과 같은 사용자 인증 정보를 발급합니다. Cloud Key Management Service (Cloud KMS)에서 키를 만들고 Certificate Authority Service(CA 서비스)에서 CA를 만들고 Google Cloud관리 CA 및 키 대신 이러한 리소스를 사용하도록 클러스터를 구성할 수 있습니다.

만드는 특정 구성요소에 대해 자세히 알아보려면 자체 관리 CA 및 키를 참고하세요.

다른 GKE 제어 영역 권한 기능과의 사용

GKE 제어 영역 권한은 자체 관리 키와 관련하여 다음과 같은 기능을 제공합니다.

목표

  • Cloud KMS에서 키 만들기
  • CA 서비스에서 CA 만들기
  • GKE 서비스 에이전트에 Identity and Access Management (IAM) 역할 부여
  • CA 및 키를 사용하는 GKE 클러스터 만들기
  • 클러스터에서 CA 및 키를 사용하는지 확인

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the Kubernetes Engine, Certificate Authority Service, and Cloud Key Management Service APIs:

    gcloud services enable container.googleapis.com privateca.googleapis.com cloudkms.googleapis.com
  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Kubernetes Engine, Certificate Authority Service, and Cloud Key Management Service APIs:

    gcloud services enable container.googleapis.com privateca.googleapis.com cloudkms.googleapis.com
  10. 환경에서 GKE 제어 영역 권한 기능을 사용할 수 있는지 확인합니다. 이러한 기능을 사용하려면 Google Cloud 영업팀에 문의하세요.
  11. 사용자 인증 정보 발급 및 사용을 안정적으로 추적하려면 다음 데이터 액세스 감사 로그가 사용 설정되어 있는지 확인하세요.
    • Cloud KMS: DATA_READ
    • CA 서비스: ADMIN_READADMIN_WRITE

    이러한 로그 유형을 사용 설정하려면 데이터 액세스 감사 로그 사용 설정을 참고하세요.

필수 역할 및 권한

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

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

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

요구사항

GKE 버전 1.31.1-gke.1846000 이상을 사용해야 합니다.

제한사항

다음과 같은 제한사항이 적용됩니다.

  • Cloud KMS의 키만 사용할 수 있습니다. 다른 KMS 공급자 또는 다른 암호화 공급자를 사용할 수 없습니다.
  • Cloud 외부 키 관리자 (Cloud EKM) 키는 지원되지 않습니다.
  • CA 서비스의 CA만 사용할 수 있습니다.

환경 준비

이 섹션에서는 이 튜토리얼에서 사용할 Google Cloud 프로젝트를 식별하고 Cloud KMS에서 키를 보관할 키링을 만듭니다.

프로젝트 식별

다음과 같이 별도의 Google Cloud 프로젝트를 사용하는 것이 좋습니다.

  • 키 프로젝트: 모든 키와 CA가 포함됩니다.
  • 클러스터 프로젝트: GKE 클러스터가 포함됩니다.

원하는 경우 키, CA, GKE 클러스터에 동일한 프로젝트를 사용할 수 있지만, 조직에서 암호화 작업을 관리하는 팀이 클러스터 작업을 관리하는 팀과 분리되도록 별도의 프로젝트를 사용하는 것이 좋습니다.

키링 만들기

키 프로젝트에서 키링을 만들어 특정 클러스터의 모든 키를 보관합니다. GKE 클러스터와 동일한 위치에 키링을 만들어야 합니다.

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

gcloud kms keyrings create KEY_RING_NAME \
    --location=us-central1 \
    --project=KEY_PROJECT_ID

다음을 바꿉니다.

  • KEY_RING_NAME: 키링의 이름입니다.
  • KEY_PROJECT_ID: 키 프로젝트의 프로젝트 ID입니다.

키 만들기

서비스 계정 키 및 CA와 같은 각 사용자 인증 정보 기관에 대해 Cloud KMS를 사용하여 키를 만듭니다. 이 섹션에서는 GKE가 클러스터에서 사용자 인증 정보를 서명하고 확인하는 데 사용하는 키를 만드는 방법을 보여줍니다. 조직의 요구사항에 따라 이러한 키에 자체 속성을 지정할 수 있습니다. 자세한 내용은 키 만들기 페이지와 projects.locations.keyRings.cryptoKeys API 참조를 참고하세요.

Cloud KMS에서 이러한 리소스를 만들 때 다음 사항을 고려하세요.

  • 키 프로젝트에 기존 키링이 있는 경우 이 키링을 사용하여 클러스터에 사용할 키를 모두 저장할 수 있습니다.
  • 지연 시간을 최소화하려면 키링이 클러스터와 동일한 Google Cloud 위치에 있어야 합니다.
  • 키는 asymmetric-signing를 키 목적으로 지정해야 합니다.
  • 키 유형에 따라 다음 알고리즘을 사용합니다.
    • 서비스 계정 서명 키: rsa-sign-pkcs1-4096-sha256 또는 rsa-sign-pkcs1-3072-sha256와 같은 강력한 RSA 서명 PKCS1 알고리즘입니다.
    • 인증 기관 키: ec-sign-p256-sha256과 같은 강력한 알고리즘
  • Cloud HSM 하드웨어 키는 지원되지만 대부분의 사용 사례에는 software 보호 수준으로 충분합니다. 하드웨어 키에 관한 자세한 내용은 Cloud HSM을 참고하세요.
  • 키 폐기의 기본 기간을 수정하지 마세요.
  • GKE는 클러스터에서 사용 중인 CA 서비스 키를 비롯한 Cloud KMS 키를 삭제할 수 없도록 방지하지 않습니다. 키 또는 CA를 삭제하기 전에 리소스가 사용되지 않는지 확인합니다.

키를 만들려면 다음 명령어를 실행합니다.

  1. 클러스터 생성 중에 서비스 계정 확인 키로도 지정하는 Kubernetes ServiceAccount 서명 키를 만듭니다.

    gcloud kms keys create sa-signing-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=rsa-sign-pkcs1-4096-sha256 \
        --project=KEY_PROJECT_ID
    

    KEY_PROJECT_ID를 전용 키 프로젝트의 프로젝트 ID로 바꿉니다.

  2. 클러스터 루트 CA 키를 만듭니다.

    gcloud kms keys create cluster-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  3. etcd 피어 루트 CA 키를 만듭니다.

    gcloud kms keys create etcd-peer-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  4. etcd API 루트 CA 키를 만듭니다.

    gcloud kms keys create etcd-api-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    
  5. 집계 루트 CA 키를 만듭니다.

    gcloud kms keys create aggregation-ca-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1\
        --purpose="asymmetric-signing" \
        --protection-level=hsm \
        --default-algorithm=ec-sign-p256-sha256 \
        --project=KEY_PROJECT_ID
    

CA 만들기

각 제어 평면 함수의 키를 만든 후 각 키를 사용하여 CA 서비스를 사용하여 CA 풀과 해당 루트 CA를 만듭니다.

  1. 클러스터 CA 풀을 만듭니다.

    gcloud privateca pools create cluster-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    

    --no-publish-crl 플래그와 --no-publish-ca-cert 플래그는 선택사항입니다. 이러한 플래그를 생략하면 인증서가 Cloud Storage 버킷에 게시됩니다. 자세한 내용은 CA 풀의 CA에 CA 인증서 및 CRL 게시 사용 설정을 참고하세요.

  2. 클러스터 루트 CA를 만듭니다.

    gcloud privateca roots create cluster-root-ca \
        --pool=cluster-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/cluster-ca-key/cryptoKeyVersions/1 \
        --subject="CN=cluster-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    

    ORGANIZATION을 조직 이름으로 바꿉니다.

  3. etcd 피어 CA 풀을 만듭니다.

    gcloud privateca pools create etcd-peer-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  4. etcd 피어 루트 CA를 만듭니다.

    gcloud privateca roots create etcd-peer-root-ca \
        --pool=etcd-peer-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/etcd-peer-ca-key/cryptoKeyVersions/1 \
        --subject="CN=etcd-peer-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    
  5. etcd API CA 풀을 만듭니다.

    gcloud privateca pools create etcd-api-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  6. etcd API 루트 CA를 만듭니다.

    gcloud privateca roots create etcd-api-root-ca \
        --pool=etcd-api-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/etcd-api-ca-key/cryptoKeyVersions/1 \
        --subject="CN=etcd-api-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    
  7. 집계 CA 풀을 만듭니다.

    gcloud privateca pools create aggregation-ca-pool \
        --location=us-central1 \
        --tier=enterprise \
        --project=KEY_PROJECT_ID \
        --no-publish-crl --no-publish-ca-cert
    
  8. 집계 루트 CA를 만듭니다.

    gcloud privateca roots create aggregation-root-ca \
        --pool=aggregation-ca-pool \
        --location=us-central1 \
        --kms-key-version=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/aggregation-ca-key/cryptoKeyVersions/1 \
        --subject="CN=aggregation-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID \
        --auto-enable
    

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

GKE 서비스 에이전트는 Cloud KMS 및 CA 서비스에서 만든 리소스에 대한 액세스 권한이 필요합니다. 서비스 에이전트는 이러한 리소스를 사용하여 클러스터에서 인증 정보를 서명, 확인, 발급합니다. 다음과 같은 사전 정의된 IAM 역할을 사용할 수 있습니다.

GKE 서비스 에이전트에 이러한 역할을 부여하려면 다음 단계를 따르세요.

  1. 클러스터 프로젝트의 프로젝트 번호를 찾습니다.

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    CLUSTER_PROJECT_ID를 클러스터 프로젝트의 프로젝트 ID로 바꿉니다.

  2. 키 만들기에서 만든 서비스 계정 서명 키에 Kubernetes Engine KMS Crypto Key User 역할을 부여합니다.

    gcloud kms keys add-iam-policy-binding sa-signing-key \
      --location=us-central1 \
      --keyring=KEY_RING_NAME \
      --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
      --role=roles/container.cloudKmsKeyUser \
      --project=KEY_PROJECT_ID
    

    CLUSTER_PROJECT_NUMBER를 클러스터 프로젝트의 프로젝트 번호로 바꿉니다.

  3. CA 만들기에서 만든 CA 풀에 CA 서비스 인증 관리자 역할을 부여합니다.

    gcloud privateca pools add-iam-policy-binding cluster-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding etcd-peer-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding etcd-api-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools add-iam-policy-binding aggregation-ca-pool \
        --location=us-central1 \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/privateca.certificateManager \
        --project=KEY_PROJECT_ID
    

gcloud CLI를 사용하지 않을 때 추가 역할 부여

이 섹션에서는 gcloud CLI를 사용하는 대신 Terraform 또는 Google Cloud 콘솔과 같은 클라이언트를 사용하여 CA 및 키를 구성하려는 경우 실행해야 하는 추가 구성 단계를 설명합니다. gcloud CLI를 사용하는 경우 이 섹션을 건너뛰고 새 클러스터에서 CA 및 키 설정 섹션으로 이동합니다.

이 페이지에 설명된 대로 gcloud CLI를 사용하여 CA 및 키를 설정하면 gcloud CLI는 CA Service의 서비스 에이전트를 자동으로 만들고 구성하며 서비스 에이전트에 IAM 역할을 부여합니다. 하지만 Terraform 또는 Google Cloud 콘솔과 같은 클라이언트를 사용하여 Google Cloud환경을 구성하는 경우 다음과 같이 주요 프로젝트에 대해 이러한 구성 단계를 수동으로 실행해야 합니다.

  1. CA 서비스 서비스 에이전트 만들기 트리거

    gcloud beta services identity create --service=privateca.googleapis.com \
        --project=KEY_PROJECT_ID
    
  2. 키 프로젝트의 프로젝트 번호를 찾습니다.

    gcloud projects describe KEY_PROJECT_ID \
        --format='value(projectNumber)'
    
  3. 키 만들기 섹션에서 만든 모든 루트 CA 키에 뷰어 (roles/viewer) 역할과 Cloud KMS CryptoKey 서명자/확인자(roles/cloudkms.signerVerifier) 역할을 부여합니다.

    for key in cluster-ca-key etcd-peer-ca-key etcd-api-ca-key aggregation-ca-key
    do
    gcloud kms keys add-iam-policy-binding $key \
        --keyring=KEY_RING_NAME \
        --location=LOCATION \
        --role=roles/viewer \
        --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding $key \
        --keyring=KEY_RING_NAME \
        --location=LOCATION \
        --role=roles/cloudkms.signerVerifier \
        --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \
        --project=KEY_PROJECT_ID
    done
    

    KEY_PROJECT_NUMBER를 이전 단계의 출력에서 키 프로젝트 번호로 바꿉니다.

    이 명령어는 루트 CA 키를 반복하여 해당 키의 각 역할을 CA 서비스 서비스 에이전트에 부여하는 for 루프입니다. 루트 CA 키에 다른 이름을 사용한 경우 각 키에 대해 이러한 명령어를 수동으로 실행합니다.

새 클러스터에서 CA 및 키 설정

키, CA 풀, 루트 CA를 만들고 GKE 서비스 에이전트에 IAM 역할을 부여한 후 이러한 리소스를 사용하는 새 클러스터를 만듭니다.

클러스터 만들기 명령어에 지정하는 플래그에는 다음 리소스 경로가 값으로 필요합니다.

  • 키 만들기에서 만든 서비스 계정 서명 키의 Cloud KMS 키 버전 경로입니다. service-account-signing-keys 플래그와 service-account-verification-keys 플래그에 이 경로를 지정합니다.
  • CA 만들기에서 만든 각 CA 풀의 경로입니다.

키와 CA를 사용하도록 새 클러스터를 구성하려면 다음 단계를 따르세요.

  1. 사용 설정된 최신 서비스 계정 서명 키 버전의 경로를 찾습니다.

    gcloud kms keys versions list \
        --key=sa-signing-key \
        --keyring=KEY_RING_NAME \
        --location=us-central1 \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ --format="value(name)" | sed 1q
    

    KEY_PROJECT_ID를 키 프로젝트의 프로젝트 ID로 바꿉니다.

    출력은 다음과 비슷합니다.

    projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
    
  2. 만든 각 CA 풀의 경로를 찾습니다.

    gcloud privateca pools list --format="get(name)" \
        --project=KEY_PROJECT_ID
    

    출력은 다음과 비슷합니다.

    projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool
    projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool
    

    출력에 GKE용으로 만든 모든 CA 풀이 포함되어 있는지 확인합니다.

클러스터 만들기

이 섹션에서는 구성하려는 GKE 컨트롤 플레인 기관 기능에 따라 지정된 다양한 옵션으로 클러스터를 만듭니다. 이러한 기능은 클러스터 생성 중에만 클러스터에서 구성할 수 있습니다. 다음 명령어는 Autopilot 모드 클러스터를 만듭니다. 대신 Standard 모드 클러스터를 만들려면 gcloud container clusters create 명령어와 함께 동일한 플래그를 사용합니다.

  • 이 튜토리얼에서 만든 CA 및 키만 구성하려면 다음 명령어를 실행합니다.

    gcloud container clusters create-auto example-cluster \
        --location=us-central1 \
        --project=CLUSTER_PROJECT_ID \
        --cluster-version=VERSION \
        --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
        --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
        --cluster-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --etcd-api-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --aggregation-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool
    

    다음을 바꿉니다.

    • CLUSTER_PROJECT_ID: 클러스터 프로젝트의 프로젝트 ID입니다.
    • VERSION: 클러스터의 GKE 버전입니다. 1.31.1-gke.1846000 이상이어야 합니다.
  • CA 및 키와 제어 영역 부팅 디스크 암호화 및 etcd 암호화를 구성하려면 다음 단계를 따르세요.

    1. etcd 및 제어 영역 부팅 디스크 암호화에서 모든 주요 구성 단계를 실행합니다.
    2. 클러스터에서 암호화 키 사용의 안내에 따라 각 키의 경로를 찾습니다.
    3. 클러스터 만들기:

      gcloud container clusters create-auto example-cluster \
          --location=us-central1 \
          --project=CLUSTER_PROJECT_ID \
          --cluster-version=VERSION \
          --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
          --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \
          --cluster-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
          --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
          --etcd-api-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
          --aggregation-ca=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
          --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
          --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
      

      다음을 바꿉니다.

      • CLUSTER_PROJECT_ID: 클러스터 프로젝트의 프로젝트 ID입니다.
      • VERSION: 클러스터의 GKE 버전입니다. 1.31.1-gke.1846000 이상이어야 합니다.
      • PATH_TO_DISK_KEY: 디스크 암호화 키의 경로입니다.
      • PATH_TO_ETCD_BACKUP_KEY: etcd 내부 백업 암호화 키의 경로입니다.

    새 표준 모드 클러스터를 만들 때도 이러한 플래그를 사용할 수 있습니다.

클러스터가 지정된 키와 CA를 사용하는지 확인

이 섹션에서는 클러스터 생성 중에 사용된 키와 CA를 확인하는 방법을 보여줍니다. Cloud Logging 또는 Google Cloud CLI를 사용하여 이 확인을 실행할 수 있습니다.

로깅을 사용하여 키 및 CA 확인

Logging을 사용하여 키와 CA를 확인하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 다음 쿼리를 지정합니다.

    resource.type="gke_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster"
    protoPayload.request.cluster.userManagedKeysConfig:*
    

    protoPayload.request.cluster.userManagedKeysConfig:*는 관리하는 키와 CA가 포함된 클러스터 생성 로그의 결과를 필터링합니다.

  3. 쿼리 실행을 클릭합니다.

결과에서 클러스터 생성 로그를 펼칩니다. 키 및 CA의 경로가 해당 클러스터에 대해 만든 경로와 동일한지 확인합니다(예: 다음 예 참고).

# lines omitted for clarity
userManagedKeysConfig: {
  aggregationCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool"
  clusterCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool"
  etcdApiCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool"
  etcdPeerCa: "projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool"
  serviceAccountSigningKeys: [
    0: "projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
  ]
  serviceAccountVerificationKeys: [
    0: "projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
  ]
}

gcloud CLI를 사용하여 키 및 CA 확인

클러스터가 만든 CA 및 키를 사용하는지 확인하려면 다음 명령어를 실행합니다.

gcloud container clusters describe example-cluster \
    --location=us-central1 \
    --project=CLUSTER_PROJECT_ID

출력에는 다음 예와 같이 userManagedKeysConfig 필드가 포함되어야 합니다.

# lines omitted for clarity
userManagedKeysConfig:
  sa-signing-key: projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
  sa-verification-key: projects/KEY_PROJECT_ID/locations/us-central1/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
  cluster-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool
  etcd-peer-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool
  etcd-api-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool
  aggregation-ca: projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

개별 리소스 삭제

  1. 다음과 같이 클러스터를 삭제합니다.

    gcloud container clusters delete example-cluster \
        --location=us-central1 \
        --project=CLUSTER_PROJECT_ID
    
  2. 루트 CA를 사용 중지합니다.

    gcloud privateca roots disable cluster-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable etcd-peer-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable etcd-api-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots disable aggregation-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
        --project=KEY_PROJECT_ID
    
  3. 루트 CA를 삭제합니다.

    gcloud privateca roots delete cluster-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/cluster-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete etcd-peer-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-peer-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete etcd-api-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/etcd-api-ca-pool \
        --project=KEY_PROJECT_ID
    
    gcloud privateca roots delete aggregation-root-ca \
        --location=us-central1 \
        --pool=projects/KEY_PROJECT_ID/locations/us-central1/caPools/aggregation-ca-pool \
        --project=KEY_PROJECT_ID
    
  4. CA 풀을 삭제합니다.

    gcloud privateca pools delete cluster-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete etcd-peer-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete etcd-api-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
    gcloud privateca pools delete aggregation-ca-pool --location=us-central1 \
        --project=KEY_PROJECT_ID
    
  5. 키를 삭제합니다.

    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=sa-signing-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=cluster-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=etcd-peer-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=etcd-api-ca-key \
        --project=KEY_PROJECT_ID
    
    gcloud kms keys versions destroy 1 \
        --location=us-central1 \
        --keyring=KEY_RING_NAME \
        --key=aggregation-ca-key \
        --project=KEY_PROJECT_ID
    

Cloud KMS에서는 키링을 삭제할 수 없습니다. 하지만 키링에는 추가 비용이 발생하지 않습니다.

다음 단계