정책 컨트롤러 설치

이 페이지에서는 정책 컨트롤러를 설치하는 방법을 보여줍니다. 정책 컨트롤러는 보안, 규정, 비즈니스 규칙과 관련된 정책에 따라 클러스터를 확인 및 감사하고 규정 준수를 시행합니다.

이 페이지는 감사 또는 시행 자동화를 제공하고 유지하여 클라우드 플랫폼 내에서 실행되는 모든 리소스가 조직의 규정 준수 요구사항을 충족하도록 보장하려는 IT 관리자와 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참조하세요.

정책 컨트롤러는 Google Kubernetes Engine을 사용하는 경우 사용할 수 있습니다. 자세한 내용은 Google Kubernetes Engine 가격 책정을 참고하세요.

시작하기 전에

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

  1. 이 안내에서 사용되는 gcloud, kubectl, nomos 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.
  2. 오픈소스 오픈 정책 에이전트 게이트키퍼가 클러스터에 설치되어 있지 않은지 확인합니다. 그렇다면 정책 컨트롤러를 설치하기 전에 Gatekeeper를 제거합니다.

  3. 필요한 API를 사용 설정합니다.

    Console

    정책 컨트롤러 API를 사용 설정합니다.

    정책 컨트롤러 API 사용 설정

    gcloud

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

    gcloud services enable anthospolicycontroller.googleapis.com
    
  4. Kubernetes 버전 1.14.x 이상을 실행하는 클러스터를 만들거나 액세스할 수 있는지 확인합니다. 정책 컨트롤러가 1.14.x 이전 버전의 Kubernetes에서 실행되는 것처럼 보일 수 있지만 제품이 올바르게 작동하지 않습니다.

  5. 클러스터를 등록하는 사용자에게 필요한 IAM 역할을 부여합니다.

  6. Google Cloud CLI를 사용하여 정책 컨트롤러를 구성하려면 지금 Fleet클러스터를 등록합니다. Google Cloud 콘솔을 사용하려는 경우 정책 컨트롤러를 설치할 때 클러스터를 등록합니다.

  7. GKE 연결 클러스터를 사용하는 경우 AKS 클러스터에 Azure 정책 부가기능이 없는지 확인하고 control-plane 키로 네임스페이스에 라벨 지정을 하지 않습니다.

  8. VMware 또는 베어메탈용 Google Distributed Cloud를 사용하는 경우 사용자 클러스터에 정책 컨트롤러를 설치해야 합니다. 관리자 클러스터에는 정책 컨트롤러를 설치할 수 없습니다.

정책 컨트롤러 설치

콘솔

Google Cloud 콘솔에서 정책 컨트롤러를 설치하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 상황 관리 섹션 아래의 정책 페이지로 이동합니다.

    정책으로 이동

  2. 정책 컨트롤러 구성을 클릭합니다.

  3. 선택사항: 기본 Fleet 설정을 변경하려면 Fleet 맞춤설정을 클릭합니다. 대화상자가 나타나면 다음을 수행합니다.

    1. 정책 번들 추가/수정 섹션에서 관련 전환 버튼을 클릭하여 정책 번들을 포함하거나 제외합니다.
    2. 정책 컨트롤러 구성 수정 섹션에서 다음을 수행합니다.

      1. 변형 웹훅을 사용 설정하려면 변형 웹훅 사용 설정 체크박스를 선택합니다. 이 기능은 Autopilot 클러스터와 호환되지 않습니다.
      2. 감사 간격 상자에 두 번의 감사 사이 간격(초 단위)을 입력합니다.
      3. 제외 가능한 네임스페이스 상자에 네임스페이스 목록을 입력합니다. 정책 컨트롤러는 이러한 네임스페이스의 객체를 무시합니다. 이 기능은 Autopilot 클러스터와 호환되지 않습니다.

        권장사항:

        환경에서 오류가 발생하지 않도록 시스템 네임스페이스를 제외합니다. 네임스페이스 및 Google Cloud 서비스로 생성된 일반 네임스페이스 목록을 제외하는 방법은 네임스페이스 제외 페이지를 참조하세요.

      4. 참조 제약조건을 사용 설정하려면 현재 평가 중인 객체가 아닌 객체를 참조하는 제약조건 템플릿을 사용 설정합니다. 체크박스를 선택합니다.

      5. 버전 목록에서 사용하려는 정책 컨트롤러 버전을 선택합니다.

    3. 변경사항 저장을 클릭합니다.

  4. 구성을 클릭합니다.

  5. 확인 대화상자에서 확인을 클릭합니다. 이전에 정책 컨트롤러를 사용 설정하지 않은 경우 확인을 클릭하면 anthospolicycontroller.googleapis.com API가 사용 설정되고 클러스터에 정책 컨트롤러가 설치됩니다.

  6. 선택사항: 기존 클러스터를 기본 설정으로 동기화합니다.

    1. 설정 탭에서 Fleet 설정과 동기화를 클릭합니다.
    2. Fleet의 클러스터 목록에서 동기화할 클러스터를 선택한 후 Fleet 설정과 동기화를 클릭합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

정책 컨트롤러 설정 탭으로 리디렉션됩니다. 클러스터에 정책 컨트롤러가 설치되고 구성되면 상태 열에 설치됨 이 표시됩니다. 몇 분 정도 걸릴 수 있습니다.

gcloud

다음 명령어를 실행하여 정책 컨트롤러를 사용 설정합니다.

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

추가 필드를 설정하여 정책 컨트롤러를 구성할 수 있습니다. 예를 들어 정책 컨트롤러가 일부 네임스페이스를 시행에서 제외하도록 할 수 있습니다. 구성할 수 있는 필드의 전체 목록은 정책 컨트롤러 Google Cloud CLI 문서를 참조하거나 gcloud container fleet policycontroller enable --help를 실행하세요.

다음 단계를 완료하여 정책 컨트롤러의 Fleet 수준 설정을 지정합니다.

  1. 정책 컨트롤러의 기본 구성이 포함된 fleet-default.yaml이라는 파일을 만듭니다. Fleet 수준 기본값을 사용 설정하려면 installSpec 필드가 필요합니다. 이 예시에서는 구성할 수 있는 옵션을 보여줍니다.

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #         cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
    권장사항:

    환경에서 오류가 발생하지 않도록 시스템 네임스페이스를 제외합니다. 네임스페이스 및 Google Cloud 서비스로 생성된 일반 네임스페이스 목록을 제외하는 방법은 네임스페이스 제외 페이지를 참조하세요.

  2. Fleet에 기본 구성을 적용합니다.

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. 구성이 적용되었는지 확인하려면 다음 명령어를 실행합니다.

    gcloud container fleet policycontroller describe
    
  4. Fleet 수준의 기본 구성을 삭제하려면 다음 명령어를 실행합니다.

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Terraform

기본 템플릿 라이브러리가 설치된 상태로 Fleet 전체에서 정책 컨트롤러를 사용 설정하려면 다음 예시를 참조하세요.

resource "google_gke_hub_feature" "policycontroller" {
  name     = "policycontroller"
  location = "global"
  project  = data.google_project.default.project_id

  fleet_default_member_config {
    policycontroller {
      policy_controller_hub_config {
        install_spec = "INSTALL_SPEC_ENABLED"
        policy_content {
          bundles {
            bundle = "pss-baseline-v2022"
          }
          template_library {
            installation = "ALL"
          }
        }
      }
    }
  }
}

여러 개의 bundle 블록을 전달하여 정책 컨트롤러 번들 개요에 나열된 번들 중 원하는 번들을 설치할 수 있습니다.

Terraform 사용 방법에 대한 자세한 내용은 정책 컨트롤러에 대한 Terraform 지원을 참조하세요.

정책 컨트롤러 설치 확인

정책 컨트롤러를 설치하면 성공적으로 완료되었는지 확인할 수 있습니다.

콘솔

다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 상황 관리 섹션 아래의 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 정책 컨트롤러 상태 열을 확인합니다. 설치가 완료되면 설치됨 상태가 표시됩니다.

gcloud

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

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

설치가 완료되면 membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE가 표시됩니다.

제약조건 템플릿 라이브러리 설치 확인

정책 컨트롤러를 설치하면 제약 조건 템플릿 라이브러리가 기본적으로 설치됩니다. 이 설치를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 템플릿 라이브러리가 성공적으로 완료되었는지 확인할 수 있습니다.

콘솔

다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 상황 관리 섹션 아래의 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 설치된 번들 열에 나열된 숫자를 선택합니다. 정책 콘텐츠 상태 창에서 템플릿 라이브러리가 설치되면 상태가 설치됨 으로 표시됩니다.

gcloud

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

kubectl get constrainttemplates

다음과 비슷한 출력이 표시됩니다.

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

개별 제약조건 템플릿이 올바르게 설치되면 status.created 필드는 true입니다.

구성 동기화와 정책 컨트롤러의 상호작용

정책 컨트롤러를 구성 동기화와 함께 사용하는 경우, Git 저장소와 같은 정보 소스에 저장되어 구성 동기화를 통해 동기화되는 리소스와의 다음과 같은 상호작용에 유의해야 합니다.

  • 제약조건 템플릿 라이브러리가 비활성화되어 있지 않으면 템플릿 라이브러리의 일부인 제약조건 템플릿을 동기화할 수 없습니다.

  • gatekeeper-system 네임스페이스에 저장된 Config 리소스를 동기화하려면 해당 Config 리소스만 정보 소스에 정의해야 합니다. 이때, gatekeeper-system Namespace는 함께 정의하면 안 됩니다.

측정항목 구성

기본적으로 정책 컨트롤러는 Prometheus 및 Cloud Monitoring 양쪽 모두에 측정항목을 내보내려고 시도합니다. 정책 컨트롤러가 측정항목을 정상적으로 내보내도록 하려면 권한 부여와 같은 추가 구성 단계를 완료해야 할 수 있습니다. 자세한 내용은 정책 컨트롤러 측정항목 사용을 참조하세요.

제약조건 템플릿 라이브러리 관리

제약조건 템플릿, 연관된 제약조건 또는 제약조건 템플릿 라이브러리의 설치 제거 또는 설치에 대한 정보는 제약조건 작성을 참조하세요.

시행 시 네임스페이스 예외

네임스페이스 내의 객체를 무시하도록 정책 컨트롤러를 구성할 수 있습니다. 자세한 정보는 정책 컨트롤러에서 네임스페이스 제외를 참조하세요.

리소스 변형

또한 정책 컨트롤러는 변형 웹훅 역할을 합니다. 자세한 내용은 리소스 변형을 참조하세요.

정책 컨트롤러 버전 보기

Gatekeeper 정책 컨트롤러가 사용하는 버전을 보려면 다음 명령어를 실행하여 이미지 태그를 확인합니다.

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

Gatekeeper를 빌드하는 데 사용되는 Git 태그(또는 해시)와 ConfigManagement Operator 버전 번호가 다음과 같이 이미지 태그에 포함됩니다.

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

다음 이미지를 예시로 들어보겠습니다.

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2는 버전 번호입니다.
  • 480baac는 Git 태그입니다.
  • 0은 빌드 번호입니다.

정책 컨트롤러 업그레이드

정책 컨트롤러를 업그레이드하기 전에 출시 노트에서 버전 간 변경사항에 대한 자세한 내용을 확인하세요.

정책 컨트롤러를 업그레이드하려면 다음 단계를 완료하세요.

콘솔

  1. Google Cloud 콘솔에서 상황 관리 섹션 아래의 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭에서 버전을 업그레이드하려는 클러스터 옆에 있는 구성 수정을 선택합니다.
  3. 정책 컨트롤러 구성 수정 메뉴를 확장합니다.
  4. 버전 드롭다운 목록에서 업그레이드할 버전을 선택합니다.
  5. 변경사항 저장을 클릭합니다.

gcloud

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

gcloud container fleet policycontroller update \
  --version=VERSION \
  --memberships=MEMBERSHIP_NAME

다음을 바꿉니다.

  • VERSION: 업그레이드할 버전입니다.
  • MEMBERSHIP_NAME: 클러스터를 등록할 때 선택한 멤버십 이름입니다. gcloud container fleet memberships list를 실행하면 멤버십 이름을 찾을 수 있습니다.

정책 컨트롤러 제거

클러스터에서 정책 컨트롤러를 제거하려면 다음 단계를 따르세요.

콘솔

클러스터에서 정책 컨트롤러를 사용 중지하려면 다음 태스크를 완료하세요.

  1. Google Cloud 콘솔에서 상황 관리 섹션 아래의 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 구성 수정 열의 수정 을 선택합니다.
  3. 클러스터 창에서 정책 컨트롤러 정보 메뉴를 확장합니다.
  4. 정책 컨트롤러 제거를 선택합니다.
  5. 확인 대화상자의 안내에 따라 제거를 확인하고 확인을 선택합니다.

정책 컨트롤러가 제거되면 상태 열에 설치되지 않음 이 표시됩니다.

gcloud

정책 컨트롤러를 제거하려면 다음 명령어를 실행합니다.

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

MEMBERSHIP_NAME을 등록된 클러스터의 멤버십 이름으로 바꿔 정책 컨트롤러를 사용 중지합니다. 쉼표로 구분하여 여러 멤버십을 지정할 수 있습니다.

정책 컨트롤러 RBAC 및 권한

정책 컨트롤러에는 상위 권한이 있는 워크로드가 포함됩니다. 이러한 워크로드의 권한은 정책 에이전트 게이트키퍼 열기 작업 문서에 설명되어 있습니다.

다음 단계