Standard 클러스터에서 Autopilot 보안 정책 적용

Google Kubernetes Engine (GKE) Autopilot 클러스터는 일반적인 공격 경로를 방지하도록 설계된 다양한 보안 정책을 적용합니다. 이 문서에서는 플랫폼 관리자가 Standard 클러스터에서 이러한 Autopilot 정책의 일부 또는 전부를 적용하는 방법을 보여줍니다. Autopilot 클러스터는 더 높은 기준 GKE 보안 상황을 위해 설계되었으므로 Autopilot 클러스터에서는 클러스터 정책 적용을 사용 중지할 수 없습니다.

Standard 클러스터에서는 언제든지 특정 정책을 사용 설정하거나 사용 중지할 수 있습니다. 조직 관리자는 조직, 폴더 또는 프로젝트에서 맞춤 제약 조건을 적용하여 특정 Autopilot 정책을 사용 중지할 수 있는지 여부를 제어할 수 있습니다. 이러한 사전 정의된 정책을 사용하여 복잡한 RBAC 역할과 바인딩을 작성하지 않고도 보안 권장사항을 적용할 수 있습니다. 클러스터 수준 정책을 사용하면 클러스터 또는 워크로드에 Autopilot 모드를 사용하지 않더라도 클러스터 보안을 개선할 수 있습니다. 사용 가능한 Autopilot 클러스터 정책에 대한 자세한 내용은 지원되는 정책 섹션을 참고하세요.

Autopilot 클러스터 정책 적용 시 고려사항

Autopilot 클러스터는 항상 이러한 정책을 적용하지만 Standard 클러스터에는 적용하는 정책을 위반할 수 있는 기존 워크로드와 노드 풀이 있는 경우가 많습니다. 클러스터에서 정책을 적용하거나 사용 중지하기 전에 다음 고려사항을 읽어보세요.

  • 변경사항은 새 워크로드에만 적용됨: 워크로드에 적용되는 정책을 사용 설정하면 변경사항은 해당 정책을 사용 설정한 후에 생성되거나 수정된 포드에만 적용됩니다. 정책을 위반하는 기존 포드는 계속 실행될 수 있습니다. 정책을 사용 설정하기 전에 클러스터의 기존 워크로드를 검토하여 정책의 제약 조건을 준수하는지 확인하세요.
  • 노드 풀 정책은 모든 노드에 적용됨: Standard 클러스터의 노드 풀에 적용되는 정책을 사용 설정하면 제약 조건이 신규 및 기존 노드 풀 모두에 적용됩니다. 기존 노드 풀이 정책을 위반하면 클러스터 업데이트 작업이 실패합니다. 예를 들어 기존 사용자 관리 노드 풀이 있는 클러스터에서 no-standard-node-pools 정책을 사용 설정하려고 하면 작업이 실패합니다. 노드 풀 정책을 사용 설정하기 전에 클러스터의 기존 노드 풀을 검토하세요.
  • 모든 정책을 사용 설정하면 Autopilot 모드가 사용 설정됨: 사용 가능한 모든 Autopilot 정책 (사용자 관리 노드 풀을 방지하는 정책 포함)을 사용 설정하면 클러스터의 모든 워크로드가 Autopilot 모드에서만 실행될 수 있습니다. 즉, 모든 워크로드가 Autopilot 보안 제약 조건과 모든 클러스터 정책을 준수해야 합니다. 이 방법을 사용하면 필요할 때 특정 정책을 사용 중지하는 옵션과 함께 Autopilot 모드에서 전체 Standard 클러스터를 실행할 수 있습니다.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.

클러스터에서 특정 Autopilot 정책 사용 설정

Standard 클러스터를 만들거나 업데이트할 때 gcloud CLI 또는 GKE API를 사용하여 특정 정책을 사용 설정합니다. GKE가 클러스터에서 적용하는 정책 목록에 특정 Autopilot 클러스터 정책을 추가하려면 gcloud container clusters create 명령어 또는 gcloud container clusters update 명령어와 함께 --autopilot-cluster-policies 플래그를 사용합니다.

다음 예시에서는 기존 클러스터에서 정책을 사용 설정하는 방법을 보여줍니다.

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --autopilot-cluster-policies=AUTOPILOT_POLICIES

다음을 바꿉니다.

  • CLUSTER_NAME: 표준 클러스터의 이름입니다.
  • CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 리전 또는 영역(예: us-central1 또는 us-central1-a)
  • AUTOPILOT_POLICIES: 클러스터에서 시행을 시작할 Autopilot 클러스터 정책의 쉼표로 구분된 목록입니다(예: no-system-mutation,no-system-impersonation). 지원되는 정책을 하나 이상 지정해야 합니다. 지정한 정책은 GKE가 클러스터에서 이미 시행 중인 정책 목록에 추가됩니다. 정책 적용을 사용 중지하려면 클러스터에서 특정 Autopilot 정책 사용 중지 섹션을 참고하세요.

Bad value [invalid policy]:로 시작하는 오류 메시지와 함께 명령어가 실패하면 지정한 모든 정책 이름이 지원되는 정책 목록에 있는지 확인합니다.

정책 시행 확인

특정 정책을 사용 설정한 후 해당 정책을 위반하는 리소스를 만들어 시행이 작동하는지 확인할 수 있습니다. 예를 들어 no-system-mutation 정책을 사용 설정한 경우 kube-system 네임스페이스에서 포드를 만들어 볼 수 있습니다. GKE는 포드 생성 작업을 차단하고 다음과 유사한 오류 메시지를 표시합니다.

Error from server (Forbidden): pods is forbidden: User cannot create resource "pods" in API group "" in the namespace "kube-system": GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "kube-system" is managed and the request's verb "create" is denied

클러스터에서 특정 Autopilot 정책 사용 중지

언제든지 Autopilot 클러스터 정책을 사용 중지할 수 있습니다. 정책을 사용 중지하는 것은 보안 요구사항이 변경되었거나 해당 정책을 사용 설정했을 때 기존 워크플로가 중단된 경우에 유용합니다. GKE가 클러스터에서 시행하는 정책 목록에서 정책을 삭제하려면 gcloud container clusters update 명령어와 함께 --remove-autopilot-cluster-policies 플래그를 사용합니다.

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --remove-autopilot-cluster-policies=AUTOPILOT_POLICIES

--remove-autopilot-cluster-policies 플래그의 값을 하나 이상 지정해야 합니다. 값을 지정하지 않고 이 플래그를 지정하면 작업이 실패합니다.

Bad value [invalid policy]:로 시작하는 오류 메시지와 함께 명령어가 실패하면 지정한 모든 정책 이름이 지원되는 정책 목록에 있는지 확인합니다.

조직에서 Autopilot 클러스터 정책 적용

조직 관리자는 맞춤 조직 정책 제약 조건을 사용하여 조직, 프로젝트 또는 폴더 전체에 이러한 클러스터 정책의 사용을 적용할 수 있습니다. 이 추가 조치를 통해 클러스터에서 필수 클러스터 정책이 무단으로 또는 의도치 않게 삭제되는 것을 방지할 수 있습니다. 다음 예와 같이 맞춤 제약 조건에서 ClusterPolicyConfig 필드를 사용합니다.

name: organizations/ORGANIZATION_ID/customConstraints/custom.autopilotClusterPolicies
resourceTypes:
-   container.googleapis.com/Cluster
methodTypes:
-   CREATE
-   UPDATE
condition: "resource.ClusterPolicyConfig.no_system_mutation == true && resource.ClusterPolicyConfig.no_system_impersonation == true"
actionType: ALLOW
displayName: Autopilot policies in Standard clusters.
description: For all new and existing Standard clusters, enable the no_system_mutation and no_system_impersonation Autopilot cluster policies. For more information, see https://docs.cloud.google.com/kubernetes-engine/security/autopilot-cluster-policies-standard.

지원되는 정책

Standard 클러스터에서 사용할 수 있는 각 Autopilot 정책은 클러스터 수준에서 하나 이상의 보안 권장사항을 구현합니다. no-system-mutation, no-system-impersonation, no-unsafe-webhooks와 같은 정책은 Autopilot 모드 사용에 관심이 없더라도 모든 GKE 클러스터의 보안을 개선하는 데 도움이 됩니다.

다음 표에서는 Standard 클러스터에서 사용 설정할 수 있는 Autopilot 정책을 설명하고 정책 시행을 준비하는 데 도움을 줍니다.

정책 이름 설명 사용 설정 전에 해야 할 작업
no-system-mutation GKE 시스템 네임스페이스 (예: kube-system)에서 리소스가 생성되거나 수정되지 않도록 합니다. 포드를 시스템 네임스페이스에서 자체 네임스페이스로 이동합니다.
no-system-impersonation 시스템 사용자를 가장하려는 시도를 차단하고 시스템 보안 주체를 사용하여 CertificateSigningRequests를 생성하는 것을 방지합니다. 시스템 ID에 대해 생성된 승인되지 않은 CertificateSigningRequests를 찾습니다. 승인된 무단 CertificateSigningRequest가 발견되면 클러스터 사용자 인증 정보를 순환하여 인증서를 무효화하세요.
no-unsafe-webhooks 허용 웹훅 및 정책이 Node 객체, PersistentVolume 또는 CertificateSigningRequest와 같은 중요한 시스템 리소스를 가로채지 못하도록 합니다. 추천자 서비스를 사용하여 시스템 리소스를 가로채는 웹훅을 식별합니다. 웹훅이 발견되면 웹훅 구성을 수정합니다. 자세한 내용은 웹훅을 사용할 때 컨트롤 플레인 안정성 보장을 참고하세요.
no-standard-node-pools 수동으로 생성된 노드 풀과 자동 생성된 노드 풀을 포함한 모든 사용자 관리형 노드 풀이 클러스터에 존재하지 않도록 합니다. 클러스터에는 Autopilot 노드 풀만 존재할 수 있습니다. 클러스터와 함께 생성된 기본 노드 풀을 비롯한 기존의 모든 비 Autopilot 노드 풀을 삭제합니다.

다음 단계