거버넌스


Red Hat Advanced Cluster Management for Kubernetes 2.12

거버넌스

초록

정책을 사용하여 클러스터 보안을 강화하는 데 도움이 되는 거버넌스 정책 프레임워크에 대해 자세히 알아보려면 자세히 알아보십시오.

1장. 거버넌스

기업은 프라이빗, 멀티 및 하이브리드 클라우드에서 호스팅되는 워크로드에 대한 소프트웨어 엔지니어링, 보안, 보안 및 규제 준수에 대한 내부 표준을 충족해야 합니다. Red Hat Advanced Cluster Management for Kubernetes 거버넌스는 기업이 자체 보안 정책을 도입할 수 있는 확장 가능한 정책 프레임워크를 제공합니다.

Red Hat Advanced Cluster Management 거버넌스 프레임워크의 관련 주제를 계속 읽으십시오.

1.1. 정책 컨트롤러

정책 컨트롤러는 클러스터가 정책과 호환되는지 여부를 모니터링하고 보고합니다. 지원되는 정책 템플릿을 사용하여 이러한 컨트롤러에서 관리하는 정책을 적용하여 Kubernetes 정책 프레임워크용 Red Hat Advanced Cluster Management를 사용하십시오. 정책 컨트롤러는 Kubernetes 사용자 정의 리소스 정의 인스턴스를 관리합니다.

정책 컨트롤러는 정책 위반을 확인하고 컨트롤러가 시행 기능을 지원하는 경우 클러스터 상태를 준수하도록 할 수 있습니다. Kubernetes 정책 컨트롤러에 대한 다음 Red Hat Advanced Cluster Management에 대한 자세한 내용은 다음 주제를 참조하십시오.

중요: 구성 정책 컨트롤러 정책만 적용 기능을 지원합니다. 정책 컨트롤러에서 적용 기능을 지원하지 않는 정책을 수동으로 수정해야 합니다.

1.1.1. Kubernetes 구성 정책 컨트롤러

구성 정책 컨트롤러를 사용하여 Kubernetes 리소스를 구성하고 클러스터에 보안 정책을 적용합니다. 구성 정책 컨트롤러는 로컬 Kubernetes API 서버와 통신하므로 클러스터에 있는 구성 목록을 가져올 수 있습니다.

설치하는 동안 구성 정책 컨트롤러가 관리 클러스터에 생성됩니다. 구성 정책은 허브 클러스터에 있는 정책의 policy-templates 필드에 제공되며, 거버넌스 프레임워크를 통해 선택한 관리 클러스터에 전파됩니다.

구성 정책 컨트롤러에 대한 remediationAction InformOnly 로 설정된 경우 상위 정책에서 상위 정책의 수정 정책이 적용되도록 설정되어 있어도 상위 정책에서 구성 정책을 적용하지 않습니다.

정책에 추가하려는 기존 Kubernetes 매니페스트가 있는 경우 정책 생성기는 이 작업을 수행하는 데 유용한 도구입니다.

1.1.1.1. 구성 정책 샘플
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  remediationAction: inform 1
  customMessage:
    compliant: {}
    noncompliant: {}
  severity: low
  evaluationInterval:
    compliant:
    noncompliant:
  object-templates: 2
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod
      spec:
        containers:
        - image: pod-image
          name: pod-name
          ports:
          - containerPort: 80
  - complianceType: musthave
    objectDefinition:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfig
      namespace: default
      data:
      testData: hello
    spec:
...
1
이름 없이 오브젝트를 지정하는 구성 정책은 정보를 제공하도록만 설정할 수 있습니다. 구성 정책의 수정 작업이 적용 되도록 설정된 경우 컨트롤러는 지정된 구성을 대상 관리 클러스터에 적용합니다.
2
Kubernetes 오브젝트는 구성 정책의 object-templates 배열에 정의되어 있으며, 여기서 구성 정책 컨트롤러의 필드가 관리형 클러스터의 오브젝트와 비교됩니다. 구성 정책 내에서 템플릿 값을 사용할 수도 있습니다. 자세한 내용은 템플릿 처리를 참조하십시오.
1.1.1.2. 구성 정책 YAML 테이블
표 1.1. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

값을 ConfigurationPolicy 로 설정하여 정책 유형을 나타냅니다.

metadata.name

필수 항목

정책의 이름입니다.

spec.namespaceSelector

네임스페이스가 지정되지 않은 네임스페이스된 오브젝트에 필요합니다.

관리 클러스터에서 오브젝트가 적용되는 네임스페이스를 결정합니다. includeexclude 매개 변수는 파일 경로 표현식을 허용하여 이름별로 네임스페이스를 포함 및 제외합니다. matchExpressionsmatchLabels 매개변수는 레이블별로 포함할 네임스페이스를 지정합니다. Kubernetes 라벨 및 선택기 설명서를 참조하십시오. 결과 목록은 모든 매개변수의 결과 교집합을 사용하여 컴파일됩니다.

spec.remediationAction

필수 항목

정책이 준수하지 않을 때 수행할 작업을 지정합니다. 다음 매개변수 값을 사용합니다. ,InformOnly 또는 enforce.

spec.customMessage

선택 사항

현재 규정 준수에 따라 이 섹션을 사용하여 지정된 Go 템플릿 중 하나를 사용하도록 구성 정책에서 전송한 규정 준수 메시지를 구성합니다. 구성 정책 컨트롤러의 현재 정책 상태의 .DefaultMessage 매개변수 및 .Policy 오브젝트 변수의 기본 메시지를 사용할 수 있습니다. 구성 정책 컨트롤러의 다음 매개변수 섹션에서 각 관련 오브젝트의 상태를 참조하십시오.

.Policy.status.relatedObjects[*].object

평가 간격을 설정하면 식별 가능한 정보만 사용할 수 있습니다.

spec.customMessage.compliant

선택 사항

이 필드를 사용하여 호환되는 구성 정책에 대한 사용자 정의 메시지를 구성합니다. emoji 및 외래 문자를 포함한 UTF-8 인코딩 문자는 지원됩니다.

spec.customMessage.noncompliant

선택 사항

이 필드를 사용하여 호환되지 않는 구성 정책에 대한 사용자 정의 메시지를 구성합니다. emoji 및 외래 문자와 함께 UTF-8 인코딩 문자는 지원되는 값입니다.

spec.severity

필수 항목

정책이 준수하지 않을 때 심각도를 지정합니다. 다음과 같은 매개변수 값( 낮은,중간,높음 또는 중요 )을 사용합니다.

spec.evaluationInterval

선택 사항

특정 규정 준수 상태에 있을 때 평가할 정책의 빈도를 지정합니다. 매개변수 준수비준 수를 사용합니다. 규정 준수비준수 매개변수의 기본값은 Kubernetes API 서버를 폴링하는 대신 Kubernetes API 감시를 활용하는 것입니다.

관리 클러스터에 리소스가 부족하면 Kubernetes API 및 정책 컨트롤러에서 CPU 및 메모리 사용량을 줄이기 위해 평가 간격을 긴 폴링 간격으로 설정할 수 있습니다. 이는 기간 단위의 형식입니다. 예를 들어 1h25m3s 는 1시간, 25분, 3초를 나타냅니다. 또한 특정 규정 준수 상태에 있는 정책을 평가하지 않도록 never 로 설정할 수도 있습니다.

spec.evaluationInterval.compliant

선택 사항

규정 준수 정책의 평가 빈도를 지정합니다. 이전 폴링 동작을 활성화하려면 이 매개 변수를 10s 로 설정합니다.

spec.evaluationInterval.noncompliant

선택 사항

준수하지 않는 정책의 평가 빈도를 지정합니다. 이전 폴링 동작을 활성화하려면 이 매개 변수를 10s 로 설정합니다.

spec.object-templates

선택 사항

컨트롤러가 관리되는 클러스터의 오브젝트와 비교할 수 있는 Kubernetes 오브젝트의 배열(완전히 정의되거나 필드 서브 세트 포함)입니다. 참고: spec.object-templatesspec.object-templates-raw 는 선택 사항으로 나열되지만 두 매개변수 필드 중 하나만 설정해야 합니다.

spec.object-templates-raw

선택 사항

원시 YAML 문자열로 오브젝트 템플릿을 설정하는 데 사용됩니다. 오브젝트 템플릿에 대한 조건을 지정합니다. 여기서 if-else 문 및 range 함수와 같은 고급 함수가 지원되는 값입니다. 예를 들어 object-templates 정의에서 중복을 방지하기 위해 다음 값을 추가합니다.

{{- if eq .metadata.name "policy-grc-your-meta-data-name" }}
                  replicas: 2
 {{- else }}
                  replicas: 1
 {{- end }}

참고: spec.object-templatesspec.object-templates-raw 는 선택 사항으로 나열되지만 두 매개변수 필드 중 하나만 설정해야 합니다.

spec.object-templates[].complianceType

필수 항목

이 매개변수를 사용하여 관리 클러스터에서 Kubernetes 오브젝트의 원하는 상태를 정의합니다. 다음 동사 중 하나를 매개변수 값으로 사용합니다.

  • mustonlyhave: objectDefinition 에 정의된 정확한 필드 및 값을 사용하여 오브젝트가 있어야 함을 나타냅니다.
  • musthave: objectDefinition 에 지정된 것과 동일한 필드를 사용하여 오브젝트가 있어야 함을 나타냅니다. object-template 에 지정되지 않은 오브젝트의 기존 필드는 무시됩니다. 일반적으로 배열 값이 추가됩니다. 패치할 배열에 대한 예외는 항목에 기존 항목과 일치하는 값이 있는 name 키가 포함된 경우입니다. 배열을 교체하려는 경우 mustonlyhave compliance 유형을 사용하여 완전히 정의된 objectDefinition 을 사용합니다.
  • mustnothave: objectDefinition 에 지정된 것과 동일한 필드를 가진 오브젝트가 존재할 수 없음을 나타냅니다.

spec.object-templates[].metadataComplianceType

선택 사항

매니페스트의 metadata 섹션을 클러스터의 오브젝트("musthave", "mustonlyhave")와 비교할 때 spec.object-templates[].complianceType 을 재정의합니다. 메타데이터의 complianceType 을 재정의하지 않도록 기본값은 설정되지 않습니다.

spec.object-templates[].recordDiff

선택 사항

이 매개변수를 사용하여 클러스터의 오브젝트와 정책의 오브젝트Definition 간의 차이점을 표시할지 여부와 위치를 지정합니다. 지원되는 옵션은 다음과 같습니다.

  • ConfigurationPolicy 상태에 차이를 저장하려면 InStatus 로 설정합니다.
  • 컨트롤러 로그의 차이점을 기록하려면 Log 로 설정합니다.
  • 차이를 기록하지 않으려면 None 으로 설정합니다.

기본적으로 이 매개변수는 컨트롤러에서 차이점에서 중요한 데이터를 탐지하지 않는 경우 InStatus 로 설정됩니다. 그렇지 않으면 기본값은 None 입니다. 민감한 데이터가 감지되면 ConfigurationPolicy 상태에 recordDiff 를 설정하여 차이를 확인하는 메시지가 표시됩니다.

spec.object-templates[].recreateOption

선택 사항

업데이트가 필요한 경우 오브젝트를 삭제하고 다시 생성할 시기를 설명합니다. 오브젝트를 IfRequired 로 설정하면 변경 불가능한 필드를 업데이트할 때 정책이 오브젝트를 다시 생성합니다. 매개변수를 Always 로 설정하면 정책은 업데이트 시 오브젝트를 다시 생성합니다. re Action을 설정하여 알릴 때 매개변수 값 recreateOption 은 오브젝트에 영향을 미치지 않습니다. IfRequired 값은 시험 실행 업데이트 지원없이 클러스터에 영향을 미치지 않습니다. 기본값은 None 입니다.

spec.object-templates[].objectDefinition

필수 항목

컨트롤러에서 관리 클러스터의 오브젝트와 비교할 수 있는 Kubernetes 오브젝트(완전히 정의되거나 하위 집합 포함)입니다.

spec.pruneObjectBehavior

선택 사항

정책을 관리 클러스터에서 제거할 때 정책과 관련된 리소스를 정리할지 여부를 결정합니다.

1.1.1.3. 추가 리소스

자세한 내용은 다음 항목을 참조하십시오.

1.1.2. 인증서 정책 컨트롤러

인증서 정책 컨트롤러를 사용하여 만료 시간(시간)에 가까운 인증서를 검색하거나 지정된 패턴과 일치하지 않는 DNS 이름을 포함할 수 있습니다. 거버넌스 프레임워크를 사용하여 선택한 관리 클러스터에 전파되는 허브 클러스터의 policy-templates 필드에 인증서 정책을 추가할 수 있습니다. hub 클러스터 정책에 대한 자세한 내용은 Hub 클러스터 정책 문서를 참조하십시오.

컨트롤러 정책에서 다음 매개변수를 업데이트하여 인증서 정책 컨트롤러를 구성하고 사용자 지정합니다.

  • minimumDuration
  • minimumCADuration
  • 최대 기간
  • maximumCADuration
  • allowedSANPattern
  • disallowedSANPattern

다음 시나리오 중 하나로 인해 정책을 준수하지 않을 수 있습니다.

  • 인증서가 최소 기간 미만으로 만료되거나 최대 시간이 초과되는 경우입니다.
  • DNS 이름이 지정된 패턴과 일치하지 않는 경우

인증서 정책 컨트롤러가 관리 클러스터에 생성됩니다. 컨트롤러는 로컬 Kubernetes API 서버와 통신하여 인증서가 포함된 보안 목록을 가져오고 모든 비호환 인증서를 결정합니다.

인증서 정책 컨트롤러는 적용 기능을 지원하지 않습니다.

참고: 인증서 정책 컨트롤러는 tls.crt 키에서만 시크릿에서 인증서를 자동으로 찾습니다. 보안이 다른 키에 저장된 경우 키로 설정된 certificate_key_name 이라는 레이블을 추가하여 인증서 정책 컨트롤러에서 다른 키를 찾도록 알립니다. 예를 들어 보안에 sensor-cert.pem 이라는 키에 저장된 인증서가 포함된 경우 secret: certificate_key_name: sensor-cert.pem 에 다음 라벨을 추가합니다.

1.1.2.1. 인증서 정책 컨트롤러 YAML 구조

인증서 정책의 다음 예제를 보고 YAML 테이블의 요소를 검토합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: CertificatePolicy
metadata:
  name: certificate-policy-example
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  labelSelector:
    myLabelKey: myLabelValue
  remediationAction:
  severity:
  minimumDuration:
  minimumCADuration:
  maximumDuration:
  maximumCADuration:
  allowedSANPattern:
  disallowedSANPattern:
1.1.2.1.1. 인증서 정책 컨트롤러 YAML 테이블
표 1.2. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

값을 CertificatePolicy 로 설정하여 정책 유형을 나타냅니다.

metadata.name

필수 항목

정책을 식별하는 이름입니다.

metadata.labels

선택 사항

인증서 정책에서 category=system-and-information-integrity 레이블은 정책을 분류하고 인증서 정책을 쿼리할 수 있습니다. 인증서 정책에 category 키에 다른 값이 있는 경우 인증서 컨트롤러에서 값을 덮어씁니다.

spec.namespaceSelector

필수 항목

관리 클러스터에서 보안이 모니터링되는 네임스페이스를 결정합니다. includeexclude 매개 변수는 파일 경로 표현식을 허용하여 이름별로 네임스페이스를 포함 및 제외합니다. matchExpressionsmatchLabels 매개변수는 라벨에 포함할 네임스페이스를 지정합니다. Kubernetes 라벨 및 선택기 설명서를 참조하십시오. 결과 목록은 모든 매개변수의 결과 교집합을 사용하여 컴파일됩니다.

참고: 인증서 정책 컨트롤러의 namespaceSelector 가 네임스페이스와 일치하지 않으면 정책을 준수하는 것으로 간주됩니다.

spec.labelSelector

선택 사항

오브젝트의 특성 식별을 지정합니다. Kubernetes 라벨 및 선택기 설명서를 참조하십시오.

spec.remediationAction

필수 항목

정책 수정을 지정합니다. 매개 변수 값을 설정하여 알립니다. 인증서 정책 컨트롤러는 정보 기능만 지원합니다.

spec.severity

선택 사항

정책이 준수하지 않는 경우 심각도에 대해 사용자에게 알립니다. 다음과 같은 매개변수 값( 낮은,중간,높음 또는 중요 )을 사용합니다.

spec.minimumDuration

필수 항목

값을 지정하지 않으면 기본값은 100h 입니다. 이 매개변수는 인증서가 비준수로 간주되기 전에 가장 작은 기간(시간)을 지정합니다. 매개변수 값은 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.minimumCADuration

선택 사항

다른 인증서와 다른 값으로 만료될 수 있는 서명 인증서를 식별하도록 값을 설정합니다. 매개변수 값을 지정하지 않으면 CA 인증서 expiration은 minimumDuration 에 사용된 값입니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.maximumDuration

선택 사항

원하는 제한을 초과하는 기간으로 생성된 인증서를 식별하도록 값을 설정합니다. 매개변수는 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.maximumCADuration

선택 사항

정의된 제한을 초과하는 기간으로 생성된 서명 인증서를 식별하도록 값을 설정합니다. 매개변수는 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.allowedSANPattern

선택 사항

인증서에 정의된 모든 SAN 항목과 일치해야 하는 정규식입니다. 이 매개변수는 패턴에 대해 DNS 이름을 확인합니다. 자세한 내용은 Golang 정규식 구문을 참조하십시오.

spec.disallowedSANPattern

선택 사항

인증서에 정의한 SAN 항목과 일치하지 않아야 하는 정규식입니다. 이 매개변수는 패턴에 대해 DNS 이름을 확인합니다.

참고: 와일드카드 인증서를 감지하려면 다음 SAN 패턴을 사용하십시오. disallowedSANPattern: "[\\*]"

자세한 내용은 Golang 정규식 구문을 참조하십시오.

1.1.2.2. 인증서 정책 샘플

허브 클러스터에서 인증서 정책 컨트롤러가 생성되면 관리 클러스터에 복제 정책이 생성됩니다. 인증서 정책 샘플을 보려면 policy-certificate.yaml 을 참조하십시오.

1.1.2.3. 추가 리소스

1.1.3. 정책 세트 컨트롤러

정책 세트 컨트롤러는 동일한 네임스페이스에 정의된 정책에 대한 정책 상태 범위를 집계합니다. 동일한 네임스페이스에 있는 정책을 그룹화할 정책 세트(PolicySet)를 생성합니다. PolicySet의 모든 정책은 PolicySet 및 배치를 바인딩하는 Placement Binding 을 생성하여 선택한 클러스터에 함께 배치됩니다. 정책 세트는 hub 클러스터에 배포됩니다.

또한 정책이 여러 정책 세트의 일부인 경우 기존 및 새 배치 리소스는 정책에 남아 있습니다. 사용자가 정책 세트에서 정책을 제거하면 정책 세트에서 선택한 클러스터에는 정책이 적용되지 않지만 배치는 그대로 유지됩니다. 정책 세트 컨트롤러는 정책 세트 배치를 포함하는 클러스터의 위반만 확인합니다.

참고:

  • Red Hat Advanced Cluster Management 샘플 정책 세트는 클러스터 배치를 사용합니다. 클러스터 배치를 사용하는 경우 정책이 포함된 네임스페이스를 관리 클러스터 세트에 바인딩합니다. 클러스터 배치 사용에 대한 자세한 내용은 클러스터에 정책 배포를 참조하십시오.
  • 배치 리소스를 사용하려면 ManagedClusterSet 리소스를 ManagedClusterSetBinding 리소스를 사용하여 배치 리소스의 네임스페이스에 바인딩해야 합니다. 자세한 내용은 Creating a ManagedClusterSetBinding 리소스 를 참조하십시오.

다음 섹션에서 정책 세트 구조에 대한 자세한 내용을 알아보십시오.

1.1.3.1. 정책 세트 YAML 구조

정책 세트는 다음 YAML 파일과 유사할 수 있습니다.

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: demo-policyset
spec:
  policies:
  - policy-demo

---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: demo-policyset-pb
placementRef:
  apiGroup: cluster.open-cluster-management.io
  kind: Placement
  name: demo-policyset-pr
subjects:
- apiGroup: policy.open-cluster-management.io
  kind: PolicySet
  name: demo-policyset
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: demo-policyset-pr
spec:
  predicates:
  - requiredClusterSelector:
      labelSelector:
        matchExpressions:
          - key: name
            operator: In
            values:
              - local-cluster
1.1.3.2. 정책 세트 테이블

설명을 위해 다음 매개변수 표를 확인하십시오.

표 1.3. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1beta1 로 설정합니다.

kind

필수 항목

값을 PolicySet 으로 설정하여 정책 유형을 나타냅니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

spec

필수 항목

정책에 대한 구성 세부 정보를 추가합니다.

spec.policies

선택 사항

정책 세트에서 함께 그룹화할 정책 목록입니다.

1.1.3.3. 정책 세트 샘플
apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: pci
  namespace: default
spec:
  description: Policies for PCI compliance
  policies:
  - policy-pod
  - policy-namespace
status:
  compliant: NonCompliant
  placement:
  - placementBinding: binding1
    placement: placement1
    policySet: policyset-ps
1.1.3.4. 추가 리소스

1.1.4. Operator 정책 컨트롤러

Operator 정책 컨트롤러를 사용하면 클러스터 전체에서 Operator Lifecycle Manager Operator를 모니터링하고 설치할 수 있습니다. Operator 정책 컨트롤러를 사용하여 Operator의 다양한 부분을 모니터링하고 Operator에 대한 업데이트를 자동으로 처리하는 방법을 지정합니다.

또한 거버넌스 프레임워크를 사용하고 허브 클러스터의 정책 -templates 필드에 정책을 추가하여 운영자 정책을 관리 클러스터에 배포할 수도 있습니다.

operatorGroup 및 operator 정책의 서브스크립션 필드 내에서 템플릿 값을 사용할 수도 있습니다. 자세한 내용은 템플릿 처리를 참조하십시오.

1.1.4.1. 사전 요구 사항
  • Operator Lifecycle Manager는 관리 클러스터에서 사용할 수 있어야 합니다. 이는 Red Hat OpenShift Container Platform에서 기본적으로 활성화되어 있습니다.
  • 필수 액세스: 클러스터 관리자
1.1.4.2. Operator 정책 YAML 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1beta1 로 설정합니다.

kind

필수 항목

값을 OperatorPolicy 로 설정하여 정책 유형을 나타냅니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

spec.remediationAction

필수 항목

Operator 정책에 대한 remediationAction적용 되도록 설정된 경우 컨트롤러는 대상 관리 클러스터에 리소스를 생성하여 Operator를 설치하고 정책에 지정된 버전을 기반으로 업데이트를 승인합니다. + remediationAction 이 설정된 경우 컨트롤러는 업그레이드를 사용할 수 있는 경우를 포함하여 Operator의 상태만 보고합니다.

spec.operatorGroup

선택 사항

기본적으로 operatorGroup 필드가 지정되지 않은 경우 컨트롤러는 지원되는 경우 서브스크립션과 동일한 네임스페이스에 AllNamespaces 유형 OperatorGroup을 생성합니다. 이 리소스는 Operator 정책 컨트롤러에서 생성합니다.

spec.complianceType

필수 항목

클러스터에서 Operator의 원하는 상태를 지정합니다. musthave 로 설정하면 Operator가 발견되면 정책을 준수합니다. mustnothave 로 설정하면 Operator를 찾을 수 없는 경우 정책을 준수합니다.

spec.removalBehavior

선택 사항

complianceType: mustnothave 를 사용하여 OperatorPolicy 리소스를 적용할 때 유지 또는 제거해야 하는 리소스 유형을 결정합니다. complianceTypemusthave 로 설정하면 효과가 없습니다. - operatorGroupsKeep 또는 DeleteIfUnused 로 설정할 수 있습니다. 기본값은 DeleteIfUnusued 이며 다른 Operator에서 사용하지 않는 OperatorGroup 리소스만 제거합니다. - 서브스크립션Keep 또는 Delete 로 설정할 수 있습니다. 기본값은 Delete 입니다. - clusterServiceVersionsKeep 또는 Delete 로 설정할 수 있습니다. 기본값은 Delete. - customResourceDefinitionsKeep 또는 Delete 로 설정할 수 있습니다. 기본값은 Keep 입니다. 이 값을 Delete 로 설정하면 관리 클러스터의 CustomResourceDefintion 리소스가 제거되어 데이터가 손실될 수 있습니다.

spec.subscription

필수 항목

운영자 서브스크립션을 생성할 구성을 정의합니다. 다음 필드에 정보를 추가하여 Operator 서브스크립션을 생성합니다. 항목이 없는 경우 기본 옵션은 몇 가지 항목에 대해 선택됩니다.

  • channel: 지정하지 않으면 Operator 카탈로그에서 기본 채널이 선택됩니다. 기본값은 다른 OpenShift Container Platform 버전에서 다를 수 있습니다.
  • name: Operator의 패키지 이름을 지정합니다.
  • namespace: 지정하지 않으면 OpenShift Container Platform 관리 클러스터에 사용되는 기본 네임스페이스는 openshift-operators 입니다.
  • Source: 지정하지 않으면 Operator가 포함된 카탈로그가 선택됩니다.
  • sourceNamespace: 지정하지 않으면 Operator가 포함된 카탈로그의 네임스페이스가 선택됩니다.

    참고: upgradeApproval 에 대한 값을 정의하면 정책을 준수하지 않습니다.

spec.complianceConfig

선택 사항

이 매개변수를 사용하여 Operator와 연결된 특정 시나리오에 대한 규정 준수 동작을 정의합니다. 지원되는 값은 CompliantNonCompliant 인 각 옵션을 개별적으로 설정할 수 있습니다.

  • catalogSourceUnhealthy: Operator의 카탈로그 소스가 비정상인 경우 규정 준수를 정의합니다. 기본값은 가능한 업그레이드에만 영향을 미치므로 Compliant 입니다.
  • deploymentsUnavailable: Operator의 하나 이상의 배포를 완전히 사용할 수 없는 경우 규정 준수를 정의합니다. 기본값은 Operator가 제공하는 서비스의 가용성을 반영하므로 NonCompliant 입니다.
  • upgradesAvailable: Operator에 사용할 수 있는 업그레이드가 있는 경우 규정 준수를 정의합니다. 기존 Operator 설치가 올바르게 실행될 수 있으므로 기본값은 Compliant 입니다.

spec.upgradeApproval

필수 항목

upgradeApproval 필드가 자동으로 설정된 경우 정책이 적용 되도록 설정된 경우 클러스터의 버전 업그레이드가 정책에서 승인됩니다. 이 필드를 None 으로 설정하면 정책이 적용 되도록 설정된 경우 특정 Operator로 버전 업그레이드가 승인되지 않습니다.

spec.versions

선택 사항

호환되는 Operator 버전을 선언합니다. 필드가 비어 있으면 클러스터에서 실행 중인 모든 버전이 준수로 간주됩니다. 필드가 비어 있지 않은 경우 관리 클러스터의 버전이 정책을 준수하려면 목록의 버전 중 하나와 일치해야 합니다. 정책을 적용 하도록 설정되어 있고 목록이 비어 있지 않은 경우 여기에 나열된 버전은 클러스터의 컨트롤러에서 승인합니다.

1.1.4.3. 추가 리소스

1.2. 템플릿 처리

구성 정책 및 Operator 정책은 Golang 텍스트 템플릿을 포함할 수 있도록 지원합니다. 이러한 템플릿은 허브 클러스터 또는 해당 클러스터와 관련된 구성을 사용하여 대상 관리 클러스터에서 런타임 시 해결됩니다. 이를 통해 동적 콘텐츠로 정책을 정의하고 대상 클러스터에 사용자 지정된 Kubernetes 리소스를 알리거나 적용할 수 있습니다.

정책 정의에는 허브 클러스터 및 관리 클러스터 템플릿이 모두 포함될 수 있습니다. Hub 클러스터 템플릿은 허브 클러스터에서 먼저 처리된 다음 해결된 허브 클러스터 템플릿이 있는 정책 정의가 대상 클러스터로 전파됩니다. 관리 클러스터의 컨트롤러는 정책 정의에서 관리되는 클러스터 템플릿을 모두 처리한 다음 완전히 해결된 오브젝트 정의를 적용하거나 확인합니다.

템플릿은 Golang 템플릿 언어 사양을 준수해야 하며 확인된 템플릿에서 생성된 리소스 정의는 유효한 YAML이어야 합니다. 자세한 내용은 패키지 템플릿에 대한 Golang 설명서를 참조하십시오. 템플릿 검증의 오류는 정책 위반으로 인식됩니다. 사용자 지정 템플릿 함수를 사용하면 런타임 시 값이 교체됩니다.

중요:

  • 허브 클러스터 템플릿을 사용하여 시크릿 또는 기타 민감한 데이터를 전파하는 경우 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터가 있습니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는 fromSecret 또는 copySecretData 를 사용하거나 다른 값을 암호화하도록 보호합니다.
  • 인증서와 같은 여러 줄 문자열 값을 추가하면 항상 템플릿 파이프라인 끝에 | toRawJson | toLiteral 구문을 추가하여 줄 바꿈을 처리합니다. 예를 들어 Secret 리소스에서 인증서를 복사하여 ConfigMap 리소스에 포함하는 경우 템플릿 파이프라인이 다음 구문과 유사할 수 있습니다.

    ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt"  | base64dec | toRawJson | toLiteral }}'

    toRawJson 템플릿 함수는 입력 값을 YAML 구조에 영향을 미치지 않도록 새 줄이 이스케이프된 JSON 문자열로 변환합니다. toLiteral 템플릿 함수는 출력에서 외부 작은따옴표를 제거합니다. 예를 들어, '{{ 'hello\nworld' | toRawJson }}' 템플릿 파이프라인에 대해 템플릿이 처리되면 key: '"hello\nworld"' 입니다. 키의 출력: '{{ 'hello\nworld' | toRawJson | toLiteral }}' 템플릿 파이프라인은 key: "hello\nworld" 입니다.

hub 클러스터 및 관리형 클러스터 템플릿의 비교는 다음 표를 참조하십시오.

1.2.1. 허브 클러스터 및 관리형 클러스터 템플릿 비교

표 1.4. 비교표
Templateshub 클러스터관리형 클러스터

구문

Golang 텍스트 템플릿 사양

Golang 텍스트 템플릿 사양

구분 기호

{{Hub … hub}}

{{ … }}

컨텍스트

런타임 시 정책이 전파되는 대상 클러스터의 이름으로 확인되는 .ManagedClusterName 변수를 사용할 수 있습니다. .ManagedClusterLabels 변수를 사용할 수도 있으며, 이 변수는 정책이 전파되는 관리형 클러스터의 라벨과 키 맵으로 확인됩니다.

컨텍스트 변수 없음

액세스 제어

기본적으로 Policy 오브젝트와 동일한 네임스페이스에 있는 네임스페이스가 지정된 Kubernetes 리소스 및 정책이 제공하는 클러스터의 ManagedCluster 오브젝트만 참조할 수 있습니다.

또는 Policy 리소스와 동일한 네임스페이스의 서비스 계정에 대해 Policy 오브젝트의 spec.hubTemplateOptions.serviceAccountName 필드를 지정할 수 있습니다. 필드를 지정하면 모든 허브 클러스터 템플릿 조회에 서비스 계정이 사용됩니다.

참고: 서비스 계정에는 허브 클러스터 템플릿에서 조회된 리소스에 대한 목록감시 권한이 있어야 합니다.

클러스터의 모든 리소스를 참조할 수 있습니다.

함수

Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원하는 템플릿 함수 세트입니다. 자세한 내용은 템플릿 함수 를 참조하십시오. 조회 제한 사항은 액세스 제어 행을 참조하십시오.

hub 클러스터의 fromSecret 템플릿 기능은 결과 값을 관리되는 클러스터 네임스페이스에서 복제된 정책의 암호화된 문자열로 저장합니다.

동등한 호출은 다음 구문을 사용할 수 있습니다. {{hub "(lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}

템플릿 함수 세트는 Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원합니다. 자세한 내용은 템플릿 함수 를 참조하십시오.

함수 출력 스토리지

템플릿 기능의 출력은 관리 클러스터와 동기화되기 전에 Hub 클러스터의 각 관리 클러스터 네임스페이스의 Policy 리소스 오브젝트에 저장됩니다. 즉, hub 클러스터의 Policy 리소스 오브젝트에 대한 읽기 액세스 권한이 있는 모든 사용자와 관리 클러스터의 Configuration Policy 또는 OperatorPolicy 리소스 오브젝트에 대한 읽기 권한이 있는 사람이 템플릿 함수의 중요한 결과를 읽을 수 있습니다. 또한 etcd 암호화가 활성화된 경우 정책 리소스 오브젝트가 암호화되지 않습니다. 중요한 출력을 반환하는 템플릿 함수(예: 시크릿)를 사용할 때 이를 신중하게 고려하는 것이 좋습니다.

템플릿 기능의 출력은 정책 관련 리소스 오브젝트에 저장되지 않습니다.

정책 메타데이터

.PolicyMetadata 변수는 루트 정책의 값이 있는 ,namespace,labels, annotations 키가 있는 맵으로 확인됩니다.

컨텍스트 변수 없음

처리

처리는 클러스터에 복제된 정책을 전파하는 동안 허브 클러스터에서 런타임 시 수행됩니다. 정책 내의 정책 및 허브 클러스터 템플릿은 템플릿이 생성 또는 업데이트되는 경우에만 허브 클러스터에서 처리됩니다.

처리는 관리되는 클러스터에서 수행됩니다. 구성 정책은 정기적으로 처리되므로 확인된 오브젝트 정의를 참조된 리소스의 데이터로 자동으로 업데이트합니다. 참조된 리소스가 변경될 때마다 Operator 정책이 자동으로 업데이트됩니다.

처리 오류

허브 클러스터 템플릿의 오류는 정책이 적용되는 관리 클러스터에서 위반으로 표시됩니다.

관리형 클러스터 템플릿의 오류는 위반이 발생한 특정 대상 클러스터에서 위반으로 표시됩니다.

다음 항목을 계속 읽습니다.

1.2.2. 템플릿 함수

{{hub …​ hub}} 구분자를 사용하거나 {{ …​ }} 구분자를 사용하여 관리 클러스터에서 리소스별 및 일반 템플릿 기능과 같은 Kubernetes 리소스를 참조합니다. 편의를 위해 리소스별 기능을 사용하고 리소스의 콘텐츠에 보다 쉽게 액세스할 수 있도록 할 수 있습니다.

1.2.2.1. 템플릿 기능 설명

일반 함수를 사용하는 경우 더 고급인 lookup 을 사용하여 조회 중인 리소스의 YAML 구조를 숙지합니다. 이러한 함수 외에도 base64enc,base64dec,들여쓰기 ,autoindent ,toInt,toBool 등과 같은 유틸리티 함수를 사용할 수 있습니다.

YAML 구문을 사용하여 템플릿을 준수하려면 정책 리소스에 따옴표 또는 블록 문자(| 또는 > )를 사용하여 문자열로 템플릿을 정의해야 합니다. 이로 인해 해결된 템플릿 값도 문자열이 됩니다. 이를 재정의하려면 toInt 또는 toBool 을 템플릿의 최종 함수로 사용하여 값을 각각 정수 또는 부울로 해석하도록 강제 수행하는 추가 처리를 시작합니다.

지원되는 일부 사용자 지정 템플릿 함수에 대한 설명 및 예를 보려면 계속 읽으십시오.

1.2.2.1.1. fromSecret

fromSecret 함수는 시크릿에 지정된 데이터 키의 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.

func fromSecret (ns string, secretName string, datakey string) (dataValue string, err error)

이 기능을 사용하면 Kubernetes Secret 리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용할 때 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오.

대상 클러스터에 Secret 리소스를 적용하는 다음 구성 정책을 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      data: 1
        USER_NAME: YWRtaW4=
        PASSWORD: '{{ fromSecret "default" "localsecret" "PASSWORD" }}' 2
      kind: Secret 3
      metadata:
        name: demosecret
        namespace: test
      type: Opaque
  remediationAction: enforce
  severity: low
1
이 기능을 hub 클러스터 템플릿과 함께 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.
2
PASSWORD 데이터 키의 값은 대상 클러스터의 시크릿을 참조하는 템플릿입니다.
3
Kubernetes Secret 리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다. 데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다.

중요: 인증서와 같은 여러 줄 문자열 값을 추가하면 항상 템플릿 파이프라인 끝에 | toRawJson | toLiteral 구문을 추가하여 줄 바꿈을 처리합니다. 예를 들어 Secret 리소스에서 인증서를 복사하여 ConfigMap 리소스에 포함하는 경우 템플릿 파이프라인이 다음 구문과 유사할 수 있습니다.

ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt"  | base64dec | toRawJson | toLiteral }}'
  • toRawJson 템플릿 함수는 입력 값을 YAML 구조에 영향을 미치지 않도록 새 줄이 이스케이프된 JSON 문자열로 변환합니다.
  • toLiteral 템플릿 함수는 출력에서 외부 작은따옴표를 제거합니다. 예를 들어, '{{ 'hello\nworld' | toRawJson }}' 템플릿 파이프라인에 대해 템플릿이 처리되면 key: '"hello\nworld"' 입니다. 키의 출력: '{{ 'hello\nworld' | toRawJson | toLiteral }}' 템플릿 파이프라인은 key: "hello\nworld" 입니다.
1.2.2.1.2. fromConfigmap

fromConfigMap 함수는 구성 맵에 지정된 데이터 키의 값을 반환합니다. 이 기능을 사용하는 경우 Kubernetes ConfigMap 리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용하여 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오.

함수에 대해 다음 구문을 확인합니다.

func fromConfigMap (ns string, configmapName string, datakey string) (dataValue string, err Error)

대상 관리 클러스터에 Kubernetes 리소스를 적용하는 다음 구성 정책을 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromcm-lookup
  namespace: test-templates
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap 1
      apiVersion: v1
      metadata:
        name: demo-app-config
        namespace: test
      data: 2
        app-name: sampleApp
        app-description: "this is a sample app"
        log-file: '{{ fromConfigMap "default" "logs-config" "log-file" }}' 3
        log-level: '{{ fromConfigMap "default" "logs-config" "log-level" }}' 4
  remediationAction: enforce
  severity: low
1
Kubernetes ConfigMap 리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다.
2
데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다.
3
log-file 데이터 키의 값은 default 네임스페이스의 logs-config 구성 맵에서 로그 파일의 값을 검색하는 템플릿입니다.
4
로그 수준은 기본 네임스페이스에서 로그 수준 데이터 키의 값을 검색하는 tempalte입니다.
1.2.2.1.3. fromClusterClaim

fromClusterClaim 함수는 ClusterClaim 리소스의 Spec.Value 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.

func fromClusterClaim (clusterclaimName string) (dataValue string, err Error)

대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-clusterclaims 1
  namespace: default
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: sample-app-config
        namespace: default
      data: 2
        platform: '{{ fromClusterClaim "platform.open-cluster-management.io" }}' 3
        product: '{{ fromClusterClaim "product.open-cluster-management.io" }}'
        version: '{{ fromClusterClaim "version.openshift.io" }}'
  remediationAction: enforce
  severity: low
1
이 기능을 사용하는 경우 Kubernetes ClusterClaim 리소스의 이름을 입력합니다. ClusterClaim 리소스가 없는 경우 정책 위반이 발생합니다.
2
구성 값은 키-값 속성으로 설정할 수 있습니다.
3
platform data 키의 값은 platform.open-cluster-management.io 클러스터 클레임의 값을 검색하는 템플릿입니다. 마찬가지로 ClusterClaim 리소스에서 제품버전의 값을 검색합니다.
1.2.2.1.4. lookup

lookup 함수는 Kubernetes 리소스를 JSON 호환 맵으로 반환합니다. 이 기능을 사용하는 경우 Kubernetes 리소스의 API 버전, 종류, 네임스페이스, 이름 및 선택적 라벨 선택기를 입력합니다. 허브 클러스터 템플릿 내의 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오.

요청된 리소스가 없으면 빈 맵이 반환됩니다. 리소스가 존재하지 않고 값이 다른 템플릿 함수에 제공되는 경우 잘못된 값, 즉 예상 문자열 이라는 오류가 발생할 수 있습니다.

참고: 기본 템플릿 기능을 사용하므로 나중에 템플릿 기능에 올바른 유형이 제공됩니다. Sprig 오픈 소스 섹션을 참조하십시오.

함수에 대해 다음 구문을 확인합니다.

func lookup (apiversion string, kind string, namespace string, name string, labelselector ...string) (value string, err Error)

라벨 선택기 예제는 추가 리소스 섹션에서 Kubernetes 라벨 및 선택기 설명서에 대한 참조를 참조하십시오. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-lookup
  namespace: test-templates
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: demo-app-config
        namespace: test
      data: 1
        app-name: sampleApp
        app-description: "this is a sample app"
        metrics-url: | 2
          http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080
  remediationAction: enforce
  severity: low
1
구성 값은 키-값 속성으로 설정할 수 있습니다.
2
metrics-url 데이터 키의 값은 default 네임스페이스에서 v1/Service Kubernetes 리소스 지표 를 검색하는 템플릿이며 쿼리된 리소스에서 Spec.ClusterIP 값으로 설정됩니다.
1.2.2.1.5. base64enc

base64enc 함수는 입력 데이터 문자열base64 로 인코딩된 값을 반환합니다. 이 함수를 사용하면 문자열 값을 입력합니다. 함수에 대해 다음 구문을 확인합니다.

func base64enc (data string) (enc-data string)

base64enc 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      USER_NAME: '{{ fromConfigMap "default" "myconfigmap" "admin-user" | base64enc }}'
1.2.2.1.6. base64dec

base64dec 함수는 입력 enc-data 문자열base64 디코딩 값을 반환합니다. 이 함수를 사용하면 문자열 값을 입력합니다. 함수에 대해 다음 구문을 확인합니다.

func base64dec (enc-data string) (data string)

base64dec 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      app-name: |
         "{{ ( lookup "v1"  "Secret" "testns" "mytestsecret") .data.appname ) | base64dec }}"
1.2.2.1.7. 들여쓰기

들여쓰기 함수는 패딩된 데이터 문자열 을 반환합니다. 이 함수를 사용하면 특정 수의 공백을 사용하여 데이터 문자열을 입력합니다. 함수에 대해 다음 구문을 확인합니다.

func indent (spaces  int,  data string) (padded-data string)

들여쓰기 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      Ca-cert:  |
        {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls"  ).data  "ca.pem"  ) |  base64dec | indent 4  }}
1.2.2.1.8. autoindent

autoindent 함수는 템플릿 앞의 공백 수에 따라 선행 공간 수를 자동으로 결정하는 들여쓰기 함수처럼 작동합니다.

autoindent 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      Ca-cert:  |
        {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls"  ).data  "ca.pem"  ) |  base64dec | autoindent }}
1.2.2.1.9. toInt

toInt 함수는 입력 값의 정수 값을 캐스팅하고 반환합니다. 이 기능이 템플릿의 마지막 기능인 경우 소스 콘텐츠를 추가로 처리합니다. 이는 값이 YAML에서 정수로 해석되도록 하는 것입니다. 이 함수를 사용하면 정수로 캐스팅해야 하는 데이터를 입력합니다. 함수에 대해 다음 구문을 확인합니다.

func toInt (input interface{}) (output int)

toInt 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      vlanid:  |
        {{ (fromConfigMap "site-config" "site1" "vlan")  | toInt }}
1.2.2.1.10. toBool

toBool 함수는 입력 문자열을 부울로 변환하고 부울을 반환합니다. 이 기능이 템플릿의 마지막 기능인 경우 소스 콘텐츠를 추가로 처리합니다. 이는 값이 YAML에서 부울로 해석되도록 하는 것입니다. 이 함수를 사용하는 경우 부울로 변환해야 하는 문자열 데이터를 입력합니다. 함수에 대해 다음 구문을 확인합니다.

func toBool (input string) (output bool)

toBool 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      enabled:  |
        {{ (fromConfigMap "site-config" "site1" "enabled")  | toBool }}
1.2.2.1.11. 보호

보호 기능을 사용하면 hub 클러스터 정책 템플릿에서 문자열을 암호화할 수 있습니다. 정책이 평가될 때 관리 클러스터에서 자동으로 암호 해독됩니다. protect 기능을 사용하는 구성 정책의 다음 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      enabled:  |
        {{hub (lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}

이전 YAML 예제에는 lookup 함수를 사용하도록 정의된 기존 hub 클러스터 정책 템플릿이 있습니다. 관리형 클러스터 네임스페이스의 복제 정책에서 값은 다음 구문과 유사합니다. $ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204=

사용되는 각 암호화 알고리즘은 256비트 키를 사용하는 AES-CBC입니다. 각 암호화 키는 관리 클러스터마다 고유하며 30일마다 자동으로 순환됩니다.

이렇게 하면 암호 해독된 값이 관리 클러스터의 정책에 저장되지 않습니다.

즉시 교체하려면 허브 클러스터의 관리 클러스터 네임스페이스의 policy.open-cluster -management.io/last- rotated 주석을 삭제합니다. 그런 다음 새 암호화 키를 사용하도록 정책을 다시 처리합니다.

1.2.2.1.12. toLiteral

toLiteral 함수는 처리된 후 템플릿 문자열 주위에 따옴표를 모두 제거합니다. 이 함수를 사용하여 구성 맵 필드에서 매니페스트의 JSON 값으로 JSON 문자열을 변환할 수 있습니다. 다음 함수를 실행하여 매개변수 값에서 따옴표를 제거합니다.

key: '{{ "[\"10.10.10.10\", \"1.1.1.1\"]" | toLiteral }}'

toLiteral 기능을 사용하면 다음 업데이트가 표시됩니다.

key: ["10.10.10.10", "1.1.1.1"]
1.2.2.1.13. copySecretData

copySecretData 함수는 지정된 시크릿의 모든 데이터 콘텐츠를 복사합니다. 함수의 다음 샘플을 확인합니다.

complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: Secret
        metadata:
          name: my-secret-copy
        data: '{{ copySecretData "default" "my-secret" }}' 1
1
이 기능을 hub 클러스터 템플릿과 함께 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.
1.2.2.1.14. copyConfigMapData

copyConfigMapData 함수는 지정된 구성 맵의 모든 데이터 콘텐츠를 복사합니다. 함수의 다음 샘플을 확인합니다.

complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: my-secret-copy
        data: '{{ copyConfigMapData "default" "my-configmap" }}'
1.2.2.1.15. getNodesWithExactRoles

getNodesWithExactRoles 함수는 지정한 역할만 가진 노드 목록을 반환하고 node-role.kubernetes.io/worker 역할을 제외한 추가 역할이 있는 노드를 무시합니다. "infra" 노드를 선택하고 스토리지 노드를 무시하는 다음 샘플 기능을 확인합니다.

      complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: my-configmap
          data:
            infraNode: |
              {{- range $i,$nd := (getNodesWithExactRoles "infra").items }}
              node{{ $i }}: {{ $nd.metadata.name }}
              {{- end }}
            replicas: {{ len ((getNodesWithExactRoles "infra").items) | toInt }}
1.2.2.1.16. hasNodesWithExactRoles

hasNodesWithExactRoles 함수는 클러스터에 지정한 역할만 포함하는 노드가 포함된 경우 true 값을 반환하고 node-role.kubernetes.io/worker 역할을 제외한 추가 역할이 있는 노드를 무시합니다. 함수의 다음 샘플을 확인합니다.

      complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: my-configmap
        data:
          key: '{{ hasNodesWithExactRoles "infra" }}'
1.2.2.1.17. sprig 오픈 소스

Red Hat Advanced Cluster Management는 sprig 오픈 소스 프로젝트에 포함된 다음 템플릿 기능을 지원합니다.

표 1.5. 지원되는 커뮤니티 Sprig 함수 표
sprig 라이브러리함수

암호화 및 보안

htpasswd

날짜

date,mustToDate,now,toDate

기본

Default,empty fromJson,mustFromJson,ternary,toJson,toRawJson

사전 및 사전

dict,dig,hasKey,merge,mustMerge,set,unset

정수 계산

더하기,mul,div,round,sub

정수 슬라이스

until, untilStep,

목록

추가,concat,has,list,mustAppend,mustHas,mustPrepend,mustSlice,prepend,slice

문자열 함수

cat, hasPrefix ,hasPrefix,hasSuffix,join,mustRegexFind All,mustRegexFindAll,mustRegexMatch,quote,regexFind,regexFindAll, CryostatMatch,regexQuoteMeta,replace,split n ,splitn,substr,trim All,trunc,upper

버전 비교

semver, semverCompare

1.2.2.2. 추가 리소스

1.2.3. 구성 정책의 고급 템플릿 처리

관리된 클러스터 및 허브 클러스터 템플릿을 모두 사용하여 각 대상 클러스터 또는 정책 정의에서 하드 코드 구성 값에 대한 별도의 정책을 생성할 필요성을 줄일 수 있습니다. 보안을 위해 리소스별 및 허브 클러스터 템플릿의 일반 조회 기능은 허브 클러스터의 정책 네임스페이스로 제한됩니다.

중요: 허브 클러스터 템플릿을 사용하여 보안 또는 기타 민감한 데이터를 전파하면 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터 노출이 발생합니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는 fromSecret 또는 copySecretData 를 사용하거나 다른 값을 암호화하도록 보호합니다.

고급 템플릿 사용 사례에 대해 계속 읽습니다.

1.2.3.1. 재처리를 위한 특수 주석

Hub 클러스터 템플릿은 정책 생성 중에 참조된 리소스의 데이터 또는 참조된 리소스가 업데이트될 때 확인됩니다.

수동으로 업데이트를 시작해야 하는 경우 특수 주석 policy.open-cluster-management.io/trigger-update 를 사용하여 템플릿에서 참조하는 데이터의 변경 사항을 표시합니다. 특수 주석 값을 변경하면 템플릿 처리가 자동으로 시작됩니다. 또한 참조된 리소스의 최신 내용은 관리 클러스터에서 처리를 위해 전파되는 정책 정의에서 읽고 업데이트됩니다. 이 주석을 사용하는 방법은 매번 값을 하나씩 늘리는 것입니다.

1.2.3.2. 오브젝트 템플릿 처리

YAML 문자열 표현으로 오브젝트 템플릿을 설정합니다. object-template-raw 매개변수는 if-else 및 range 함수와 같은 고급 템플릿 사용 사례를 지원하는 선택적 매개변수입니다. 다음 예제는 kinds -category를 추가하도록 정의됩니다. 기본 네임스페이스의 모든 ConfigMap에 mammal 레이블은 name 키가 Sea Otter 와 같습니다.

object-templates-raw: |
  {{- range (lookup "v1" "ConfigMap" "default" "").items }}
  {{- if eq .data.name "Sea Otter" }}
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: {{ .metadata.name }}
        namespace: {{ .metadata.namespace }}
        labels:
          species-category: mammal
  {{- end }}
  {{- end }}

참고: spec.object-templatesspec.object-templates-raw 는 선택 사항이지만 두 매개변수 필드 중 하나만 설정해야 합니다.

고급 템플릿을 사용하여 관리 클러스터에 대한 인프라 MachineSet 오브젝트를 생성하고 구성하는 다음 정책 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: create-infra-machineset
spec:
  remediationAction: enforce
  severity: low
  object-templates-raw: |
    {{- /* Specify the parameters needed to create the MachineSet  */ -}}
    {{- $machineset_role := "infra" }}
    {{- $region := "ap-southeast-1" }}
    {{- $zones := list "ap-southeast-1a" "ap-southeast-1b" "ap-southeast-1c" }}
    {{- $infrastructure_id := (lookup "config.openshift.io/v1" "Infrastructure" "" "cluster").status.infrastructureName }}
    {{- $worker_ms := (index (lookup "machine.openshift.io/v1beta1" "MachineSet" "openshift-machine-api" "").items 0) }}
    {{- /* Generate the MachineSet for each zone as specified  */ -}}
    {{- range $zone := $zones }}
    - complianceType: musthave
      objectDefinition:
        apiVersion: machine.openshift.io/v1beta1
        kind: MachineSet
        metadata:
          labels:
            machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }}
          name: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }}
          namespace: openshift-machine-api
        spec:
          replicas: 1
          selector:
            matchLabels:
              machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }}
              machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }}
          template:
            metadata:
              labels:
                machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }}
                machine.openshift.io/cluster-api-machine-role: {{ $machineset_role }}
                machine.openshift.io/cluster-api-machine-type: {{ $machineset_role }}
                machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }}
            spec:
              metadata:
                labels:
                  node-role.kubernetes.io/{{ $machineset_role }}: ""
              taints:
                - key: node-role.kubernetes.io/{{ $machineset_role }}
                  effect: NoSchedule
              providerSpec:
                value:
                  ami:
                    id: {{ $worker_ms.spec.template.spec.providerSpec.value.ami.id }}
                  apiVersion: awsproviderconfig.openshift.io/v1beta1
                  blockDevices:
                    - ebs:
                        encrypted: true
                        iops: 2000
                        kmsKey:
                          arn: ''
                        volumeSize: 500
                        volumeType: io1
                  credentialsSecret:
                    name: aws-cloud-credentials
                  deviceIndex: 0
                  instanceType: {{ $worker_ms.spec.template.spec.providerSpec.value.instanceType }}
                  iamInstanceProfile:
                    id: {{ $infrastructure_id }}-worker-profile
                  kind: AWSMachineProviderConfig
                  placement:
                    availabilityZone: {{ $zone }}
                    region: {{ $region }}
                  securityGroups:
                    - filters:
                        - name: tag:Name
                          values:
                            - {{ $infrastructure_id }}-worker-sg
                  subnet:
                    filters:
                      - name: tag:Name
                        values:
                          - {{ $infrastructure_id }}-private-{{ $zone }}
                  tags:
                    - name: kubernetes.io/cluster/{{ $infrastructure_id }}
                      value: owned
                  userDataSecret:
                    name: worker-user-data
    {{- end }}
1.2.3.3. 템플릿 처리 우회

Red Hat Advanced Cluster Management에서 처리하지 않는 템플릿이 포함된 정책을 생성할 수 있습니다. 기본적으로 Red Hat Advanced Cluster Management는 모든 템플릿을 처리합니다.

허브 클러스터의 템플릿 처리를 바이패스하려면 {{ template content }}{{ '{{ template content }}' }} 로 변경해야 합니다.

또는 Policy:policy.open-cluster-management.io/disable-templates: "true"ConfigurationPolicy 섹션에 다음 주석을 추가할 수 있습니다. 이 주석이 포함된 경우 이전 해결 방법이 필요하지 않습니다. ConfigurationPolicy 용으로 템플릿 처리가 바이패스됩니다.

1.2.3.4. 추가 리소스

2장. 정책 배포

Kubernetes API는 정책을 정의하고 상호 작용하는 데 사용됩니다. 이 환경이 소프트웨어 엔지니어링, 보안 엔지니어링, 복원력, 보안 및 Kubernetes 클러스터에서 호스팅되는 워크로드에 대한 규정 준수를 위한 내부 엔터프라이즈 보안 표준을 충족하는지 확인해야 합니다.

2.1. 배포 옵션

CertificatePolicy,ConfigurationPolicy, OperatorPolicy 정책 및 Gatekeeper 제약 조건을 두 가지 방법으로 관리 클러스터에 배포할 수 있습니다. Hub 클러스터 정책 프레임워크를 사용하거나 외부 툴을 사용하여 정책을 배포하여 관리 클러스터에 정책을 배포 할 수 있습니다. 각 옵션에 대한 다음 설명을 확인합니다.

hub 클러스터 정책 프레임워크
첫 번째 접근 방식은 허브 클러스터에서 정책 프레임워크를 활용하는 것입니다. 여기에는 허브 클러스터의 Policy 오브젝트 내에서 정책 및 Gatekeeper 제약 조건을 정의하고 PlacementPlacementBinding 을 활용하여 정책이 배포되는 클러스터를 선택해야 합니다. 정책 프레임워크는 관리 클러스터로의 전달 및 허브 클러스터로 다시 상태 집계를 처리합니다. Policy 오브젝트는 Red Hat Advanced Cluster Management for Kubernetes 콘솔의 Policies 테이블에 표시됩니다.
외부 툴을 사용하여 정책 배포
또는 Red Hat OpenShift GitOps와 같은 외부 툴을 사용하여 정책 및 Gatekeeper 제약 조건을 관리형 클러스터에 직접 제공할 수 있습니다. 정책은 Red Hat Advanced Cluster Management 콘솔의 Discovered policies 표에 표시되어 있으며 구성 관리 전략이 이미 적용되어 있는 경우 유용한 옵션이 될 수 있지만 Red Hat Advanced Cluster Management 정책으로 전략을 보완하고자 합니다.

2.1.1. 정책 배포 비교 표

사용 사례에 더 적합한 배포 전략을 결정하는 데 도움이 되는 특정 기능을 지원하는 옵션을 알아보려면 다음 비교 표를 참조하십시오.

기능정책 프레임워크외부 툴로 배포

hub 클러스터 템플릿

제공됨

없음

관리형 클러스터 템플릿

제공됨

제공됨

Red Hat Advanced Cluster Management 콘솔 지원

제공됨

예, 정책 검색 표에서 외부 툴에서 배포한 정책을 볼 수 있습니다. 외부 툴과 함께 배포된 정책은 Governance 개요 대시보드에서 표시되지 않습니다. 관리 클러스터에서 검색을 활성화해야 합니다.

정책 그룹화

예, Policy 및 Policy Set 리소스를 통해 상태 및 배포가 조합될 수 있습니다.

외부 툴에서 배포할 때 정책에 직접 정책 그룹화를 사용할 수는 없지만 각 그룹화에 Argo CD 애플리케이션 오브젝트는 높은 수준의 상태를 제공합니다.

컴플라이언스 내역

허브 클러스터에 저장된 정책당 클러스터당 마지막 10개의 이벤트를 볼 수 있습니다.

아니요, 그러나 각 관리 클러스터의 컨트롤러 로그에서 규정 준수 기록을 스크랩할 수 있습니다.

정책 종속 항목

제공됨

아니요. 또는 Argo CD 동기화파 기능을 사용하여 종속성을 정의할 수 있습니다.

정책 생성기

제공됨

없음

OpenShift GitOps 상태 점검

2.13 이전 버전의 Argo CD에 대한 추가 구성을 완료해야 합니다.

제공됨

제공됨

정책 규정 준수 내역 API (기술 프리뷰)

제공됨

없음

관리형 클러스터에 기본 Kubernetes 매니페스트 및 Red Hat Advanced Cluster Management 정책을 적용하는 OpenShift GitOps

아니요. Red Hat Advanced Cluster Management Hub 클러스터에 정책을 배포해야 합니다.

제공됨

경고에 대한 허브 클러스터의 정책 규정 준수 지표

제공됨

없음

정책 미준수에서 Ansible 작업 실행

예, PolicyAutomation 리소스를 사용합니다.

없음

2.2. 추가 리소스

2.3. hub 클러스터 정책 프레임워크

정책을 생성 및 관리하고, 표준을 충족하기 위한 구성 가시성 및 수정을 얻으려면 Kubernetes 거버넌스 보안 정책 프레임워크에 Red Hat Advanced Cluster Management를 사용하십시오. Red Hat Advanced Cluster Management for Kubernetes 거버넌스는 기업이 자체 보안 정책을 도입할 수 있는 확장 가능한 정책 프레임워크를 제공합니다.

관리 클러스터 네임스페이스를 제외한 허브 클러스터의 모든 네임스페이스에 Policy 리소스를 생성할 수 있습니다. 관리형 클러스터 네임스페이스에 정책을 생성하면 Red Hat Advanced Cluster Management에서 삭제됩니다. 각 Red Hat Advanced Cluster Management 정책은 하나 이상의 정책 템플릿 정의로 구성할 수 있습니다. 정책 요소에 대한 자세한 내용은 이 페이지의 Policy YAML 테이블 섹션을 참조하십시오.

2.3.1. 요구 사항

  • 각 정책에는 정책 문서가 적용되는 클러스터를 정의하는 배치 리소스와 Kubernetes 정책에 대한 Red Hat Advanced Cluster Management를 바인딩하는 PlacementBinding 리소스가 필요합니다.

    정책 리소스는 관련 배치 정의를 기반으로 클러스터에 적용되며 특정 기준과 일치하는 관리 클러스터 목록을 볼 수 있습니다. environment=dev 레이블이 있는 모든 클러스터와 일치하는 샘플 배치 리소스는 다음 YAML과 유사합니다.

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-policy-role
    spec:
      predicates:
      - requiredClusterSelector:
        labelSelector:
        matchExpressions:
          - {key: environment, operator: In, values: ["dev"]}

    배치 및 지원되는 기준에 대한 자세한 내용은 클러스터 라이프사이클 설명서의 배치 개요 를 참조하십시오.

  • 배치 리소스 외에도 배치 리소스를 정책에 바인딩할 Placement Binding 을 생성해야 합니다. environment=dev 레이블이 있는 모든 클러스터와 일치하는 샘플 배치 리소스는 다음 YAML과 유사합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-role
    placementRef:
      name: placement-policy-role 1
      kind: Placement
      apiGroup: cluster.open-cluster-management.io
    subjects: 2
    - name: policy-role
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    1
    이전 샘플을 사용하는 경우 placementRef 섹션에서 배치 리소스의 이름을 업데이트하여 배치 이름과 일치하는지 확인합니다.
    2
    정책 이름과 일치하도록 제목 섹션에서 정책 이름을 업데이트해야 합니다. oc apply -f resource.yaml -n namespace 명령을 사용하여 PlacementPlacementbinding 리소스를 모두 적용합니다. 정책, 배치 및 배치 바인딩이 모두 동일한 네임스페이스에 생성되었는지 확인합니다.
  • 배치 리소스를 사용하려면 ManagedClusterSet 리소스를 ManagedClusterSet 리소스와 함께 배치 리소스의 네임스페이스에 바인딩 해야 합니다. 자세한 내용은 Creating a ManagedClusterSetBinding 리소스 를 참조하십시오.
  • 콘솔에서 정책에 대한 배치 리소스를 생성하면 배치 허용 오차의 상태가 배치 리소스에 자동으로 추가됩니다. 자세한 내용은 배치에 허용 오차 추가를 참조하십시오.

모범 사례: CLI(명령줄 인터페이스)를 사용하여 배치 리소스를 사용할 때 정책을 업데이트합니다.

2.3.2. hub 클러스터 정책 구성 요소

정책 구성 요소에 대한 자세한 내용은 다음 섹션에서 확인하십시오.

2.3.2.1. 정책 YAML 구조

정책을 생성할 때 필수 매개변수 필드 및 값을 포함해야 합니다. 정책 컨트롤러에 따라 다른 선택적 필드 및 값을 포함해야 할 수 있습니다. 정책에 대해 다음 YAML 구조를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  disabled:
  remediationAction:
  dependencies:
  - apiVersion: policy.open-cluster-management.io/v1
    compliance:
    kind: Policy
    name:
    namespace:
  policy-templates:
    - objectDefinition:
        apiVersion:
        kind:
        metadata:
          name:
        spec:
---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
bindingOverrides:
  remediationAction:
subFilter:
  name:
placementRef:
  name:
  kind: Placement
  apiGroup: cluster.open-cluster-management.io
subjects:
- name:
  kind:
  apiGroup:
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name:
spec:
2.3.2.2. 정책 YAML 테이블

정책 매개변수 설명에 대해 다음 표를 확인하십시오.

표 2.1. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.annotations

선택 사항

정책의 유효성을 검사하려는 표준 집합을 설명하는 보안 세부 정보 집합을 지정하는 데 사용됩니다. 여기에 설명된 모든 주석은 쉼표로 구분된 목록이 포함된 문자열로 표시됩니다.

참고: 정책 페이지에서 정책에 대해 정의한 표준 및 카테고리에 따라 정책 위반을 볼 수 있습니다.

bindingOverrides.remediationAction

선택 사항

이 매개변수를 적용 하도록 설정하면 구성 정책에 대한 관련 PlacementBinding 리소스의 수정 작업을 재정의할 수 있는 방법을 제공합니다. 기본값은 null 입니다.

subFilter

선택 사항

바인딩된 정책의 하위 집합을 선택하려면 이 매개변수를 restriction 로 설정합니다. 기본값은 null 입니다.

annotations.policy.open-cluster-management.io/standards

선택 사항

정책과 관련된 보안 표준의 이름 또는 이름입니다. 예를 들어 NIST(National Institute of Standards and Technology) 및 PCI(Payment Card Industry)가 있습니다.

annotations.policy.open-cluster-management.io/categories

선택 사항

보안 제어 범주는 하나 이상의 표준에 대한 특정 요구 사항을 나타냅니다. 예를 들어 시스템 및 정보 무결성 카테고리는 HIPAA 및 PCI 표준에서 요구하는 대로 귀하의 정책에 개인정보를 보호하기 위한 데이터 전송 프로토콜이 포함되어 있음을 나타낼 수 있습니다.

annotations.policy.open-cluster-management.io/controls

선택 사항

확인 중인 보안 컨트롤의 이름입니다. 예를 들어, 액세스 제어 또는 시스템 및 정보 무결성.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 지정된 경우 정의된 spec.remediationAction 값은 policy-templates 섹션의 하위 정책에 정의된 모든 remediationAction 매개변수를 덮어씁니다. 예를 들어 spec.remediationAction 값이 적용 되도록 설정된 경우 policy-templates 섹션의 remediationAction 이 런타임 중에 적용 되도록 설정됩니다.

spec.copyPolicyMetadata

선택 사항

정책을 관리 클러스터에 복제할 때 정책의 라벨 및 주석을 복사해야 하는지 여부를 지정합니다. true 로 설정하면 정책의 모든 레이블 및 주석이 복제된 정책에 복사됩니다. false 로 설정하면 정책 프레임워크별 정책 레이블 및 주석만 복제된 정책에 복사됩니다.

spec.dependencies

선택 사항

규정 준수에 대한 추가 고려 사항에 따라 자세히 설명된 종속성 오브젝트 목록을 만드는 데 사용됩니다.

spec.policy-templates

필수 항목

관리 클러스터에 적용할 하나 이상의 정책을 생성하는 데 사용됩니다.

spec.policy-templates.extraDependencies

선택 사항

정책 템플릿의 경우 이는 규정 준수에 대한 추가 고려 사항에 자세히 설명된 종속성 오브젝트 목록을 생성하는 데 사용됩니다.

spec.policy-templates.ignorePending

선택 사항

종속성 기준을 확인할 때까지 정책 템플릿을 준수하는 것으로 표시하는 데 사용됩니다.

중요: 일부 정책 종류는 적용 기능을 지원하지 않을 수 있습니다.

2.3.2.3. 정책 샘플 파일

역할에 대한 구성 정책인 다음 YAML 파일을 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: policy-role
  annotations:
    policy.open-cluster-management.io/standards: NIST SP 800-53
    policy.open-cluster-management.io/categories: AC Access Control
    policy.open-cluster-management.io/controls: AC-3 Access Enforcement
    policy.open-cluster-management.io/description:
spec:
  remediationAction: inform
  disabled: false
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name: policy-role-example
        spec:
          remediationAction: inform # the policy-template spec.remediationAction is overridden by the preceding parameter value for spec.remediationAction.
          severity: high
          namespaceSelector:
            include: ["default"]
          object-templates:
            - complianceType: mustonlyhave # role definition should exact match
              objectDefinition:
                apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                  name: sample-role
                rules:
                  - apiGroups: ["extensions", "apps"]
                    resources: ["deployments"]
                    verbs: ["get", "list", "watch", "delete","patch"]
---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: binding-policy-role
placementRef:
  name: placement-policy-role
  kind: Placement
  apiGroup: cluster.open-cluster-management.io
subjects:
- name: policy-role
  kind: Policy
  apiGroup: policy.open-cluster-management.io
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: placement-policy-role
spec:
  predicates:
  - requiredClusterSelector:
      labelSelector:
        matchExpressions:
        - {key: environment, operator: In, values: ["dev"]}

2.3.3. 추가 리소스

Red Hat Advanced Cluster Management 거버넌스 프레임워크의 관련 주제를 계속 읽으십시오.

2.3.4. 정책 종속 항목

종속성은 클러스터의 다른 정책이 특정 상태에 있는 경우에만 정책을 활성화하는 데 사용할 수 있습니다. 종속성 기준이 충족되지 않으면 정책에 Pending 로 레이블이 지정되고 관리 클러스터에서 리소스가 생성되지 않습니다. 정책 상태의 기준 상태에 대한 자세한 내용이 있습니다.

정책 종속성을 사용하여 오브젝트 적용 방법을 제어할 수 있습니다. 예를 들어 운영자에 대한 정책과 운영자가 관리하는 리소스에 대한 다른 정책이 있는 경우 두 번째 정책에 대한 종속성을 설정하여 Operator가 설치될 때까지 리소스를 생성하지 않도록 할 수 있습니다. 이는 관리 클러스터의 성능에 도움이 될 수 있습니다.

필수 액세스: 정책 관리자

upstream-compliance-operator 정책이 관리 클러스터에서 이미 호환되는 경우에만 ScanSettingBinding 이 생성되는 다음 정책 종속성 예제를 확인합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  annotations:
    policy.open-cluster-management.io/categories: CM Configuration Management
    policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    policy.open-cluster-management.io/standards: NIST SP 800-53
    policy.open-cluster-management.io/description:
  name: moderate-compliance-scan
  namespace: default
spec:
  dependencies: 1
  - apiVersion: policy.open-cluster-management.io/v1
    compliance: Compliant
    kind: Policy
    name: upstream-compliance-operator
    namespace: default
  disabled: false
  policy-templates:
  - extraDependencies: 2
    - apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      name: scan-setting-prerequisite
      compliance: Compliant
    ignorePending: false 3
    objectDefinition:
      apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: moderate-compliance-scan
      spec:
        object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ScanSettingBinding
            metadata:
              name: moderate
              namespace: openshift-compliance
            profiles:
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-moderate
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-moderate-node
            settingsRef:
              apiGroup: compliance.openshift.io/v1alpha1
              kind: ScanSetting
              name: default
        remediationAction: enforce
        severity: low
1
dependencies 필드는 Policy 오브젝트에 설정되며 요구 사항은 정책의 모든 정책 템플릿에 적용됩니다.
2
개별 정책 템플릿에 extraDependencies 필드를 설정할 수 있습니다. 예를 들어 이 매개변수는 구성 정책에 대해 설정할 수 있으며 정책에 설정된 종속성 외에도 충족해야 하는 기준을 정의합니다.
3
ignorePending 필드는 각 개별 정책 템플릿에 설정할 수 있으며 전체 정책 규정 준수를 계산할 때 해당 템플릿의 Pending 상태가 Compliant 또는 NonCompliant 로 간주되는지 여부를 구성합니다. 기본적으로 이 값은 false 로 설정되고 Pending 템플릿에서 정책을 NonCompliant 로 설정합니다. 이 템플릿을 true 로 설정하면 이 템플릿이 Pending 이므로 템플릿의 예상 상태가 될 때 유용합니다.

참고: 종속성을 사용하여 다른 클러스터의 정책 상태에 따라 한 클러스터에 정책을 적용할 수 없습니다.

2.3.5. 정책 규정 준수 기록 API 구성 (기술 프리뷰) (더 이상 사용되지 않음)

정책 준수 기록 API는 쿼리 가능한 형식으로 Red Hat Advanced Cluster Management for Kubernetes 정책 준수 이벤트의 장기 스토리지를 원하는 경우 선택적 기술 프리뷰 기능입니다. API를 사용하여 spec 필드와 같은 추가 세부 정보를 가져와서 정책을 감사하고 문제를 해결하고 클러스터에서 정책을 비활성화하거나 제거할 때 규정 준수 이벤트를 가져올 수 있습니다.

정책 준수 기록 API는 또한 감사 및 문제 해결에 도움이 되도록 CSV(콤마로 구분된 값) 정책 준수 이벤트의 요약을 생성할 수도 있습니다.

2.3.5.1. 사전 요구 사항
  • 정책 준수 기록 API에는 버전 13 이상에서 PostgreSQL 서버가 필요합니다.

    일부 Red Hat 지원 옵션에는 registry.redhat.io/rhel9/postgresql-15 컨테이너 이미지, registry.redhat.io/rhel8/postgresql-13 컨테이너 이미지, postgresql-server RPM 또는 postgresql/server 모듈 사용이 포함됩니다. 선택한 경로의 설정 및 구성에 대한 해당 공식 Red Hat 설명서를 검토하십시오. 정책 준수 기록 API는 표준 PostgreSQL과 호환되며 공식 Red Hat 지원 오퍼링에만 국한되지 않습니다.

  • Red Hat Advanced Cluster Management Hub 클러스터에서 이 PostgreSQL 서버에 연결할 수 있어야 합니다. PostgreSQL 서버가 허브 클러스터 외부에서 실행 중인 경우 허브 클러스터가 PostgreSQL 서버의 포트 5432에 연결할 수 있도록 라우팅 및 방화벽 구성을 확인합니다. PostgreSQL 구성에서 재정의된 경우 이 포트가 다른 값일 수 있습니다.
2.3.5.2. 규정 준수 기록 API 활성화

API에 정책 규정 준수 이벤트를 기록하도록 관리형 클러스터를 구성합니다. 모든 클러스터 또는 클러스터의 하위 집합에서 이를 활성화할 수 있습니다. 다음 단계를 완료합니다.

  1. PostgreSQL 서버를 클러스터 관리자로 구성합니다. Red Hat Advanced Cluster Management Hub 클러스터에 PostgreSQL을 배포한 경우 psql 명령을 사용하도록 PostgreSQL 포트를 일시적으로 포트 전달하십시오. 다음 명령을 실행합니다.

    oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432
  2. 다른 터미널에서 다음 명령과 유사한 PostgreSQL 서버에 로컬로 연결합니다.

    psql 'postgres://postgres:@127.0.0.1:5432/postgres'
  3. 다음 SQL 문을 사용하여 Red Hat Advanced Cluster Management Hub 클러스터에 대한 사용자 및 데이터베이스를 생성합니다.

    CREATE USER "rhacm-policy-compliance-history" WITH PASSWORD '<replace with password>';
    CREATE DATABASE "rhacm-policy-compliance-history" WITH OWNER="rhacm-policy-compliance-history";
  4. 이 데이터베이스를 정책 준수 기록 API에 사용하도록 governance-policy-database Secret 리소스를 생성합니다. 다음 명령을 실행합니다.

    oc -n open-cluster-management create secret generic governance-policy-database \ 1
        --from-literal="user=rhacm-policy-compliance-history" \
        --from-literal="password=rhacm-policy-compliance-history" \
        --from-literal="host=<replace with host name of the Postgres server>" \ 2
        --from-literal="dbname=ocm-compliance-history" \
      --from-literal="sslmode=verify-full" \
        --from-file="ca=<replace>" 3
    1
    Red Hat Advanced Cluster Management가 설치된 네임스페이스를 추가합니다. 기본적으로 Red Hat Advanced Cluster Management는 open-cluster-management 네임스페이스에 설치됩니다.
    2
    PostgresQL 서버의 호스트 이름을 추가합니다. Red Hat Advanced Cluster Management Hub 클러스터에 PostgreSQL 서버를 배포하고 클러스터 외부에 노출되지 않는 경우 호스트 값으로 Service 오브젝트를 사용할 수 있습니다. 형식은 < service name>.<namespace>.svc 입니다. 이 접근 방식은 Red Hat Advanced Cluster Management Hub 클러스터의 네트워크 정책에 따라 다릅니다.
    3
    PostgreSQL 서버의 TLS 인증서에 서명한 ca data 필드에 인증 기관 인증서 파일을 지정해야 합니다. 이 값을 지정하지 않으면 데이터베이스 연결의 보안을 줄이기 때문에 권장되지 않지만 sslmode 값을 적절하게 변경해야 합니다.
  5. cluster.open-cluster-management.io/backup 레이블을 추가하여 Red Hat Advanced Cluster Management hub 클러스터 복원 작업의 Secret 리소스를 백업합니다. 다음 명령을 실행합니다.

    oc -n open-cluster-management label secret governance-policy-database cluster.open-cluster-management.io/backup=""
  6. PostgreSQL 연결을 사용자 지정하려면 connectionURL data 필드를 직접 사용하고 PostgreSQL 연결 URI 형식으로 값을 제공합니다. 암호의 특수 문자는 URL로 인코딩되어야 합니다. 한 가지 옵션은 Python을 사용하여 암호의 URL 인코딩 형식을 생성하는 것입니다. 예를 들어 암호가 $uper<Secr&t% >인 경우 다음 Python 명령을 실행하여 출력 %24uper%3CSecr% 25%3E:

    python -c 'import urllib.parse; import sys; print(urllib.parse.quote(sys.argv[1]))' '$uper<Secr&t%>'
  7. governance-policy-database 시크릿 을 생성한 후 명령을 실행하여 정책 규정 준수 기록 API를 테스트합니다. OpenShift Route 오브젝트는 동일한 네임스페이스에 자동으로 생성됩니다. Red Hat Advanced Cluster Management Hub 클러스터의 경로가 신뢰할 수 있는 인증서를 사용하지 않는 경우 curl 명령에 -k 플래그를 제공하여 TLS 확인을 건너뛰도록 선택할 수 있습니다.

    curl -H "Authorization: Bearer $(oc whoami --show-token)" \
        "https://$(oc -n open-cluster-management get route governance-history-api -o jsonpath='{.spec.host}')/api/v1/compliance-events"
    • 성공하면 curl 명령은 다음 메시지와 유사한 값을 반환합니다.

      {"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}
    • 성공하지 못하면 curl 명령에서 두 메시지 중 하나를 반환할 수 있습니다.

      {"message":"The database is unavailable"}
      {"message":"Internal Error"}
    • 메시지가 표시되면 다음 명령을 사용하여 open-cluster-management 네임스페이스의 Kubernetes 이벤트를 확인합니다.

      oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBError
      1. event에서 governance-policy-propagator 로그를 볼 수 있는 지침을 수신하는 경우 다음 명령을 실행합니다.

        oc -n open-cluster-management logs -l name=governance-policy-propagator -f

      사용자, 암호 또는 데이터베이스가 잘못 지정되었음을 나타내는 오류 메시지가 표시될 수 있습니다. 다음 메시지 예제를 참조하십시오.

    2024-03-05T12:17:14.500-0500	info	compliance-events-api	complianceeventsapi/complianceeventsapi_controller.go:261	The database connection failed: pq: password authentication failed for user "rhacm-policy-compliance-history"
  8. 다음 명령을 사용하여 올바른 PostgreSQL 연결 설정으로 governance-policy-database Secret 리소스를 업데이트합니다.

    oc -n open-cluster-management edit secret governance-policy-database
2.3.5.3. 규정 준수 기록 API URL 설정

정책 규정 준수 기록 API URL을 설정하여 관리 클러스터에서 기능을 활성화합니다. 다음 단계를 완료합니다.

  1. 다음 명령을 사용하여 정책 규정 준수 기록 API의 외부 URL을 검색합니다.

    echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"

    출력은 Red Hat Advanced Cluster Management Hub 클러스터의 도메인 이름과 유사할 수 있습니다.

    https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
  2. 다음 예와 유사한 AddOnDeploymentConfig 오브젝트를 생성합니다.

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: AddOnDeploymentConfig
    metadata:
      name: governance-policy-framework
      namespace: open-cluster-management
    spec:
      customizedVariables:
        - name: complianceHistoryAPIURL
          value: <replace with URL from previous command>
    • value 매개변수 값을 규정 준수 기록 외부 URL로 바꿉니다.
2.3.5.3.1. 모든 관리 클러스터에서 활성화

모든 관리 클러스터에서 규정 준수 기록 API를 활성화하여 관리 클러스터의 규정 준수 이벤트를 기록합니다. 다음 단계를 완료합니다.

  1. 다음 명령과 함께 AddOnDeploymentConfig 를 사용하도록 governance-policy-framework ClusterManagementAddOn 오브젝트를 구성합니다.

    oc edit ClusterManagementAddOn governance-policy-framework
  2. spec.supportedConfigs 배열을 추가하거나 업데이트합니다. 리소스에 다음 구성이 있을 수 있습니다.

      - group: addon.open-cluster-management.io
        resource: addondeploymentconfigs
        defaultConfig:
          name: governance-policy-framework
          namespace: open-cluster-management
2.3.5.3.2. 단일 관리형 클러스터에서 규정 준수 기록 활성화

단일 관리형 클러스터에서 규정 준수 기록 API를 활성화하여 관리 클러스터의 규정 준수 이벤트를 기록합니다. 다음 단계를 완료합니다.

  1. 관리 클러스터 네임스페이스에서 governance-policy-framework ManagedClusterAddOn 리소스를 구성합니다. 다음 명령을 사용하여 Red Hat Advanced Cluster Management Hub 클러스터에서 다음 명령을 실행합니다.

    oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-framework
    • &lt ;manage-cluster-namespace&gt; 자리 표시자를 활성화하려는 관리 클러스터 이름으로 교체합니다.
  2. 다음 예와 유사한 항목을 갖도록 spec.configs 배열을 추가하거나 업데이트합니다.

    - group: addon.open-cluster-management.io
      resource: addondeploymentconfigs
      name: governance-policy-framework
      namespace: open-cluster-management
  3. 구성을 확인하려면 관리 클러스터의 배포가 --compliance-api-url 컨테이너 인수를 사용하고 있는지 확인합니다. 다음 명령을 실행합니다.

    oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'

    출력은 다음과 유사할 수 있습니다.

    ["--enable-lease=true","--hub-cluster-configfile=/var/run/klusterlet/kubeconfig","--leader-elect=false","--log-encoder=console","--log-level=0","--v=-1","--evaluation-concurrency=2","--client-max-qps=30","--client-burst=45","--disable-spec-sync=true","--cluster-namespace=local-cluster","--compliance-api-url=https://governance-history-api-open-cluster-management.apps.openshift.redhat.com"]

    새 정책 규정 준수 이벤트는 정책 준수 기록 API에 기록됩니다.

    1. 정책 준수 이벤트가 특정 관리 클러스터에 기록되지 않는 경우 영향을 받는 클러스터의 governance-policy-framework 로그를 확인합니다.

      oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
    2. 다음 메시지와 유사한 로그 메시지가 표시됩니다. 메시지 값이 비어 있으면 정책 규정 준수 기록 API URL이 올바르지 않거나 네트워크 통신 문제가 발생합니다.

      024-03-05T19:28:38.063Z        info    policy-status-sync      statussync/policy_status_sync.go:750    Failed to record the compliance event with the compliance API. Will requeue.       {"statusCode": 503, "message": ""}
    3. 정책 규정 준수 기록 API URL이 잘못된 경우 다음 명령을 사용하여 허브 클러스터의 URL을 편집합니다.
    oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework

    + 참고: 네트워크 통신 문제가 발생하면 네트워크 인프라를 기반으로 문제를 진단해야 합니다.

2.3.5.4. 추가 리소스

2.3.6. 정책 생성기 통합

Policy Generator를 통합하여 Kubernetes 정책에 대한 Red Hat Advanced Cluster Management를 자동으로 빌드할 수 있습니다. 정책 생성기를 통합하려면 정책 생성기를 참조하십시오. ???

정책 생성기로 수행할 수 있는 작업의 예는 Compliance Operator를 설치하는 정책 생성을 참조하십시오.

2.3.7. 정책 생성기

Policy Generator는 Red Hat Advanced Cluster Management for Kubernetes 애플리케이션 라이프사이클 서브스크립션의 일부입니다. Red Hat OpenShift GitOps 워크플로는 Kustomize를 사용하여 Red Hat Advanced Cluster Management 정책을 생성합니다. Policy Generator는 Kubernetes 매니페스트 YAML 파일에서 Red Hat 고급 클러스터 관리 정책을 빌드합니다. 이 정책은 이를 구성하는 데 사용되는 PolicyGenerator 매니페스트 YAML 파일을 통해 제공됩니다. 정책 생성기는 Kustomize 생성기 플러그인으로 구현됩니다. Kustomize에 대한 자세한 내용은 Kustomize 문서를 참조하십시오.

정책 생성기에 대한 자세한 내용은 다음 섹션을 참조하십시오.

2.3.7.1. 정책 생성기 기능

Policy Generator와 Red Hat Advanced Cluster Management 애플리케이션 라이프사이클 서브스크립션 OpenShift GitOps 워크플로를 통합하면 Red Hat Advanced Cluster Management 정책을 통해 Kubernetes 리소스 오브젝트를 관리형 OpenShift Container Platform 클러스터에 배포할 수 있습니다.

정책 생성기를 사용하여 다음 작업을 완료합니다.

  • Kustomize 디렉터리에서 생성된 매니페스트를 포함하여 Kubernetes 매니페스트 파일을 Red Hat Advanced Cluster Management 구성 정책으로 변환합니다.
  • 생성된 Red Hat Advanced Cluster Management 정책에 삽입하기 전에 입력 Kubernetes 매니페스트를 패치합니다.
  • Red Hat Advanced Cluster Management for Kubernetes를 통해 Gatekeeper 정책 위반에 대해 보고할 수 있도록 추가 구성 정책을 생성합니다.
  • 허브 클러스터에서 정책 세트를 생성합니다.
2.3.7.2. 정책 생성기 구성 구조

정책 생성기는 PolicyGenerator 종류 및 policy.open-cluster-management.io/v1 API 버전의 매니페스트로 구성된 Kustomize 생성기 플러그인입니다. 구성 구조에 대해 알아보려면 계속 읽습니다.

  • 플러그인을 사용하려면 kustomization.yaml 파일에 generators 섹션을 추가합니다. 다음 예제를 확인합니다.

    generators:
      - policy-generator-config.yaml 1
    1
    이전 예에서 참조되는 policy-generator-config.yaml 파일은 생성할 정책의 지침이 있는 YAML 파일입니다.
  • 간단한 PolicyGenerator 구성 파일은 policyDefaultspolicies 와 다음 예와 유사할 수 있습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: config-data-policies
    policyDefaults:
      namespace: policies
      policySets: []
    policies:
      - name: config-data
        manifests:
          - path: configmap.yaml 1
    1
    configmap.yaml 파일은 정책에 포함할 Kubernetes 매니페스트 YAML 파일을 나타냅니다. 또는 경로를 Kustomize 디렉터리 또는 여러 Kubernetes 매니페스트 YAML 파일이 있는 디렉터리를 설정할 수 있습니다. 다음 ConfigMap 예제를 확인합니다.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-config
      namespace: default
    data:
      key1: value1
      key2: value2
  • object-templates-raw 매니페스트를 사용하여 추가한 콘텐츠로 ConfigurationPolicy 리소스를 자동으로 생성할 수 있습니다. 예를 들어 다음 구문을 사용하여 매니페스트 파일을 생성할 수 있습니다.

    object-templates-raw: |
      {{- range (lookup "v1" "ConfigMap" "my-namespace" "").items }}
      - complianceType: musthave
        objectDefinition:
          kind: ConfigMap
          apiVersion: v1
          metadata:
            name: {{ .metadata.name }}
            namespace: {{ .metadata.namespace }}
            labels:
              i-am-from: template
      {{- end }}
  • 매니페스트 파일을 생성한 후 PolicyGenerator 구성 파일을 생성할 수 있습니다. 다음 YAML 예제 및 경로 에서는 manifest.yaml 파일의 경로를 입력합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: config-data-policies
    policyDefaults:
      namespace: policies
      policySets: []
    policies:
      - name: config-data
        manifests:
          - path: manifest.yaml
  • 생성된 정책 리소스 및 생성된 배치 리소스 및 Placement Binding 리소스는 다음 예와 유사할 수 있습니다. 참고: 리소스에 대한 사양은 Policy Generator 구성 참조 테이블에 설명되어 있습니다.

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-config-data
      namespace: policies
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions: []
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-config-data
      namespace: policies
    placementRef:
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
      name: placement-config-data
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: config-data
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/description:
      name: config-data
      namespace: policies
    spec:
      disabled: false
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: config-data
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition:
                apiVersion: v1
                data:
                  key1: value1
                  key2: value2
                kind: ConfigMap
                metadata:
                  name: my-config
                  namespace: default
            remediationAction: inform
            severity: low
2.3.7.3. 정책 생성기 구성 참조 테이블

네임스페이스 를 제외한 policyDefaults 섹션의 모든 필드는 각 정책에 대해 재정의할 수 있으며 policySetDefaults 섹션의 모든 필드를 각 정책 세트에 대해 재정의할 수 있습니다.

표 2.2. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

값을 PolicyGenerator 로 설정하여 정책 유형을 나타냅니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

placementBindingDefaults.name

선택 사항

여러 정책에서 동일한 배치를 사용하는 경우 이 이름은 결과 placement Binding 에 대한 고유 이름을 생성하여 배치를 참조하는 정책 배열과 바인딩하는 데 사용됩니다.

policyDefaults

필수 항목

여기에 나열된 기본값은 네임스페이스 를 제외하고 정책 배열의 항목으로 재정의됩니다.

policyDefaults.namespace

필수 항목

모든 정책의 네임스페이스입니다.

policyDefaults.complianceType

선택 사항

매니페스트를 클러스터의 오브젝트와 비교할 때 정책 컨트롤러 동작을 결정합니다. 사용할 수 있는 값은 musthave,mustonlyhave 또는 mustnothave 여야 합니다. 기본값은 musthave 입니다.

policyDefaults.metadataComplianceType

선택 사항

매니페스트 메타데이터 섹션을 클러스터의 오브젝트와 비교할 때 complianceType 을 재정의합니다. 사용할 수 있는 값은 있어야 하며 반드시 있어야 합니다. 메타데이터에 대한 complianceType 을 재정의하지 않도록 기본값은 비어 있습니다({}).

policyDefaults.categories

선택 사항

policy.open-cluster-management.io/categories 주석에 사용할 카테고리의 배열입니다. 기본값은 CM 구성 관리 입니다.

policyDefaults.controls

선택 사항

policy.open-cluster-management.io/controls 주석에서 사용할 제어 배열입니다. 기본값은 CM-2 Baseline Configuration 입니다.

policyDefaults.standards

선택 사항

policy.open-cluster-management.io/standards 주석에 사용할 표준 배열입니다. 기본값은 NIST SP 800-53 입니다.

policyDefaults.policyAnnotations

선택 사항

정책이 metadata.annotations 섹션에 포함하는 주석입니다. 정책에 지정되지 않는 한 모든 정책에 적용됩니다. 기본값은 비어 있습니다({}).

policyDefaults.configurationPolicyAnnotations

선택 사항

생성된 구성 정책에 설정할 주석의 키-값 쌍입니다. 예를 들어 {"policy.open-cluster-management.io/disable-templates": "true"} 매개변수를 정의하여 정책 템플릿을 비활성화할 수 있습니다. 기본값은 비어 있습니다({}).

policyDefaults.copyPolicyMetadata

선택 사항

모든 정책에 대한 레이블 및 주석을 복사하여 복제본 정책에 추가합니다. 기본적으로 true 로 설정합니다. false 로 설정하면 정책 프레임워크별 정책 레이블 및 주석만 복제된 정책에 복사됩니다.

policyDefaults.customMessage

선택 사항

현재 규정 준수에 따라 지정된 Go 템플릿 중 하나를 사용하도록 구성 정책에서 내보내는 규정 준수 메시지를 구성합니다.

policyDefaults.severity

선택 사항

정책 위반의 심각도입니다. 기본값은 낮음 입니다.

policyDefaults.disabled

선택 사항

정책이 비활성화되었는지 여부, 즉 전파되지 않고 결과적으로 상태가 없습니다. 정책을 활성화하는 기본값은 false 입니다.

policyDefaults.remediationAction

선택 사항

정책의 수정 메커니즘입니다. 매개변수 값은 enforceinform 입니다. 기본값은 inform 입니다.

policyDefaults.namespaceSelector

네임스페이스가 지정되지 않은 네임스페이스된 오브젝트에 필요합니다.

관리 클러스터에서 오브젝트가 적용되는 네임스페이스를 결정합니다. includeexclude 매개 변수는 파일 경로 표현식을 허용하여 이름별로 네임스페이스를 포함 및 제외합니다. matchExpressionsmatchLabels 매개변수는 레이블별로 포함할 네임스페이스를 지정합니다. Kubernetes 레이블 및 선택기 설명서를 읽습니다. 결과 목록은 모든 매개변수의 결과 교집합을 사용하여 컴파일됩니다.

policyDefaults.evaluationInterval

선택 사항

특정 규정 준수 상태에 있을 때 평가할 정책의 빈도를 지정합니다. 매개변수 준수비준 수를 사용합니다. 규정 준수비준수 매개변수의 기본값은 Kubernetes API 서버를 폴링하는 대신 Kubernetes API 감시를 활용하는 것입니다.

관리 클러스터에 리소스가 부족하면 Kubernetes API 및 정책 컨트롤러에서 CPU 및 메모리 사용량을 줄이기 위해 평가 간격을 긴 폴링 간격으로 설정할 수 있습니다. 이는 기간 단위의 형식입니다. 예를 들어 1h25m3s 는 1시간, 25분, 3초를 나타냅니다. 또한 특정 규정 준수 상태에 있는 정책을 평가하지 않도록 never 로 설정할 수도 있습니다.

policyDefaults.evaluationInterval.compliant

선택 사항

규정 준수 정책의 평가 빈도를 지정합니다. 이전 폴링 동작을 활성화하려면 이 매개변수를 10s 로 설정합니다.

policyDefaults.evaluationInterval.noncompliant

선택 사항

준수하지 않는 정책의 평가 빈도를 지정합니다. 이전 폴링 동작을 활성화하려면 이 매개변수를 10s 로 설정합니다.

policyDefaults.pruneObjectBehavior

선택 사항

정책을 삭제할 때 정책에 의해 생성되거나 모니터링되는 오브젝트를 삭제해야 하는지 여부를 결정합니다. 정책의 수정 작업이 적용 되도록 설정된 경우에만 정리가 수행됩니다. 예제 값은 DeleteIfCreated,DeleteAll 또는 None 입니다. 기본값은 None 입니다.

policyDefaults.recreateOption

선택 사항

업데이트가 필요할 때 오브젝트를 삭제하고 다시 생성할지 여부를 설명합니다. IfRequired 값은 변경할 수 없는 필드를 업데이트할 때 오브젝트를 다시 생성합니다. 시험 실행 업데이트 지원이 없으면 IfRequired 가 클러스터에 영향을 미치지 않습니다. 불일치가 감지되면 항상 개체를 다시 생성합니다.

recreate Option 값이 적용되지 않음을 알리기 위해 remediationAction 매개변수가 설정된 경우 기본값은 None 입니다.

policyDefaults.recordDiff

선택 사항

정책에서 클러스터의 오브젝트와 오브젝트Definition 간의 차이점을 로깅할지 여부와 위치를 지정합니다. 차이를 기록하지 않으려면 컨트롤러 로그 또는 None 의 차이를 기록하려면 Log 로 설정합니다. 기본적으로 이 매개변수는 차이를 기록하지 않기 위해 비어 있습니다.

policyDefaults.dependencies

선택 사항

이 정책을 적용하기 전에 특정 규정 준수 상태에 있어야 하는 오브젝트 목록입니다. policyDefaults.orderPoliciestrue 로 설정된 경우 지정할 수 없습니다.

policyDefaults.dependencies[].name

필수 항목

종속되는 오브젝트의 이름입니다.

policyDefaults.dependencies[].namespace

선택 사항

종속되는 오브젝트의 네임스페이스입니다. 기본값은 정책 생성기에 설정된 정책의 네임스페이스입니다.

policyDefaults.dependencies[].compliance

선택 사항

오브젝트가 있어야 하는 규정 준수 상태입니다. 기본값은 Compliant 입니다.

policyDefaults.dependencies[].kind

선택 사항

오브젝트의 종류입니다. 기본적으로 kind는 Policy 로 설정되지만 ConfigurationPolicy 와 같은 규정 준수 상태가 있는 다른 종류일 수도 있습니다.

policyDefaults.dependencies[].apiVersion

선택 사항

오브젝트의 API 버전입니다. 기본값은 policy.open-cluster-management.io/v1 입니다.

policyDefaults.description

선택 사항

생성할 정책에 대한 설명입니다.

policyDefaults.extraDependencies

선택 사항

이 정책을 적용하기 전에 특정 규정 준수 상태에 있어야 하는 오브젝트 목록입니다. 정의한 종속 항목은 종속 항목 목록과 별도로 각 정책 템플릿(예: ConfigurationPolicy)에 추가됩니다. policyDefaults.orderManifeststrue 로 설정된 경우 지정할 수 없습니다.

policyDefaults.extraDependencies[].name

필수 항목

종속되는 오브젝트의 이름입니다.

policyDefaults.extraDependencies[].namespace

선택 사항

종속되는 오브젝트의 네임스페이스입니다. 기본적으로 값은 정책 생성기에 설정된 정책의 네임스페이스로 설정됩니다.

policyDefaults.extraDependencies[].compliance

선택 사항

오브젝트가 있어야 하는 규정 준수 상태입니다. 기본값은 Compliant 입니다.

policyDefaults.extraDependencies[].kind

선택 사항

오브젝트의 종류입니다. 기본값은 Policy 이지만 ConfigurationPolicy 와 같은 규정 준수 상태가 있는 다른 종류일 수도 있습니다.

policyDefaults.extraDependencies[].apiVersion

선택 사항

오브젝트의 API 버전입니다. 기본값은 policy.open-cluster-management.io/v1 입니다.

policyDefaults.ignorePending

선택 사항

정책 생성기가 원하는 상태에 도달하기 위해 종속성을 기다리는 경우 규정 준수 상태 검사를 바이패스합니다. 기본값은 false입니다.

policyDefaults.orderPolicies

선택 사항

정책 목록에 정의된 순서대로 적용되도록 정책에 대한 종속성 을 자동으로 생성합니다. 기본적으로 값은 false 로 설정됩니다. policyDefaults.dependencies 와 동시에 지정할 수 없습니다.

policyDefaults.orderManifests

선택 사항

정책 템플릿에 대한 추가 종속성을 자동으로 생성하여 해당 정책의 매니페스트 목록에 정의된 순서대로 적용됩니다. policyDefaults.consolidateManifeststrue 로 설정된 경우 지정할 수 없습니다. policyDefaults.extraDependencies 와 동시에 지정할 수 없습니다.

policyDefaults.consolidateManifests

선택 사항

이는 정책에서 래핑되는 모든 매니페스트에 대해 단일 구성 정책이 생성되었는지 여부를 결정합니다. false 로 설정하면 매니페스트당 구성 정책이 생성됩니다. 기본값은 true입니다.

policyDefaults.informGatekeeperPolicies (더 이상 사용되지 않음)

선택 사항

구성 정책에서 GatekeeperPolicies를 직접 정의하지 않고 Gatekeeper 매니페스트를 직접 사용하려면 informGatekeeperPolicies 를 false로 설정합니다. 정책이 위반된 Gatekeeper 정책 매니페스트를 참조하는 경우 Red Hat Advanced Cluster Management에서 정책 위반을 받기 위해 추가 구성 정책이 생성됩니다. 기본값은 true입니다.

policyDefaults.informKyvernoPolicies

선택 사항

정책이 Kyverno 정책 매니페스트를 참조하는 경우 Kyverno 정책이 위반될 때 Red Hat Advanced Cluster Management에서 정책 위반을 수신하기 위해 추가 구성 정책이 생성되었는지 여부를 결정합니다. 기본값은 true입니다.

policyDefaults.policyLabels

선택 사항

정책에 metadata.labels 섹션에 포함된 레이블입니다. policyLabels 매개변수는 정책에 지정되지 않는 한 모든 정책에 적용됩니다.

policyDefaults.gatekeeperEnforcementAction

선택 사항

Gatekeeper 제약 조건의 spec.enforcementAction 필드를 재정의합니다. 이는 Gatekeeper 제약 조건에만 적용되며 다른 매니페스트에서 무시합니다. 설정하지 않으면 spec.enforcementAction 필드가 변경되지 않습니다.

policyDefaults.policySets

선택 사항

정책이 결합되는 정책의 배열입니다. 정책 세트 세부 정보는 policySets 섹션에 정의할 수 있습니다. 정책이 정책 세트의 일부인 경우 세트에 대해 생성되므로 정책에 대한 배치 바인딩이 생성되지 않습니다. policy Defaults .policySets 를 덮어쓰도록 policies[].generatePlacementAllSet 또는 policyDefaults.generatePlacementAllInSet 을 설정합니다.

policyDefaults.generatePolicyPlacement

선택 사항

정책에 대한 배치 매니페스트를 생성합니다. 기본적으로 true 로 설정합니다. false 로 설정하면 배치가 지정된 경우에도 배치 매니페스트 생성을 건너뜁니다.

policyDefaults.generatePlacementWhenInSet

선택 사항

정책이 정책 세트의 일부인 경우 기본적으로 생성기는 정책 세트에 대한 배치가 생성되므로 이 정책에 대한 배치를 생성하지 않습니다. 정책 배치 및 정책 세트 배치와 함께 정책을 배포하려면 generatePlacementIfInSettrue 로 설정합니다. 기본값은 false입니다.

policyDefaults.placement

선택 사항

정책에 대한 배치 구성입니다. 기본값은 모든 클러스터와 일치하는 배치 구성입니다.

policyDefaults.placement.name

선택 사항

동일한 클러스터 라벨 선택기가 포함된 배치를 통합할 이름을 지정합니다.

policyDefaults.placement.labelSelector

선택 사항

key:value 를 사용하여 클러스터 라벨 선택기를 정의하거나 matchExpressions,matchLabels 또는 둘 다 적절한 값을 제공하여 배치를 지정합니다. 기존 파일을 지정하려면 placementPath 를 참조하십시오.

policyDefaults.placement.placementName

선택 사항

클러스터에 이미 존재하는 배치를 사용하도록 이 매개 변수를 정의합니다. 배치 가 생성되지 않지만 Placement Binding 은 정책을 이 배치에 바인딩합니다.

policyDefaults.placement.placementPath

선택 사항

기존 배치를 재사용하려면 kustomization.yaml 파일의 위치를 기준으로 경로를 지정합니다. 제공되는 경우 이 배치는 기본적으로 모든 정책에서 사용됩니다. 새 배치를 생성하려면 labelSelector 를 참조하십시오.

policyDefaults.placement.clusterSelector (더 이상 사용되지 않음)

선택 사항

PlacementRule 은 더 이상 사용되지 않습니다. 대신 labelSelector 를 사용하여 배치를 생성합니다. key:value 를 사용하거나 matchExpressions,matchLabels 또는 둘 다 적절한 값을 제공하여 클러스터 선택기를 정의하여 배치 규칙을 지정합니다. 기존 파일을 지정하려면 placementRulePath 를 참조하십시오.

policyDefaults.placement.placementRuleName (더 이상 사용되지 않음)

선택 사항

PlacementRule 은 더 이상 사용되지 않습니다. 또는 placementName 을 사용하여 배치를 지정합니다. 클러스터에서 기존 배치 규칙을 사용하려면 이 매개변수의 이름을 지정합니다. PlacementRule 은 생성되지 않지만 PlacementBinding 은 정책을 기존 PlacementRule 에 바인딩합니다.

policyDefaults.placement.placementRulePath (더 이상 사용되지 않음)

선택 사항

PlacementRule 은 더 이상 사용되지 않습니다. 또는 placementPath 를 사용하여 배치를 지정합니다. 기존 배치 규칙을 재사용하려면 kustomization.yaml 파일의 위치와 관련된 경로를 지정합니다. 제공되는 경우 이 배치 규칙은 기본적으로 모든 정책에서 사용됩니다. 새 PlacementRule 을 생성하려면 clusterSelector 를 참조하십시오.

policySetDefaults

선택 사항

정책 세트의 기본값입니다. 이 매개변수에 나열된 기본값은 policySets 배열의 항목으로 재정의됩니다.

policySetDefaults.placement

선택 사항

정책에 대한 배치 구성입니다. 기본값은 모든 클러스터와 일치하는 배치 구성입니다. 이 필드에 대한 설명은 policyDefaults.placement 를 참조하십시오.

policySetDefaults.generatePolicySetPlacement

선택 사항

정책 세트에 대한 배치 매니페스트를 생성합니다. 기본적으로 true 로 설정합니다. false 로 설정하면 배치가 지정된 경우에도 배치 매니페스트 생성을 건너뜁니다.

Policies

필수 항목

생성할 정책 목록은 기본값 또는 policyDefaults 에 설정된 값에 대한 덮어쓰기입니다. 추가 필드 및 설명은 policyDefaults 를 참조하십시오.

policies.description

선택 사항

생성할 정책에 대한 설명입니다.

policies[].name

필수 항목

생성할 정책의 이름입니다.

policies[].manifests

필수 항목

정책에 포함할 Kubernetes 오브젝트 매니페스트 목록, 기본값, 이 정책 항목에 설정된 값 또는 policyDefaults 에 설정된 값에 대한 재정의입니다. 추가 필드 및 설명은 policyDefaults 를 참조하십시오. consolidateManifeststrue 로 설정된 경우 complianceType,metadataComplianceTyperecordDiffpolicies[].manifests 수준에서 재정의할 수 있습니다.

policies[].manifests[].path

필수 항목

단일 파일의 경로, 파일의 플랫 디렉터리 또는 kustomization.yaml 파일을 기준으로 Kustomize 디렉터리입니다. 디렉터리가 Kustomize 디렉터리인 경우 생성기는 정책을 생성하기 전에 디렉터리에 대해 Kustomize를 실행합니다. Kustomize 디렉터리의 Helm 차트를 처리해야 하는 경우 정책 생성기가 실행 중인 환경에서 POLICY_GEN_ENABLE_HELMtrue 로 설정하여 정책 생성기에 대해 Helm을 활성화합니다.

지원되는 매니페스트는 다음과 같습니다.

  • Policy 접미사가 있는 CertificatePolicy,ConfigurationPolicy,OperatorPolicy 와 같은 루트가 아닌 정책 유형 매니페스트입니다. 이전 매니페스트는 패치를 제외한 수정되지 않으며 Policy 리소스의 policy-templates 항목으로 직접 추가됩니다. gatekeeper 제약 조건은 informGatekeeperPoliciesfalse 로 설정된 경우에도 직접 포함됩니다.
  • object-templates-raw 키만 포함하는 매니페스트입니다. 해당 값은 수정 없이 생성된 ConfigurationPolicy 리소스에서 직접 사용되며 Policy 항목의 policy-templates 항목으로 추가됩니다.
  • 기타 모든 경우 ConfigurationPolicy 오브젝트는 이전에 언급된 매니페스트를 래핑하기 위해 생성됩니다. 결과 ConfigurationPolicy 매니페스트는 Policy 리소스의 policy-templates 항목으로 추가됩니다.

policies[].manifests[].name

선택 사항

ConsolidateManifestsfalse 로 설정된 경우 ConfigurationPolicy 리소스 이름으로 사용됩니다. 경로에 여러 매니페스트가 있는 경우 인덱스 번호가 추가됩니다. 여러 매니페스트가 있고 해당 이름이 제공되면 consolidateManifeststrue 로 설정된 경우 모든 매니페스트 경로에 첫 번째 매니페스트 이름이 사용됩니다.

policies[].manifests[].patches

선택 사항

경로의 매니페스트에 적용할 Kustomize 패치 목록입니다. 매니페스트가 여러 개인 경우 패치에 apiVersion,kind,metadata.name, metadata.namespace (해당하는 경우) 필드가 설정되어 Kustomize가 패치가 적용되는 매니페스트를 식별할 수 있습니다. 단일 매니페스트가 있는 경우 metadata.namemetadata.namespace 필드를 패치할 수 있습니다.

policies.policyLabels

선택 사항

정책에 metadata.labels 섹션에 포함된 레이블입니다. policyLabels 매개변수는 정책에 지정되지 않는 한 모든 정책에 적용됩니다.

policySets

선택 사항

생성할 정책 세트 목록과 기본값 또는 policySetDefaults 에 설정된 값에 대한 덮어쓰기입니다. 정책 세트에 정책을 포함하려면 policyDefaults.policySets,policies[].policySets 또는 policySets.policies 를 사용합니다. 추가 필드 및 설명은 policySetDefaults 를 참조하십시오.

policySets[].name

필수 항목

생성할 정책의 이름입니다.

policySets[].description

선택 사항

생성할 정책의 설명입니다.

policySets[].policies

선택 사항

정책 세트에 포함할 정책 목록입니다. policyDefaults.policySets 또는 policies[].policySets 도 지정된 경우 목록이 병합됩니다.

2.3.7.4. 추가 리소스

2.3.8. Compliance Operator를 설치하는 정책 생성

클러스터에 Compliance Operator를 설치하는 정책을 생성합니다. Compliance Operator와 같이 네임스페이스 가 지정된 설치 모드를 사용하는 Operator의 경우 OperatorGroup 매니페스트도 필요합니다.

다음 단계를 완료합니다.

  1. 네임스페이스, 서브스크립션compliance-operator.yaml 이라는 OperatorGroup 매니페스트를 사용하여 YAML 파일을 생성합니다. 다음 예제에서는 이러한 매니페스트를 compliance-operator 네임스페이스에 설치합니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-compliance
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      targetNamespaces:
        - openshift-compliance
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      channel: release-0.1
      name: compliance-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
  2. PolicyGenerator 구성 파일을 생성합니다. 모든 OpenShift Container Platform 관리 클러스터에 Compliance Operator를 설치하는 다음 PolicyGenerator 정책 예를 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: install-compliance-operator
    policyDefaults:
      namespace: policies
      placement:
        labelSelector:
          matchExpressions:
            - key: vendor
              operator: In
              values:
                - "OpenShift"
    policies:
      - name: install-compliance-operator
        manifests:
          - path: compliance-operator.yaml
  3. kustomization.yaml 파일에 정책 생성기를 추가합니다. generators 섹션은 다음 구성과 유사할 수 있습니다.

    generators:
      - policy-generator-config.yaml

    결과적으로 생성된 정책은 다음 파일과 유사합니다.

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-install-compliance-operator
      namespace: policies
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions:
            - key: vendor
              operator: In
              values:
              - OpenShift
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-compliance-operator
      namespace: policies
    placementRef:
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
      name: placement-install-compliance-operator
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: install-compliance-operator
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/description:
      name: install-compliance-operator
      namespace: policies
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: install-compliance-operator
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Namespace
                    metadata:
                      name: openshift-compliance
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: operators.coreos.com/v1alpha1
                    kind: Subscription
                    metadata:
                      name: compliance-operator
                      namespace: openshift-compliance
                    spec:
                      channel: release-0.1
                      name: compliance-operator
                      source: redhat-operators
                      sourceNamespace: openshift-marketplace
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: operators.coreos.com/v1
                    kind: OperatorGroup
                    metadata:
                      name: compliance-operator
                      namespace: openshift-compliance
                    spec:
                      targetNamespaces:
                        - compliance-operator
              remediationAction: enforce
              severity: low

결과적으로 생성된 정책이 표시됩니다.

2.3.9. 거버넌스 정책 프레임워크 아키텍처

Kubernetes 거버넌스 라이프사이클에 대한 Red Hat Advanced Cluster Management를 사용하여 클러스터의 보안을 강화합니다. 제품 거버넌스 라이프사이클은 지원되는 정책, 프로세스 및 절차를 사용하여 중앙 인터페이스 페이지에서 보안 및 규정 준수를 관리합니다. 거버넌스 아키텍처의 다음 다이어그램을 확인하십시오.

Governance architecture diagram

거버넌스 아키텍처 다이어그램에 대한 다음 구성 요소 설명을 확인합니다.

  • 거버넌스 정책 프레임워크: 이전 이미지는 관리 클러스터에서 governance-policy-framework Pod로 실행되고 다음 컨트롤러가 포함된 프레임워크를 나타냅니다.

    • spec 동기화 컨트롤러: 허브 클러스터의 관리 클러스터 네임스페이스에서 복제된 정책을 관리 클러스터의 관리형 클러스터 네임스페이스로 동기화합니다.
    • 상태 동기화 컨트롤러: 허브 및 관리 클러스터에서 복제된 정책의 정책 컨트롤러에서 규정 준수 이벤트를 기록합니다. 상태에는 현재 정책과 관련된 업데이트만 포함되어 있으며 정책이 삭제되고 다시 생성되는 경우 이전 상태를 고려하지 않습니다.
    • 템플릿 동기화 컨트롤러: 복제된 정책 spec.policy-templates 항목의 정의를 기반으로 관리형 클러스터의 관리형 클러스터 네임스페이스에서 오브젝트를 생성, 업데이트, 삭제합니다.
    • Gatekeeper 동기화 컨트롤러: 해당 Red Hat Advanced Cluster Management 정책의 규정 준수 이벤트로 Gatekeeper 제약 조건 감사 결과를 기록합니다.
  • 정책 전파 컨트롤러: Red Hat Advanced Cluster Management Hub 클러스터에서 실행되며 루트 정책에 바인딩된 배치를 기반으로 허브의 관리 클러스터 네임스페이스에 복제 정책을 생성합니다. 또한 복제된 정책의 규정 준수 상태를 루트 정책 상태로 집계하고 루트 정책에 바인딩된 정책 자동화를 기반으로 자동화를 시작합니다.
  • 거버넌스 정책 애드온 컨트롤러: Red Hat Advanced Cluster Management Hub 클러스터에서 실행되며 관리 클러스터에 정책 컨트롤러 설치를 관리합니다.
2.3.9.1. 거버넌스 아키텍처 구성 요소

거버넌스 아키텍처에는 다음 구성 요소도 포함됩니다.

  • 거버넌스 대시보드: 클라우드 거버넌스 및 위험 세부 정보에 대한 요약을 제공합니다. 여기에는 정책 및 클러스터 위반이 포함됩니다. Kubernetes 정책 프레임워크용 Red Hat Advanced Cluster Management의 구조와 Kubernetes 거버넌스용 Red Hat Advanced Cluster Management 대시보드 사용 방법에 대해서는 Manage Governance dashboard 섹션을 참조하십시오.

    참고:

    • 정책이 관리 클러스터로 전파되면 먼저 hub 클러스터의 클러스터 네임스페이스에 복제되며 namespaceName.policyName 을 사용하여 이름이 지정되고 레이블이 지정됩니다. 정책을 생성할 때 레이블 값에 대한 Kubernetes 길이 제한으로 인해 namespaceName.policyName 의 길이가 63자를 초과하지 않는지 확인합니다.
    • hub 클러스터에서 정책을 검색할 때 관리 클러스터 네임스페이스에서 복제된 정책의 이름을 수신할 수도 있습니다. 예를 들어 기본 네임스페이스에서 policy-dhaz-cert 를 검색하는 경우 hub 클러스터의 다음 정책 이름도 관리 클러스터 네임스페이스 default.policy-dhaz-cert 에 표시될 수 있습니다.
  • 정책 기반 거버넌스 프레임워크: 지리적 리전과 같은 클러스터와 관련된 속성을 기반으로 다양한 관리형 클러스터에 정책 생성 및 배포를 지원합니다. 오픈 소스 커뮤니티에서 클러스터에 정책을 배포하는 방법에 대한 사전 정의된 정책의 예가 있습니다. 또한 정책을 위반하는 경우 사용자가 선택한 작업을 실행하고 수행하도록 자동화를 구성할 수 있습니다.
  • 오픈 소스 커뮤니티: Red Hat Advanced Cluster Management 정책 프레임워크를 기반으로 커뮤니티 기여를 지원합니다. 정책 컨트롤러 및 타사 정책은 open-cluster-management/policy-collection 리포지토리의 일부이기도 합니다. GitOps를 사용하여 정책을 기여하고 배포할 수 있습니다.
2.3.9.2. 추가 리소스

2.3.10. 거버넌스 대시보드

Governance 대시보드를 사용하여 리소스를 생성, 보기 및 편집하여 보안 정책 및 정책 위반을 관리합니다. 명령줄 및 콘솔에서 정책에 대한 YAML 파일을 생성할 수 있습니다. 콘솔에서 Governance 대시보드에 대한 자세한 내용은 계속 읽습니다.

2.3.10.1. 거버넌스 페이지

다음 탭은 Governance 페이지 개요,정책 세트 및 정책에 표시됩니다. 다음 설명을 읽고 표시되는 정보를 확인합니다.

  • 개요

    개요 탭에서 다음 요약 카드가 표시됩니다. 정책 세트 위반,정책 위반 ,클러스터, 범주 ,제어표준.

  • 정책 세트

    허브 클러스터 정책 세트를 생성하고 관리합니다.

  • Policies

    • 보안 정책을 생성 및 관리합니다. 정책 테이블에는 다음과 같은 정책 세부 정보가 나열됩니다. 이름 , 네임스페이스클러스터 위반이 표시됩니다.
    • 작업 아이콘을 선택하여 정책을 편집, 활성화 또는 비활성화, 알리거나 적용하도록 수정을 설정할 수 있습니다. 드롭다운 화살표를 선택하여 특정 정책의 카테고리 및 표준을 보고 행을 확장할 수 있습니다.
    • 관리 대화 상자에서 테이블 열을 다시 정렬합니다. 표시할 대화 상자의 열 관리 아이콘을 선택합니다. 열 순서를 다시 정렬하려면 순서 아이콘을 선택하고 열 이름을 이동합니다.To reorder your columns, select the Reorder icon and move the column name. 테이블에 표시할 열의 경우 특정 열 이름에 대한 확인란을 클릭하고 저장 버튼을 선택합니다.
    • 여러 정책을 선택하고 작업 버튼을 클릭하여 대량 작업을 완료합니다. 필터 버튼을 클릭하여 정책 테이블을 사용자 지정할 수도 있습니다.

      테이블 목록에서 정책을 선택하면 다음 정보 탭이 콘솔에 표시됩니다.

      • Details: 정책 세부 정보 및 배치 세부 정보를 보려면 세부 정보 탭을 선택합니다. 배치 테이블에서 규정 준수 열에는 표시되는 클러스터의 규정 준수를 볼 수 있는 링크가 있습니다.
      • 결과: 정책과 연결된 모든 클러스터의 테이블 목록을 보려면 결과 탭을 선택합니다.
  • Message 열에서 View details 링크를 클릭하여 템플릿 세부 정보, 템플릿 YAML 및 관련 리소스를 확인합니다. 관련 리소스도 볼 수 있습니다. 보기 기록 링크를 클릭하여 위반 메시지와 마지막 보고서의 시간을 확인합니다.
2.3.10.2. 거버넌스 자동화 구성

특정 정책에 맞게 구성된 자동화가 있는 경우 자동화를 선택하여 세부 정보를 볼 수 있습니다. 자동화를 위한 스케줄 빈도 옵션에 대한 다음 설명을 확인합니다.

  • 수동 실행: 수동으로 이 자동화를 한 번 실행하도록 설정합니다. 자동화가 실행된 후 disabled 로 설정됩니다. 참고: 일정 빈도가 비활성화된 경우에만 수동 실행 모드를 선택할 수 있습니다.
  • Run once mode: 정책을 위반하면 자동화가 한 번 실행됩니다. 자동화가 실행된 후 disabled 로 설정됩니다. 자동화가 disabled 로 설정된 후에는 자동화를 수동으로 계속 실행해야 합니다. 한 번 모드를 실행하면 target_clusters 의 추가 변수가 정책을 위반하는 클러스터 목록과 자동으로 제공됩니다. Ansible Automation Platform 작업 템플릿에는 EXTRA VARIABLES 섹션( extra_vars라고도 함 )에 대해 PROMPT ON Cryostat가 활성화되어 있어야 합니다.
  • 모든Event 모드 실행: 정책이 위반되면 관리 클러스터당 각 고유한 정책 위반에 대해 자동화가 실행될 때마다 실행됩니다. 동일한 클러스터에서 자동화를 다시 시작하기 전에 DelayAfterRunSeconds 매개변수를 사용하여 최소 초를 설정합니다. 정책이 지연 기간 동안 여러 번 위반되고 위반된 상태로 유지되는 경우 자동화는 지연 기간 후에 한 번 실행됩니다. 기본값은 0초이며 everyEvent 모드에만 적용됩니다. everyEvent 모드를 실행하면 target_clusters 및 Ansible Automation Platform 작업 템플릿의 추가 변수는 한 모드와 동일합니다.
  • 자동화 비활성화: 예약된 자동화가 disabled 로 설정된 경우 설정이 업데이트될 때까지 자동화가 실행되지 않습니다.

다음 변수는 Ansible Automation Platform 작업의 extra_vars 에 자동으로 제공됩니다.

  • policy_name: hub 클러스터에서 Ansible Automation Platform 작업을 시작하는 비호환 루트 정책의 이름입니다.
  • policy_namespace: 루트 정책의 네임스페이스입니다.
  • hub_cluster: 클러스터 DNS 오브젝트의 값에 따라 결정되는 허브 클러스터 의 이름입니다.
  • policy_sets: 이 매개변수에는 루트 정책의 모든 관련 정책 세트 이름이 포함됩니다. 정책이 정책 세트에 없는 경우 policy_set 매개변수가 비어 있습니다.
  • policy_violations: 이 매개변수에는 호환되지 않는 클러스터 이름 목록이 포함되어 있으며 값은 호환되지 않는 각 클러스터의 정책 상태 필드입니다.
2.3.10.3. 추가 리소스

보안 정책 생성 및 업데이트에 대한 자세한 내용은 다음 주제를 검토하십시오.

2.3.11. 구성 정책 생성

CLI(명령줄 인터페이스) 또는 콘솔에서 구성 정책에 대한 YAML 파일을 생성할 수 있습니다. 콘솔에서 구성 정책을 생성하면 YAML 편집기에 YAML 파일이 표시됩니다.

2.3.11.1. 사전 요구 사항
  • 필수 액세스: 관리자 또는 클러스터 관리자
  • 기존 Kubernetes 매니페스트가 있는 경우 정책 생성기를 사용하여 정책에 매니페스트를 자동으로 포함하는 것이 좋습니다. Policy Generator 설명서를 참조하십시오.
2.3.11.2. CLI에서 구성 정책 생성

(CLI)에서 구성 정책을 생성하려면 다음 단계를 완료합니다.

  1. 구성 정책에 대한 YAML 파일을 생성합니다. 다음 명령을 실행합니다.

    oc create -f configpolicy-1.yaml

    구성 정책은 다음 정책과 유사할 수 있습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-1
      namespace: my-policies
    policy-templates:
    - apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: mustonlyhave-configuration
      spec:
        namespaceSelector:
          include: ["default"]
          exclude: ["kube-system"]
        remediationAction: inform
        disabled: false
        complianceType: mustonlyhave
        object-templates:
  2. 다음 명령을 실행하여 정책을 적용합니다.

    oc apply -f <policy-file-name>  --namespace=<namespace>
  3. 다음 명령을 실행하여 정책을 확인하고 나열합니다.

    oc get policies.policy.open-cluster-management.io --namespace=<namespace>

구성 정책이 생성됩니다.

2.3.11.2.1. CLI에서 구성 정책 보기

CLI에서 구성 정책을 보려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 특정 구성 정책의 세부 정보를 확인합니다.

    oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace> -o yaml
  2. 다음 명령을 실행하여 구성 정책에 대한 설명을 확인합니다.

    oc describe policies.policy.open-cluster-management.io <name> -n <namespace>
2.3.11.2.2. 콘솔에서 구성 정책 보기

콘솔에서 구성 정책 및 해당 상태를 확인합니다.

콘솔에서 클러스터에 로그인한 후 Governance 를 선택하여 정책의 테이블 목록을 확인합니다. 참고: 모든 정책 탭 또는 클러스터 위반 탭을 선택하여 정책의 테이블 목록을 필터링할 수 있습니다.

자세한 내용을 보려면 정책 중 하나를 선택합니다. 세부 정보 , 클러스터템플릿 탭이 표시됩니다.

2.3.11.3. 구성 정책 비활성화

구성 정책을 비활성화하려면 정책의 작업 메뉴에서 정책 비활성화 를 선택합니다. 정책은 비활성화되어 있지만 삭제되지는 않습니다.

2.3.11.4. 구성 정책 삭제

CLI 또는 콘솔에서 구성 정책을 삭제합니다. 다음 단계를 완료합니다.

  1. 대상 클러스터 또는 클러스터에서 정책을 삭제하려면 다음 명령을 실행합니다.

    oc delete policies.policy.open-cluster-management.io <policy-name> -n <namespace>
  2. 다음 명령을 실행하여 정책이 제거되었는지 확인합니다.

    oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace>
  3. 콘솔에서 구성 정책을 삭제하려면 정책 위반 테이블에서 삭제할 정책의 작업 아이콘을 클릭한 다음 삭제 를 클릭합니다.

정책이 삭제됩니다.

2.3.11.5. 추가 리소스

2.3.12. 거버넌스를 위한 Ansible Automation Platform 구성

Red Hat Advanced Cluster Management for Kubernetes 거버넌스를 Red Hat Ansible Automation Platform과 통합하여 정책 위반 자동화를 생성할 수 있습니다. Red Hat Advanced Cluster Management 콘솔에서 자동화를 구성할 수 있습니다.

2.3.12.1. 사전 요구 사항
  • 지원되는 OpenShift Container Platform 버전
  • Ansible Automation Platform 버전 3.7.3 또는 이후 버전이 설치되어 있어야 합니다. 지원되는 최신 버전의 Ansible Automation Platform을 설치하는 것이 좋습니다. 자세한 내용은 Red Hat Ansible Automation Platform 설명서 를 참조하십시오.
  • Operator Lifecycle Manager에서 Ansible Automation Platform Resource Operator를 설치합니다. Update Channel 섹션에서 stable-2.x-cluster-scoped 를 선택합니다. 클러스터(기본값) 설치 모드에서 모든 네임스페이스를 선택합니다.

    참고: Ansible Automation Platform 작업 템플릿을 실행할 때 멱등인지 확인합니다. Ansible Automation Platform Resource Operator가 없는 경우 Red Hat OpenShift Container Platform OperatorHub 페이지에서 찾을 수 있습니다.

Red Hat Ansible Automation Platform 설치 및 구성에 대한 자세한 내용은 Ansible 작업 설정을 참조하십시오.

2.3.12.2. 콘솔에서 정책 위반 자동화 생성

Red Hat Advanced Cluster Management Hub 클러스터에 로그인한 후 탐색 메뉴에서 Governance 를 선택한 다음 Policies 탭을 클릭하여 정책 테이블을 확인합니다.

자동화 열에서 구성을 클릭하여 특정 정책에 대한 자동화구성합니다. 정책 자동화 패널이 표시되면 자동화를 생성할 수 있습니다. Ansible Credential 섹션에서 드롭다운 메뉴를 클릭하여 Ansible 자격 증명을 선택합니다. 인증 정보를 추가해야 하는 경우 인증 정보 관리 개요 를 참조하십시오.

참고: 이 인증 정보는 정책과 동일한 네임스페이스에 복사됩니다. 인증 정보는 자동화를 시작하기 위해 생성된 AnsibleJob 리소스에서 사용합니다. 콘솔의 Credentials 섹션에서 Ansible 자격 증명 변경 사항이 자동으로 업데이트됩니다.

인증 정보를 선택한 후 Ansible 작업 드롭다운 목록을 클릭하여 작업 템플릿을 선택합니다. Extra variables 섹션에서 PolicyAutomationextra_vars 섹션에서 매개변수 값을 추가합니다. 자동화 빈도를 선택합니다. 한 번 모드 실행,everyEvent 모드를 실행 또는 자동화 비활성화 를 선택할 수 있습니다.

Submit 을 선택하여 정책 위반 자동화를 저장합니다. Ansible 작업 세부 정보 패널에서 작업 보기 링크를 선택하면 링크가 검색 페이지의 작업 템플릿으로 이동합니다. 자동화를 성공적으로 생성하면 자동화 열에 표시됩니다.

참고: 관련 정책 자동화가 있는 정책을 삭제하면 정리의 일부로 정책 자동화가 자동으로 삭제됩니다.

정책 위반 자동화는 콘솔에서 생성됩니다.

2.3.12.3. CLI에서 정책 위반 자동화 생성

CLI에서 정책 위반 자동화를 구성하려면 다음 단계를 완료합니다.

  1. 터미널에서 oc login 명령을 사용하여 Red Hat Advanced Cluster Management Hub 클러스터에 로그인합니다.
  2. 자동화를 추가할 정책을 검색하거나 생성합니다. 정책 이름과 네임스페이스를 확인합니다.
  3. 다음 샘플을 가이드로 사용하여 PolicyAutomation 리소스를 생성합니다.

    apiVersion: policy.open-cluster-management.io/v1beta1
    kind: PolicyAutomation
    metadata:
      name: policyname-policy-automation
    spec:
      automationDef:
        extra_vars:
          your_var: your_value
        name: Policy Compliance Template
        secret: ansible-tower
        type: AnsibleJob
      mode: disabled
      policyRef: policyname
  4. 이전 샘플의 자동화 템플릿 이름은 정책 준수 템플릿 입니다. 작업 템플릿 이름과 일치하도록 해당 값을 변경합니다.
  5. extra_vars 섹션에서 자동화 템플릿에 전달하는 데 필요한 매개변수를 추가합니다.
  6. 모드를 한 번,everyEvent 또는 disabled 로 설정합니다.
  7. policyRef 를 정책 이름으로 설정합니다.
  8. Ansible Automation Platform 인증 정보가 포함된 이 PolicyAutomation 리소스와 동일한 네임스페이스에 보안을 생성합니다. 이전 예에서 시크릿 이름은 ansible-tower 입니다. 애플리케이션 라이프사이클의 샘플을 사용하여 시크릿을 생성하는 방법을 확인합니다.
  9. PolicyAutomation 리소스를 만듭니다.

    참고:

    • PolicyAutomation 리소스에 다음 주석을 추가하여 정책 자동화를 즉시 실행할 수 있습니다.

      metadata:
        annotations:
          policy.open-cluster-management.io/rerun: "true"
    • 정책이 한 이면 정책을 준수하지 않을 때 자동화가 실행됩니다. target_clusters 라는 extra_vars 변수가 추가되고 이 값은 정책이 준수하지 않는 각 관리 클러스터 이름의 배열입니다.
    • 정책이 everyEvent 모드에 있고 DelayAfterRunSeconds 가 정의된 시간 값을 초과하면 정책을 준수하지 않고 모든 정책 위반에 대해 자동화가 실행됩니다.

2.4. 외부 툴을 사용한 정책 배포

CertificatePolicy,ConfigurationPolicy,OperatorPolicy 리소스 및 Gatekeeper 제약 조건을 관리 클러스터에 직접 배포하려면 Red Hat OpenShift GitOps와 같은 외부 툴을 사용할 수 있습니다.

2.4.1. 배포 워크플로

CertificatePolicy,ConfigurationPolicy,OperatorPolicy 정책은 open-cluster-management-policies 네임스페이스 또는 관리 클러스터 네임스페이스에 있어야 합니다. 다른 네임스페이스의 정책은 무시되고 상태가 수신되지 않습니다. 2.13 이전의 Argo CD 버전이 있는 Red Hat OpenShift GitOps 버전을 사용하는 경우 Kubernetes 정책 상태 점검을 위해 Red Hat Advanced Cluster Management를 구성해야 합니다.

OpenShift GitOps 서비스 계정에는 Kubernetes 정책에 대한 Red Hat Advanced Cluster Management를 관리할 수 있는 권한이 있어야 합니다. OpenShift GitOps를 사용하여 정책을 배포하고 Governance 대시보드의 검색 정책 표에서 정책을 봅니다. 정책은 정책 이름종류 필드로 그룹화됩니다.

2.4.2. 추가 리소스

3장. 정책 컨트롤러 고급 구성

ManagedClusterAddOn 사용자 정의 리소스를 사용하여 관리 클러스터에서 정책 컨트롤러 구성을 사용자 지정할 수 있습니다. 다음 ManagedClusterAddOns 는 정책 프레임워크, Kubernetes 구성 정책 컨트롤러 및 인증서 정책 컨트롤러를 구성합니다. 필수 액세스: 클러스터 관리자

3.1. 거버넌스 프레임워크 동시성 구성

각 관리 클러스터에 대한 거버넌스 프레임워크 동시성을 구성합니다. 기본값 2 를 변경하려면 따옴표 내에서 0이 아닌 정수로 policy-evaluation-concurrency 주석을 설정합니다. 그런 다음 ManagedClusterAddOn 개체 이름의 값을 hub 클러스터의 관리 클러스터 네임스페이스에서 governance-policy-framework 로 설정합니다.

cluster1 이라는 관리 클러스터에서 동시성이 2 로 설정된 다음 YAML 예제를 참조하십시오.

apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
  name: governance-policy-framework
  namespace: cluster1
  annotations:
    policy-evaluation-concurrency: "2"
spec:
  installNamespace: open-cluster-management-agent-addon

client-qpsclient-burst 주석을 설정하려면 ManagedClusterAddOn 리소스를 업데이트하고 매개변수를 정의합니다.

각 초당 대한 쿼리가 30 으로 설정되고 burst가 cluster1 이라는 관리형 클러스터에서 45 로 설정된 다음 YAML 예제를 참조하십시오.

apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
  name: governance-policy-framework
  namespace: cluster1
  annotations:
    client-qps: "30"
    client-burst: "45"
spec:
  installNamespace: open-cluster-management-agent-addon

3.2. 구성 정책 컨트롤러의 동시성 구성

각 관리 클러스터에 대해 구성 정책 컨트롤러의 동시성을 구성하여 동시에 평가할 수 있는 구성 정책 수를 변경할 수 있습니다. 기본값 2 를 변경하려면 따옴표 내에서 0이 아닌 정수로 policy-evaluation-concurrency 주석을 설정합니다. 그런 다음 hub 클러스터의 관리 클러스터 네임스페이스에서 ManagedClusterAddOn 오브젝트 이름의 값을 config-policy-controller 로 설정합니다.

참고: Increased concurrency 값은 config-policy-controller Pod, Kubernetes API 서버 및 OpenShift API 서버에서 CPU 및 메모리 사용률을 늘립니다.

cluster1 이라는 관리 클러스터에서 동시성이 5 로 설정된 다음 YAML 예제를 참조하십시오.

apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
  name: config-policy-controller
  namespace: cluster1
  annotations:
    policy-evaluation-concurrency: "5"
spec:
  installNamespace: open-cluster-management-agent-addon

3.3. API 서버에 대한 요청 속도 구성

구성 정책 컨트롤러가 각 관리 클러스터에서 수행하는 API 서버에 대한 요청 속도를 구성합니다. 속도가 증가하면 구성 정책 컨트롤러의 응답성이 향상되어 Kubernetes API 서버 및 OpenShift API 서버의 CPU 및 메모리 사용률도 높아집니다. 기본적으로 요청 속도는 policy-evaluation-concurrency 설정으로 확장되며 짧은 기간 동안 더 많은 요청 수를 나타내는 45 burst 값이 있는 QPS(초당 30 쿼리)로 설정됩니다.

client-qpsclient-burst 주석을 따옴표 내에서 0이 아닌 정수로 설정하여 속도 및 버스트를 구성할 수 있습니다. hub 클러스터의 관리 클러스터 네임스페이스에서 ManagedClusterAddOn 오브젝트 이름의 값을 config-policy-controller 로 설정할 수 있습니다.

각 초당 대한 쿼리가 20 으로 설정되고 burst가 cluster1 이라는 관리형 클러스터에서 100 으로 설정된 다음 YAML 예제를 참조하십시오.

apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
  name: config-policy-controller
  namespace: cluster1
  annotations:
    client-qps: "20"
    client-burst: "100"
spec:
  installNamespace: open-cluster-management-agent-addon

3.4. 디버그 로그 구성

각 정책 컨트롤러에 대한 디버그 로그를 구성하고 수집할 때 로그 수준을 조정할 수 있습니다.

참고: 디버그 로그 볼륨을 줄이면 로그에서 표시되는 정보가 줄어듭니다.

정책 컨트롤러에서 내보낸 디버그 로그를 줄여 로그에 오류 전용 버그를 표시할 수 있습니다. 디버그 로그를 줄이려면 주석에서 debug 로그 값을 -1 로 설정합니다. 각 값이 무엇을 나타내는지 확인하십시오.

  • -1: 오류 로그만
  • 0: 정보 로그
  • 1: 디버그 로그
  • 2: 상세 디버깅 로그

Kubernetes 구성 컨트롤러의 두 번째 디버깅 정보를 받으려면 값이 2로그 수준 주석을 ManagedClusterAddOn 사용자 정의 리소스에 추가합니다. 기본적으로 로그 수준은 0 으로 설정됩니다. 즉, 정보를 제공하는 메시지가 표시됩니다. 다음 예제를 확인합니다.

apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
  name: config-policy-controller
  namespace: cluster1
  annotations:
    log-level: "2"
spec:
  installNamespace: open-cluster-management-agent-addon

또한 ConfigurationPolicy 리소스의 각 spec.object-template[] 에 대해 매개변수 recordDiffLog 로 설정할 수 있습니다. 관리 클러스터의 오브젝트Definition 과 오브젝트의 차이점은 관리 클러스터의 config-policy-controller Pod에 기록됩니다. 다음 예제를 확인합니다.

recordDiff: Log:이 있는 ConfigurationPolicy 리소스

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: my-config-policy
spec:
  object-templates:
  - complianceType: musthave
    recordDiff: Log
    objectDefinition:
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: my-configmap
      data:
        fieldToUpdate: "2"

클러스터의 ConfigMap 리소스가 fieldToUpdate: "1" 이면 diff가 다음 정보를 사용하여 config-policy-controller Pod에 표시됩니다.

Logging the diff:
--- default/my-configmap : existing
+++ default/my-configmap : updated
@@ -2,3 +2,3 @@
 data:
-  fieldToUpdate: "1"
+  fieldToUpdate: "2"
 kind: ConfigMap

중요: 보안 오브젝트의 차이점을 기록하지 않도록 합니다. 차이점은 일반 텍스트로 기록됩니다.

3.5. 거버넌스 메트릭

정책 프레임워크는 정책 배포 및 규정 준수를 보여주는 지표를 노출합니다. hub 클러스터에서 policy_governance_info 메트릭을 사용하여 추세를 보고 정책 오류를 분석합니다. 메트릭에 대한 개요는 다음 항목을 참조하십시오.

3.5.1. Metric: policy_governance_info

OpenShift Container Platform 모니터링 구성 요소는 policy_governance_info 메트릭을 수집합니다. 관찰 기능을 활성화하면 구성 요소에서 일부 집계 데이터를 수집합니다.

참고: 관찰 기능을 활성화하면 Grafana 탐색 페이지에서 지표 쿼리를 입력합니다. 정책을 생성할 때 루트 정책을 생성합니다. 프레임워크는 루트 정책, 배치 리소스, PlacementBindings 리소스를 감시하여 전파된 정책을 생성하는 위치에 대한 정보를 확인하여 관리 클러스터에 정책을 배포합니다.

루트 및 전파 정책의 경우 정책이 규정을 준수하는 경우 0 이고, 일치하지 않는 경우 1 이고, 알 수 없거나 보류 중인 상태인 경우 -1 이 기록됩니다.

policy_governance_info 메트릭은 다음 레이블을 사용합니다.

  • 유형: 레이블 값은 root 이거나 전파됨 입니다.
  • policy: 연결된 루트 정책의 이름입니다.
  • policy_namespace: 루트 정책이 정의된 허브 클러스터의 네임스페이스입니다.
  • cluster_namespace: 정책이 배포된 클러스터의 네임스페이스입니다.

이러한 라벨과 값을 사용하면 클러스터에서 발생하는 많은 상황을 추적할 수 있는 쿼리를 사용할 수 있습니다.

참고: 메트릭이 필요하지 않고 성능 또는 보안에 대한 우려가 있는 경우 메트릭 컬렉션을 비활성화할 수 있습니다. 전파자 배포에서 DISABLE_REPORT_METRICS 환경 변수를 true 로 설정합니다. observability allowlist에 policy_governance_info 메트릭을 사용자 정의 지표로 추가할 수도 있습니다. 자세한 내용은 사용자 정의 메트릭 추가 를 참조하십시오.

3.5.2. Metric: config_policies_evaluation_duration_seconds

config_policies_evaluation_duration_seconds 히스토그램은 클러스터에서 평가할 준비가 된 모든 구성 정책을 처리하는 데 걸리는 시간(초)을 추적합니다. 다음 메트릭을 사용하여 히스토그램을 쿼리합니다.

  • config_policies_evaluation_duration_seconds_bucket: 버킷은 누적되고 다음과 같은 가능한 항목이 있는 초를 나타냅니다. 1, 3, 9, 10.5, 15, 30, 60, 90, 120, 180, 300,450, 600 이상.
  • config_policies_evaluation_duration_seconds_count: 모든 이벤트의 수입니다.
  • config_policies_evaluation_duration_seconds_sum: 모든 값의 합계입니다.

config_policies_evaluation_duration_seconds 지표를 사용하여 자주 평가할 필요가 없는 리소스 집약적 정책에 대해 ConfigurationPolicy evaluationInterval 설정을 변경해야 하는지 확인합니다. Kubernetes API 서버에서 리소스 사용률이 높으면 동시성을 늘릴 수도 있습니다. 자세한 내용은 동시성 구성을 참조하십시오.

구성 정책을 평가하는 데 사용되는 시간에 대한 정보를 받으려면 다음 표현식과 유사한 Prometheus 쿼리를 수행하십시오.

rate(config_policies_evaluation_duration_seconds_sum[10m])/rate(config_policies_evaluation_duration_seconds_count[10m])

open-cluster-management-agent-addon 네임스페이스의 관리 클러스터에서 실행되는 config-policy-controller Pod는 메트릭을 계산합니다. config-policy-controller 는 기본적으로 지표를 관찰 가능성으로 보내지 않습니다.

3.6. 구성 변경 확인

컨트롤러를 사용하여 새 구성을 적용하면 ManifestApplied 매개변수가 ManagedClusterAddOn 에서 업데이트됩니다. 이러한 조건 타임스탬프는 구성을 올바르게 확인하는 데 도움이 됩니다. 예를 들어 이 명령은 local-clustercert-policy-controller 가 업데이트되었는지 확인할 수 있습니다.

oc get -n local-cluster managedclusteraddon cert-policy-controller | grep -B4 'type: ManifestApplied'

다음 출력이 표시될 수 있습니다.

 - lastTransitionTime: "2023-01-26T15:42:22Z"
    message: manifests of addon are applied successfully
    reason: AddonManifestApplied
    status: "True"
    type: ManifestApplied

3.7. 추가 리소스

4장. 지원되는 Red Hat Advanced Cluster Management for Kubernetes 정책

지원되는 정책을 보고 Red Hat Advanced Cluster Management for Kubernetes에서 정책을 생성하고 관리할 때 허브 클러스터에 대한 규칙, 프로세스 및 제어를 정의하는 방법을 알아봅니다.

4.1. 샘플 구성 정책 표

다음 샘플 구성 정책을 확인합니다.

표 4.1. 구성 정책의 표 목록
정책 샘플설명

네임스페이스 정책

네임스페이스를 사용하여 일관된 환경 격리 및 이름을 지정하십시오. Kubernetes 네임스페이스 설명서를 참조하십시오.

Pod 정책

클러스터 워크로드 구성을 확인합니다. Kubernetes 포드 설명서를 참조하십시오.

메모리 사용량 정책

제한 범위를 사용하여 워크로드 리소스 사용량을 제한합니다. 제한 범위 설명서를 참조하십시오.

Pod 보안 정책(더 이상 사용되지 않음)

일관된 워크로드 보안을 보장합니다. Kubernetes Pod 보안 정책 설명서를 참조하십시오.

역할 정책
역할 바인딩 정책

역할 및 역할 바인딩을 사용하여 역할 권한 및 바인딩을 관리합니다. Kubernetes RBAC 설명서를 참조하십시오.

SCC(보안 콘텐츠 제약 조건) 정책

보안 컨텍스트 제약 조건을 사용하여 워크로드 권한을 관리합니다. OpenShift Container Platform 설명서의 보안 컨텍스트 제약 조건 설명서를 참조하십시오.

ETCD 암호화 정책

etcd 암호화를 사용하여 데이터 보안을 확인하십시오. OpenShift Container Platform 설명서에서 etcd 데이터 암호화를 참조하십시오.

규정 준수 Operator 정책

Compliance Operator를 배포하여 OpenSCAP을 활용하여 클러스터의 규정 준수 상태를 스캔하고 적용합니다. OpenShift Container Platform 설명서 의 Compliance Operator 이해 를 참조하십시오.

컴플라이언스 Operator E8 검사

Compliance Operator 정책을 적용한 후 Essential 8 (E8) 검사를 배포하여 E8 보안 프로필 준수를 확인하십시오. OpenShift Container Platform 설명서 의 Compliance Operator 이해 를 참조하십시오.

컴플라이언스 Operator CIS 검사

Compliance Operator 정책을 적용한 후 CIS(Center for Internet Security) 검사를 배포하여 CIS 보안 프로필 준수를 확인합니다. OpenShift Container Platform 설명서 의 Compliance Operator 이해 를 참조하십시오.

이미지 취약점 정책

Container Security Operator를 배포하고 클러스터에서 실행되는 Pod에서 알려진 이미지 취약점을 감지합니다. Container Security Operator GitHub 리포지토리를 참조하십시오.

Gatekeeper Operator 배포

Gatekeeper는 OCI(Open Policy Agent) 정책 엔진에서 실행하는 사용자 정의 리소스 정의 기반 정책을 적용하는 승인 Webhook입니다. Gatekeeper 문서를 참조하십시오. Gatekeeper Operator는 Gatekeeper를 설치할 수 있습니다. 자세한 내용은 Gatekeeper operator 개요 를 참조하십시오.

Gatekeeper 규정 준수 정책

Gatekeeper를 클러스터에 배포한 후 이 샘플 Gatekeeper 정책을 배포하여 클러스터에 생성된 네임스페이스가 지정된 대로 레이블이 지정되도록 합니다. 자세한 내용은 Gatekeeper 제약 조건 및 제약 조건 템플릿 통합을 참조하십시오.

Red Hat OpenShift Platform Plus 정책 세트

Red Hat OpenShift Platform Plus는 여러 인프라의 애플리케이션을 안전하게 빌드, 배포, 실행 및 관리할 수 있는 하이브리드 클라우드 제품군입니다. Red Hat Advanced Cluster Management 애플리케이션을 통해 제공되는 PolicySets 를 사용하여 관리형 클러스터에 Red Hat OpenShift Platform Plus를 배포할 수 있습니다. OpenShift Platform Plus에 대한 자세한 내용은 OpenShift Platform Plus 설명서를 참조하십시오.

Red Hat OpenShift Container Platform 4.x는 Red Hat Advanced Cluster Management 구성 정책도 지원합니다.

정책 적용 방법을 알아보려면 다음 정책 설명서를 확인합니다.

자세한 내용은 Governance 를 참조하십시오.

4.2. 네임스페이스 정책

Kubernetes 구성 정책 컨트롤러는 네임스페이스 정책의 상태를 모니터링합니다. 네임스페이스 정책을 적용하여 네임스페이스에 대한 특정 규칙을 정의합니다.

다음 섹션에서 네임스페이스 정책 구조에 대해 자세히 알아봅니다.

4.2.1. 네임스페이스 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          object-templates:
            - complianceType:
              objectDefinition:
                kind: Namespace
                apiVersion: v1
                metadata:
                  name:
                ...

4.2.2. 네임스페이스 정책 YAML 테이블

필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 모든 값을 덮어쓰므로 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.2.3. 네임스페이스 정책 샘플

정책 샘플을 보려면 policy-namespace.yaml 을 참조하십시오.

자세한 내용은 보안 정책 관리를 참조하십시오. 다른 구성 정책에 대해 알아보려면 Hub 클러스터 정책 프레임워크 문서 및 Kubernetes 구성 정책 컨트롤러 를 참조하십시오.

4.3. Pod 정책

Kubernetes 구성 정책 컨트롤러는 Pod 정책의 상태를 모니터링합니다. Pod 정책을 적용하여 Pod의 컨테이너 규칙을 정의합니다. 이 정보를 사용하려면 Pod가 클러스터에 있어야 합니다.

다음 섹션에서 Pod 정책 구조에 대한 자세한 내용을 확인하십시오.

4.3.1. Pod 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType:
              objectDefinition:
                apiVersion: v1
                kind: Pod
                metadata:
                  name:
                spec:
                  containers:
                  - image:
                    name:
                ...

4.3.2. Pod 정책 테이블

표 4.2. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 값을 재정의하기 때문에 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.3.3. Pod 정책 샘플

정책 샘플을 보려면 policy-pod.yaml 을 참조하십시오.

구성 컨트롤러에서 모니터링하는 다른 구성 정책을 보려면 Kubernetes 구성 정책 컨트롤러를 참조하고 Hub 클러스터 정책 프레임워크를 참조하여 정책 YAML 구조 및 추가 필드에 대한 전체 설명을 확인합니다. 다른 정책을 관리하려면 구성 정책 설명서 생성 으로 돌아갑니다.

4.4. 메모리 사용량 정책

Kubernetes 구성 정책 컨트롤러는 메모리 사용 정책의 상태를 모니터링합니다. 메모리 사용량 정책을 사용하여 메모리 및 컴퓨팅 사용량을 제한하거나 제한합니다. 자세한 내용은 Kubernetes 문서 의 제한 범위를 참조하십시오.

다음 섹션에서 메모리 사용 정책 구조에 대해 자세히 알아봅니다.

4.4.1. 메모리 사용량 정책 YAML 구조

메모리 사용량 정책은 다음 YAML 파일과 유사할 수 있습니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType: mustonlyhave
              objectDefinition:
                apiVersion: v1
                kind: LimitRange
                metadata:
                  name:
                spec:
                  limits:
                  - default:
                      memory:
                    defaultRequest:
                      memory:
                    type:
        ...

4.4.2. 메모리 사용량 정책 테이블

표 4.3. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 값을 재정의하기 때문에 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.4.3. 메모리 사용량 정책 샘플

정책 샘플을 보려면 policy-limitmemory.yaml 을 참조하십시오. 자세한 내용은 보안 정책 관리를 참조하십시오. 컨트롤러에서 모니터링하는 다른 구성 정책을 보려면 Hub 클러스터 정책 프레임워크 문서 및 Kubernetes 구성 정책 컨트롤러를 참조하십시오.

4.5. Pod 보안 정책(더 이상 사용되지 않음)

Kubernetes 구성 정책 컨트롤러는 Pod 보안 정책의 상태를 모니터링합니다. Pod 보안 정책을 적용하여 Pod 및 컨테이너를 보호합니다.

다음 섹션에서 Pod 보안 정책 구조에 대한 자세한 내용을 확인하십시오.

4.5.1. Pod 보안 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType:
              objectDefinition:
                apiVersion: policy/v1beta1
                kind: PodSecurityPolicy
                metadata:
                  name:
                  annotations:
                    seccomp.security.alpha.kubernetes.io/allowedProfileNames:
                spec:
                  privileged:
                  allowPrivilegeEscalation:
                  allowedCapabilities:
                  volumes:
                  hostNetwork:
                  hostPorts:
                  hostIPC:
                  hostPID:
                  runAsUser:
                  seLinux:
                  supplementalGroups:
                  fsGroup:
                ...

4.5.2. Pod 보안 정책 테이블

표 4.4. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 값을 재정의하기 때문에 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.5.3. Pod 보안 정책 샘플

Pod 보안 정책 지원은 OpenShift Container Platform 및 Kubernetes v1.25 이상에서 제거됩니다. PodSecurityPolicy 리소스를 적용하면 다음과 같은 비호환 메시지가 표시될 수 있습니다.

violation - couldn't find mapping resource with kind PodSecurityPolicy, please check if you have CRD deployed

4.6. 역할 정책

Kubernetes 구성 정책 컨트롤러는 역할 정책의 상태를 모니터링합니다. 오브젝트 템플릿에서 역할을 정의하여 클러스터의 특정 역할에 대한 규칙 및 권한을 설정합니다.

다음 섹션에서 역할 정책 구조에 대해 자세히 알아봅니다.

4.6.1. 역할 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType:
              objectDefinition:
                apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                  name:
                rules:
                  - apiGroups:
                    resources:
                    verbs:
                ...

4.6.2. 역할 정책 테이블

표 4.5. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 값을 재정의하기 때문에 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.6.3. 역할 정책 샘플

클러스터의 특정 역할에 대한 규칙 및 권한을 설정하는 역할 정책을 적용합니다. 역할에 대한 자세한 내용은 역할 기반 액세스 제어를 참조하십시오. 역할 정책 샘플 보기 policy-role.yaml 을 참조하십시오.

역할 정책을 관리하는 방법에 대한 자세한 내용은 구성 정책 생성 을 참조하십시오. 컨트롤러를 모니터링하는 다른 구성 정책을 보려면 Kubernetes 구성 정책 컨트롤러를 참조하십시오.

4.7. 역할 바인딩 정책

Kubernetes 구성 정책 컨트롤러는 역할 바인딩 정책의 상태를 모니터링합니다. 관리 클러스터의 네임스페이스에 정책을 바인딩하는 역할 바인딩 정책을 적용합니다.

다음 섹션에서 네임스페이스 정책 구조에 대해 자세히 알아봅니다.

4.7.1. 역할 바인딩 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType:
              objectDefinition:
                kind: RoleBinding # role binding must exist
                apiVersion: rbac.authorization.k8s.io/v1
                metadata:
                  name:
                subjects:
                - kind:
                  name:
                  apiGroup:
                roleRef:
                  kind:
                  name:
                  apiGroup:
                ...

4.7.2. 역할 바인딩 정책 테이블

필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. spec.policy-templates 에 제공된 모든 값을 덮어쓰므로 이 값은 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.7.3. 역할 바인딩 정책 샘플

정책 샘플을 보려면 policy-rolebinding.yaml 을 참조하십시오. 정책 YAML 구조 및 추가 필드에 대한 전체 설명은 Hub 클러스터 정책 프레임워크 를 참조하십시오. 다른 구성 정책에 대한 자세한 내용은 Kubernetes 구성 정책 컨트롤러 설명서를 참조하십시오.

4.8. 보안 컨텍스트 제약 조건 정책

Kubernetes 구성 정책 컨트롤러는 SCC(보안 컨텍스트 제약 조건) 정책의 상태를 모니터링합니다. SCC(보안 컨텍스트 제약 조건) 정책을 적용하여 정책의 조건을 정의하여 Pod 권한을 제어합니다.

다음 섹션에서 SCC 정책에 대한 자세한 내용을 확인하십시오.

4.8.1. SCC 정책 YAML 구조

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          namespaceSelector:
            exclude:
            include:
            matchLabels:
            matchExpressions:
          object-templates:
            - complianceType:
              objectDefinition:
                apiVersion: security.openshift.io/v1
                kind: SecurityContextConstraints
                metadata:
                  name:
                allowHostDirVolumePlugin:
                allowHostIPC:
                allowHostNetwork:
                allowHostPID:
                allowHostPorts:
                allowPrivilegeEscalation:
                allowPrivilegedContainer:
                fsGroup:
                readOnlyRootFilesystem:
                requiredDropCapabilities:
                runAsUser:
                seLinuxContext:
                supplementalGroups:
                users:
                volumes:
                ...

4.8.2. SCC 정책 테이블

필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. spec.policy-templates 에 제공된 모든 값을 덮어쓰므로 이 값은 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

SCC 정책 콘텐츠에 대한 설명은 OpenShift Container Platform 설명서에서 보안 컨텍스트 제약 조건 관리를 참조하십시오.

4.8.3. SCC 정책 샘플

SCC(보안 컨텍스트 제약 조건) 정책을 적용하여 정책의 조건을 정의하여 Pod 권한을 제어합니다. 자세한 내용은 보안 컨텍스트 제약 조건 관리를 참조하십시오.

정책 샘플을 보려면 policy-scc.yaml 을 참조하십시오. 정책 YAML 구조 및 추가 필드에 대한 전체 설명은 Hub 클러스터 정책 프레임워크 설명서를 참조하십시오. 다른 구성 정책에 대한 자세한 내용은 Kubernetes 구성 정책 컨트롤러 설명서를 참조하십시오.

4.9. ETCD 암호화 정책

etcd-encryption 정책을 적용하여 ETCD 데이터 저장소에서 중요한 데이터를 감지하거나 암호화를 활성화합니다. Kubernetes 구성 정책 컨트롤러는 etcd 암호화 정책의 상태를 모니터링합니다. 자세한 내용은 OpenShift Container Platform 설명서에서 etcd 데이터 암호화를 참조하십시오. 참고: ETCD 암호화 정책은 Red Hat OpenShift Container Platform 4 이상만 지원합니다.

다음 섹션에서 etcd-encryption 정책 구조에 대한 자세한 내용을 확인하십시오.

4.9.1. ETCD 암호화 정책 YAML 구조

etcd-encryption 정책은 다음 YAML 파일과 유사할 수 있습니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  namespace:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  remediationAction:
  disabled:
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name:
        spec:
          remediationAction:
          severity:
          object-templates:
            - complianceType:
              objectDefinition:
                apiVersion: config.openshift.io/v1
                kind: APIServer
                metadata:
                  name:
                spec:
                  encryption:
                ...

4.9.2. ETCD 암호화 정책 테이블

표 4.6. 매개변수 테이블
필드선택 사항 또는 필수설명

apiVersion

필수 항목

값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목

정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목

정책 리소스를 식별하는 이름입니다.

metadata.namespace

필수 항목

정책의 네임스페이스입니다.

spec.remediationAction

선택 사항

정책 수정을 지정합니다. 매개변수 값은 enforceinform 입니다. 이 값은 spec.policy-templates 에 제공된 모든 값을 덮어쓰므로 선택 사항입니다.

spec.disabled

필수 항목

값을 true 또는 false 로 설정합니다. disabled 매개 변수는 정책을 활성화 및 비활성화하는 기능을 제공합니다.

spec.policy-templates[].objectDefinition

필수 항목

관리 클러스터에 평가하거나 적용해야 하는 Kubernetes 오브젝트가 포함된 구성 정책을 나열하는 데 사용됩니다.

4.9.3. ETCD 암호화 정책 샘플

정책 샘플은 policy-etcdencryption.yaml 을 참조하십시오. 정책 및 구성 정책 필드에 대한 자세한 내용은 Hub 클러스터 정책 프레임워크 설명서 및 Kubernetes 구성 정책 컨트롤러 를 참조하십시오.

4.10. Compliance Operator 정책

Compliance Operator를 사용하여 다양한 기술 구현을 자동화하고 업계 표준, 벤치마크 및 기준선의 특정 측면과 비교할 수 있습니다. Compliance Operator는 감사자가 아닙니다. 이러한 다양한 표준을 준수하거나 인증하려면 QSA(Qualified Security Assessor), 공동 인증 기관(JAB) 또는 사용자 환경을 평가할 수 있는 기타 업계의 규제 당국과 같은 승인된 감사인에 참여해야 합니다.

Compliance Operator에서 생성되는 권장 사항은 이러한 표준에 대한 일반적으로 사용 가능한 정보와 관행을 기반으로 하며, 수정을 지원할 수 있지만 실제 규정 준수는 귀하의 책임이 있습니다. 표준 준수를 위해 승인된 감사자와 협력합니다.

최신 업데이트는 Compliance Operator 릴리스 노트 를 참조하십시오.

4.10.1. Compliance Operator 정책 개요

Compliance Operator 정책을 사용하여 관리 클러스터에 Compliance Operator를 설치할 수 있습니다. Compliance Operator 정책은 Red Hat Advanced Cluster Management에서 Kubernetes 구성 정책으로 생성됩니다. OpenShift Container Platform은 규정 준수 Operator 정책을 지원합니다.

참고: Compliance Operator 정책은 IBM Power 또는 IBM Z 아키텍처에서 지원되지 않는 OpenShift Container Platform Compliance Operator를 사용합니다. Compliance Operator에 대한 자세한 내용은 OpenShift Container Platform 설명서의 Compliance Operator 이해 를 참조하십시오.

4.10.2. Compliance Operator 리소스

규정 준수 Operator 정책을 생성하면 다음 리소스가 생성됩니다.

  • Operator 설치를 위한 규정 준수 Operator 네임스페이스(openshift-compliance)
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: comp-operator-ns
spec:
  remediationAction: inform # will be overridden by remediationAction in parent policy
  severity: high
  object-templates:
    - complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: Namespace
        metadata:
          name: openshift-compliance
  • 대상 네임스페이스를 지정하는 Operator 그룹(compliance-operator)입니다.
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: comp-operator-operator-group
spec:
  remediationAction: inform # will be overridden by remediationAction in parent policy
  severity: high
  object-templates:
    - complianceType: musthave
      objectDefinition:
        apiVersion: operators.coreos.com/v1
        kind: OperatorGroup
        metadata:
          name: compliance-operator
          namespace: openshift-compliance
        spec:
          targetNamespaces:
            - openshift-compliance
  • 이름 및 채널을 참조하는 서브스크립션(comp-operator-subscription)입니다. 서브스크립션은 컨테이너에서 지원하는 프로필을 가져옵니다. 4.x 를 대체하는 현재 버전으로 다음 샘플을 참조하십시오.
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: comp-operator-subscription
spec:
  remediationAction: inform  # will be overridden by remediationAction in parent policy
  severity: high
  object-templates:
    - complianceType: musthave
      objectDefinition:
        apiVersion: operators.coreos.com/v1alpha1
        kind: Subscription
        metadata:
          name: compliance-operator
          namespace: openshift-compliance
        spec:
          channel: "4.x"
          installPlanApproval: Automatic
          name: compliance-operator
          source: redhat-operators
          sourceNamespace: openshift-marketplace

규정 준수 Operator 정책을 설치한 후 compliance-operator,ocp4rhcos4 Pod가 생성됩니다. policy-compliance-operator-install.yaml 샘플을 참조하십시오.

4.10.3. 추가 리소스

4.11. E8 검사 정책

Essential 8(E8) 검사 정책은 마스터 및 작업자 노드에서 E8 보안 프로필을 준수하는지 확인하는 검사를 배포합니다. E8 검사 정책을 적용하려면 컴플라이언스 Operator를 설치해야 합니다.

E8 검사 정책은 Red Hat Advanced Cluster Management에서 Kubernetes 구성 정책으로 생성됩니다. OpenShift Container Platform은 E8 검사 정책을 지원합니다. 자세한 내용은 OpenShift Container Platform 설명서에서 Compliance Operator 관리를 참조하십시오.

4.11.1. E8 검사 정책 리소스

E8 검사 정책을 생성할 때 다음 리소스가 생성됩니다.

  • 검사할 프로필을 식별하는 ScanSettingBinding 리소스(e8)입니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-suite-e8
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: musthave # this template checks if scan has completed by checking the status field
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ScanSettingBinding
            metadata:
              name: e8
              namespace: openshift-compliance
            profiles:
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-e8
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: rhcos4-e8
            settingsRef:
              apiGroup: compliance.openshift.io/v1alpha1
              kind: ScanSetting
              name: default
  • status 필드를 확인하여 검사가 완료되었는지 확인하는 ComplianceSuite 리소스(compliance-suite-e8)입니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-suite-e8
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: musthave # this template checks if scan has completed by checking the status field
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ComplianceSuite
            metadata:
              name: e8
              namespace: openshift-compliance
            status:
              phase: DONE
  • ComplianceCheckResult 리소스(CR)를 확인하여 검사 모음 결과를 보고하는 Compliance-suite-e8-results .

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-suite-e8-results
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: mustnothave # this template reports the results for scan suite: e8 by looking at ComplianceCheckResult CRs
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ComplianceCheckResult
            metadata:
              namespace: openshift-compliance
              labels:
                compliance.openshift.io/check-status: FAIL
                compliance.openshift.io/suite: e8

참고: 자동 수정이 지원됩니다. ScanSettingBinding 리소스를 생성하도록 적용 하도록 수정 작업을 설정합니다.

policy-compliance-operator-e8-scan.yaml 샘플을 참조하십시오. 자세한 내용은 보안 정책 관리를 참조하십시오. 참고: E8 정책이 삭제되면 대상 클러스터 또는 클러스터에서 제거됩니다.

4.12. OpenShift CIS 검사 정책

OpenShift CIS 검사 정책은 마스터 노드와 작업자 노드에서 OpenShift CIS 보안 벤치마크를 준수하는지 확인하는 검사를 배포합니다. OpenShift CIS 정책을 적용하려면 규정 준수 Operator를 설치해야 합니다.

OpenShift CIS 검사 정책은 Red Hat Advanced Cluster Management에서 Kubernetes 구성 정책으로 생성됩니다. OpenShift Container Platform은 OpenShift CIS 검사 정책을 지원합니다. 자세한 내용은 OpenShift Container Platform 설명서 의 Compliance Operator 이해 를 참조하십시오.

4.12.1. OpenShift CIS 리소스

OpenShift CIS 검사 정책을 생성할 때 다음 리소스가 생성됩니다.

  • 검사할 프로필을 식별하는 ScanSettingBinding 리소스(cis)입니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-cis-scan
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: musthave # this template creates ScanSettingBinding:cis
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ScanSettingBinding
            metadata:
              name: cis
              namespace: openshift-compliance
            profiles:
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-cis
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-cis-node
            settingsRef:
              apiGroup: compliance.openshift.io/v1alpha1
              kind: ScanSetting
              name: default
  • status 필드를 확인하여 검사가 완료되었는지 확인하는 ComplianceSuite 리소스(compliance-suite-cis)입니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-suite-cis
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: musthave # this template checks if scan has completed by checking the status field
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ComplianceSuite
            metadata:
              name: cis
              namespace: openshift-compliance
            status:
              phase: DONE
  • ComplianceCheckResult 리소스(CR)를 확인하여 검사 모음 결과를 보고하는 Compliance-suite-cis-results .

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: compliance-suite-cis-results
    spec:
      remediationAction: inform
      severity: high
      object-templates:
        - complianceType: mustnothave # this template reports the results for scan suite: cis by looking at ComplianceCheckResult CRs
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ComplianceCheckResult
            metadata:
              namespace: openshift-compliance
              labels:
                compliance.openshift.io/check-status: FAIL
                compliance.openshift.io/suite: cis

policy-compliance-operator-cis-scan.yaml 파일의 샘플을 참조하십시오. 정책 생성에 대한 자세한 내용은 보안 정책 관리를 참조하십시오.

4.13. 이미지 취약점 정책

Container Security Operator를 활용하여 컨테이너 이미지에 취약점이 있는지 감지하려면 이미지 취약점 정책을 적용합니다. 이 정책은 관리 클러스터에 Container Security Operator가 설치되지 않은 경우 설치합니다.

이미지 취약점 정책은 Kubernetes 구성 정책 컨트롤러에서 확인합니다. Security Operator에 대한 자세한 내용은 Quay 리포지토리Container Security Operator 를 참조하십시오.

참고:

자세한 내용은 다음 섹션을 확인하십시오.

4.13.1. 이미지 취약점 정책 YAML 구조

컨테이너 보안 Operator 정책을 생성할 때 다음과 같은 정책이 포함됩니다.

  • 이름과 채널을 참조하는 서브스크립션(container-security-operator)을 생성하는 정책입니다. 이 구성 정책에는 리소스를 생성하기 위해 적용할 spec.remediationAction 이 설정되어 있어야 합니다. 서브스크립션은 컨테이너에서 서브스크립션을 지원하는 프로필을 가져옵니다. 다음 예제를 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: policy-imagemanifestvuln-example-sub
    spec:
      remediationAction: enforce  # will be overridden by remediationAction in parent policy
      severity: high
      object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: operators.coreos.com/v1alpha1
            kind: Subscription
            metadata:
              name: container-security-operator
              namespace: openshift-operators
            spec:
              # channel: quay-v3.3 # specify a specific channel if desired
              installPlanApproval: Automatic
              name: container-security-operator
              source: redhat-operators
              sourceNamespace: openshift-marketplace
  • ClusterServiceVersion 을 감사하여 컨테이너 보안 Operator 설치에 성공했는지 확인하는 정보 구성 정책입니다. 다음 예제를 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: policy-imagemanifestvuln-status
    spec:
      remediationAction: inform  # will be overridden by remediationAction in parent policy
      severity: high
      object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: operators.coreos.com/v1alpha1
            kind: ClusterServiceVersion
            metadata:
              namespace: openshift-operators
            spec:
              displayName: Red Hat Quay Container Security Operator
            status:
              phase: Succeeded   # check the CSV status to determine if operator is running or not
  • 이미지 취약점 검사에서 ImageManifestVuln 오브젝트가 생성되었는지 여부를 감사하는 정보 구성 정책입니다. 다음 예제를 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: policy-imagemanifestvuln-example-imv
    spec:
      remediationAction: inform  # will be overridden by remediationAction in parent policy
      severity: high
      namespaceSelector:
        exclude: ["kube-*"]
        include: ["*"]
      object-templates:
        - complianceType: mustnothave # mustnothave any ImageManifestVuln object
          objectDefinition:
            apiVersion: secscan.quay.redhat.com/v1alpha1
            kind: ImageManifestVuln # checking for a Kind

4.13.2. 이미지 취약점 정책 샘플

policy-imagemanifestvuln.yaml 을 참조하십시오. 자세한 내용은 보안 정책 관리를 참조하십시오. 구성 컨트롤러에서 모니터링하는 다른 구성 정책을 보려면 Kubernetes 구성 정책 컨트롤러를 참조하십시오.

4.14. Red Hat OpenShift Platform Plus 정책 세트

Red Hat OpenShift Platform Plus Plus를 설치하기 위해 OpenShift Platform Plus 정책 세트(openshift-plus)를 구성하고 적용합니다.

OpenShift Platform Plus 정책 세트에는 배포된 두 개의 PolicySets 가 포함되어 있습니다. OpenShift Plus 정책 세트는 OpenShift Platform Plus 제품을 설치하도록 설정된 여러 정책을 적용합니다. Red Hat Advanced Cluster Security 보안 클러스터 서비스 및 Compliance Operator는 모든 OpenShift Container Platform 관리 클러스터에 배포됩니다.

4.14.1. 사전 요구 사항

  • AWS(Amazon Web Services) 환경에 Red Hat OpenShift Container Platform을 설치합니다.
  • Red Hat Advanced Cluster Management for Kubernetes를 설치합니다.
  • Policy Generator Kustomize 플러그인을 설치합니다. 자세한 내용은 정책 생성기 설명서를 참조하십시오.

4.14.2. OpenShift Platform Plus 정책 세트 구성 요소

hub 클러스터에 설정된 정책을 적용하면 다음 OpenShift Platform Plus 구성 요소가 설치됩니다.

표 4.7. 구성 요소 테이블
Component정책설명

Red Hat Advanced Cluster Security

policy-acs-central-ca-bundle

Kubernetes 허브 클러스터 및 관리형 클러스터에 중앙 서버를 설치하는 데 사용되는 정책입니다.

policy-acs-central-status

Red Hat Advanced Cluster Security 상태를 수신하기 위한 배포.

policy-acs-operator-central

Red Hat Advanced Cluster Security 중앙 운영자 구성.

policy-acs-sync-resources

Red Hat Advanced Cluster Security 리소스가 생성되었는지 확인하는 데 사용되는 정책입니다.

OpenShift Container Platform

policy-advanced-managed-cluster-status

관리 허브 클러스터입니다. 관리 클러스터의 관리자입니다.

Compliance Operator

policy-compliance-operator-install

Compliance Operator를 설치하는 데 사용되는 정책입니다.

Red Hat Quay

policy-config-quay

Red Hat Quay의 구성 정책.

policy-install-quay

Red Hat Quay를 설치하는 데 사용되는 정책입니다.

policy-quay-status

Red Hat Advanced Cluster Management Hub 클러스터에 설치되어 있어야 합니다.

Red Hat Advanced Cluster Management

policy-ocm-observability

Red Hat Advanced Cluster Management observability 서비스를 설정합니다.

Red Hat OpenShift Data Platform

policy-odf

Red Hat Advanced Cluster Management observability 및 Quay에서 사용하는 허브 클러스터 구성 요소에 사용할 수 있는 스토리지입니다.

policy-odf-status

Red Hat OpenShift Data Platform 상태를 구성하는 데 사용되는 정책입니다.

4.14.3. 추가 리소스

4.15. 보안 정책 관리

지정된 보안 표준, 카테고리 및 제어에 따라 클러스터 규정 준수를 보고하고 검증하는 보안 정책을 만듭니다.

다음 섹션을 확인합니다.

4.15.1. 보안 정책 생성

CLI(명령줄 인터페이스) 또는 콘솔에서 보안 정책을 생성할 수 있습니다.

필수 액세스: 클러스터 관리자

중요: * 특정 클러스터에 정책을 적용하려면 배치 및 배치 바인딩을 정의해야 합니다. placement Binding 리소스는 배치를 바인딩합니다. 클러스터 라벨 선택기 필드에 유효한 값을 입력하여 PlacementPlacementBinding 리소스를 정의합니다. * 배치 리소스를 사용하려면 ManagedClusterSet 리소스를 ManagedClusterSetBinding 리소스를 사용하여 배치 리소스의 네임스페이스에 바인딩해야 합니다. 자세한 내용은 Creating a ManagedClusterSetBinding 리소스 를 참조하십시오.

4.15.1.1. 명령줄 인터페이스에서 보안 정책 생성

CLI(명령줄 인터페이스)에서 정책을 생성하려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 정책을 생성합니다.

    oc create -f policy.yaml -n <policy-namespace>
  2. 정책에서 사용하는 템플릿을 정의합니다. 템플릿을 정의하는 policy-templates 필드를 추가하여 YAML 파일을 편집합니다. 정책은 다음 YAML 파일과 유사할 수 있습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy1
    spec:
      remediationAction: "enforce" # or inform
      disabled: false # or true
      namespaceSelector:
        include:
        - "default"
        - "my-namespace"
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: operator
              # namespace: # will be supplied by the controller via the namespaceSelector
            spec:
              remediationAction: "inform"
              object-templates:
              - complianceType: "musthave" # at this level, it means the role must exist and must have the following rules
                apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                  name: example
                objectDefinition:
                  rules:
                    - complianceType: "musthave" # at this level, it means if the role exists the rule is a musthave
                      apiGroups: ["extensions", "apps"]
                      resources: ["deployments"]
                      verbs: ["get", "list", "watch", "create", "delete","patch"]
  3. 정책을 배치 리소스에 바인딩할 Placement Binding 리소스를 정의합니다. PlacementBinding 리소스는 다음 YAML 샘플과 유사할 수 있습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding1
    placementRef:
      name: placement1
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
    subjects:
    - name: policy1
      apiGroup: policy.open-cluster-management.io
      kind: Policy
4.15.1.1.1. CLI에서 보안 정책 보기

CLI에서 보안 정책을 보려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 특정 보안 정책에 대한 세부 정보를 확인합니다.

    oc get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
  2. 다음 명령을 실행하여 보안 정책에 대한 설명을 확인합니다.

    oc describe policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
4.15.1.2. 콘솔에서 클러스터 보안 정책 생성

Red Hat Advanced Cluster Management에 로그인한 후 Governance 페이지로 이동하여 Create policy 를 클릭합니다. 콘솔에서 새 정책을 생성하면 YAML 편집기에도 YAML 파일이 생성됩니다. YAML 편집기를 보려면 Create policy 양식 시작 시 토글을 선택하여 활성화합니다.

  1. Create policy 양식을 작성한 다음 Submit (제출) 버튼을 선택합니다. YAML 파일은 다음 정책과 유사할 수 있습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      annotations:
        policy.open-cluster-management.io/categories: 'SystemAndCommunicationsProtections,SystemAndInformationIntegrity'
        policy.open-cluster-management.io/controls: 'control example'
        policy.open-cluster-management.io/standards: 'NIST,HIPAA'
        policy.open-cluster-management.io/description:
    spec:
      complianceType: musthave
      namespaces:
        exclude: ["kube*"]
        include: ["default"]
        pruneObjectBehavior: None
      object-templates:
      - complianceType: musthave
        objectDefinition:
          apiVersion: v1
          kind: Pod
          metadata:
            name: pod1
          spec:
            containers:
            - name: pod-name
              image: 'pod-image'
              ports:
              - containerPort: 80
      remediationAction: enforce
      disabled: false

    다음 PlacementBinding 예제를 참조하십시오.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-pod
    placementRef:
      name: placement-pod
      kind: Placement
      apiGroup: cluster.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io

    다음 배치 예제를 참조하십시오.

    apiVersion: cluster.open-cluster-management.io/v1beta1
     kind: Placement
     metadata:
       name: placement-pod
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchLabels:
              cloud: "IBM"
  2. 선택 사항: 정책에 대한 설명을 추가합니다.
  3. 정책 생성을 클릭합니다. 콘솔에서 보안 정책이 생성됩니다.
4.15.1.2.1. 콘솔에서 보안 정책 보기

콘솔에서 보안 정책 및 상태를 확인합니다.

  1. Governance 페이지로 이동하여 정책의 테이블 목록을 확인합니다. 참고: 정책 탭 또는 클러스터 위반 탭을 선택하여 정책의 테이블 목록을 필터링할 수 있습니다.
  2. 자세한 내용을 보려면 정책 중 하나를 선택합니다. 세부 정보 , 클러스터템플릿 탭이 표시됩니다. 클러스터 또는 정책 상태를 확인할 수 없는 경우 다음 메시지가 표시됩니다. 상태가 없습니다.
  3. 또는 Policies 탭을 선택하여 정책 목록을 확인합니다. 정책 행을 확장하여 Description,Standards,ControlsCategories 세부 정보를 확인합니다.
4.15.1.3. CLI에서 정책 세트 생성

기본적으로 정책 세트는 정책 또는 배치 없이 생성됩니다. 정책 세트에 대한 배치를 생성하고 클러스터에 존재하는 정책이 하나 이상 있어야 합니다. 정책 세트를 만들 때 다양한 정책을 추가할 수 있습니다.

다음 명령을 실행하여 CLI에서 정책 세트를 생성합니다.

oc apply -f <policyset-filename>
4.15.1.4. 콘솔에서 정책 세트 생성
  1. 탐색 메뉴에서 Governance 를 선택합니다.
  2. 정책 세트 탭을 선택합니다.
  3. Create policy set 버튼을 선택하고 양식을 작성합니다.
  4. 정책 세트에 대한 세부 정보를 추가하고 Submit (제출) 버튼을 선택합니다.

정책 테이블에는 정책이 나열됩니다.

4.15.2. 보안 정책 업데이트

보안 정책을 업데이트하는 방법을 알아봅니다.

4.15.2.1. CLI에서 정책 세트에 정책 추가
  1. 다음 명령을 실행하여 정책 세트를 편집합니다.

    oc edit policysets <your-policyset-name>
  2. 정책 세트의 policies 섹션에 정책 이름을 추가합니다.
  3. 다음 명령을 사용하여 정책 세트의 placement 섹션에 추가된 정책을 적용합니다.
oc apply -f <your-added-policy.yaml>

배치 바인딩배치 가 모두 생성됩니다.

참고: 배치 바인딩을 삭제하면 정책 세트에 의해 정책이 여전히 배치됩니다.

4.15.2.2. 콘솔에서 정책 세트에 정책 추가
  1. 정책 세트 탭을 선택하여 설정된 정책에 정책을 추가합니다.
  2. 작업 아이콘을 선택하고 편집을 선택합니다. Edit policy set form이 표시됩니다.
  3. 양식의 Policies 섹션으로 이동하여 정책 세트에 추가할 정책을 선택합니다.
4.15.2.3. 보안 정책 비활성화

정책은 기본적으로 활성화되어 있습니다. 콘솔에서 정책을 비활성화합니다.

Red Hat Advanced Cluster Management for Kubernetes 콘솔에 로그인한 후 Governance 페이지로 이동하여 정책 테이블 목록을 확인합니다.

작업 아이콘 > 정책 비활성화를 선택합니다. 정책 비활성화 대화 상자가 표시됩니다.

정책 비활성화 를 클릭합니다. 정책이 비활성화되어 있습니다.

4.15.3. 보안 정책 삭제

CLI 또는 콘솔에서 보안 정책을 삭제합니다.

  • CLI에서 보안 정책을 삭제합니다.

    1. 다음 명령을 실행하여 보안 정책을 삭제합니다.

      oc delete policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>

      정책이 삭제되면 대상 클러스터 또는 클러스터에서 제거됩니다. 다음 명령을 실행하여 정책이 제거되었는지 확인합니다. oc get policies.open-cluster-management.io <policy-name> -n <policy-namespace>

  • 콘솔에서 보안 정책을 삭제합니다.

    탐색 메뉴에서 Governance 를 클릭하여 정책의 테이블 목록을 확인합니다. 정책 위반 테이블에서 삭제할 정책의 작업 아이콘을 클릭합니다.

    제거를 클릭합니다. 정책 제거 대화 상자에서 정책 제거를 클릭합니다.

4.15.3.1. 콘솔에서 정책 세트 삭제
  1. Policy sets 탭에서 정책 세트의 Actions 아이콘을 선택합니다. 삭제 를 클릭하면 정책 집합을 영구적으로 삭제하시겠습니까? 대화 상자가 표시됩니다.
  2. Delete 버튼을 클릭합니다.

4.15.4. 정책에 의해 생성된 리소스 정리

구성 정책에서 pruneObjectBehavior 매개변수를 사용하여 정책에서 생성한 리소스를 정리합니다. pruneObjectBehavior 가 설정되면 연결된 구성 정책(또는 상위 정책)이 삭제된 후에만 관련 오브젝트가 정리됩니다.

매개변수에 사용할 수 있는 값에 대한 다음 설명을 확인합니다.

  • DeleteIfCreated: 정책에서 생성한 모든 리소스를 정리합니다.
  • DeleteAll: 정책에서 관리하는 모든 리소스를 정리합니다.
  • none: 이는 기본값이며 관련 리소스가 삭제되지 않은 이전 릴리스와 동일한 동작을 유지합니다.

명령줄에서 정책을 생성할 때 YAML 파일에서 직접 값을 설정할 수 있습니다.

콘솔에서 정책 템플릿 단계의 Prune Object Behavior 섹션에서 값을 선택할 수 있습니다.

참고:

  • Operator를 설치하는 정책에 pruneObjectBehavior 매개변수가 정의된 경우 Operator 제거를 완료하려면 추가 정리가 필요합니다. 이 정리의 일부로 Operator ClusterServiceVersion 오브젝트를 삭제해야 할 수 있습니다.
  • 관리 클러스터에서 config-policy-addon 리소스를 비활성화하면 pruneObjbectBehavior 가 무시됩니다. 정책에서 관련 리소스를 자동으로 정리하려면 애드온을 비활성화하기 전에 관리 클러스터에서 정책을 제거해야 합니다.

4.15.5. 정책 명령줄 인터페이스

policytools CLI(명령줄 인터페이스)를 사용하면 로컬에서 정책과 상호 작용하여 생성 및 디버깅을 지원할 수 있습니다.

template-resolver

template-resolver 는 정책에 포함된 관리 클러스터 및 허브 클러스터 템플릿을 확인하는 policytools 의 하위 명령입니다. template-resolver 는 파일 또는 표준 입력에서 읽습니다.

hub 클러스터 템플릿을 사용하여 정책을 해결하려면 Red Hat Advanced Cluster Management로 가져온 관리형 클러스터의 이름을 --cluster-name 인수를 제공해야 하며 hub 클러스터를 가리키는 kubeconfig 파일의 경로를 --hub-kubeconfig 인수를 제공해야 합니다.

policytools CLI는 허브 클러스터 콘솔에서 다운로드할 수 있습니다. 명령줄 툴 을 참조하십시오.

4.15.6. 추가 리소스

4.15.7. 연결이 끊긴 환경에서 Operator 정책 관리

인터넷에 연결되지 않은 Red Hat OpenShift Container Platform 클러스터에 Red Hat Advanced Cluster Management for Kubernetes 정책을 배포해야 할 수 있습니다. Operator Lifecycle Manager Operator를 설치하는 정책을 배포하는 데 배포하는 정책을 사용하는 경우 Operator 카탈로그 미러링 절차를 따라야 합니다.

Operator 이미지에 대한 액세스 권한을 확인하려면 다음 단계를 완료합니다.

  1. 정책에 사용해야 하는 패키지를 사용할 수 있는지 확인하려면 필수 패키지를 사용할 수 있는지 확인하십시오. 다음 정책이 배포되는 관리 클러스터에서 사용하는 각 이미지 레지스트리의 가용성을 확인해야 합니다.

    • container-security-operator
    • deprecated: gatekeeper-operator-product
    • compliance-operator
  2. 소스를 사용할 수 있는지 확인하려면 이미지 콘텐츠 소스 정책 구성을 참조하십시오. 이미지 콘텐츠 소스 정책은 연결이 끊긴 각 클러스터에 있어야 하며, 프로세스를 단순화하기 위해 정책을 사용하여 배포할 수 있습니다. 다음 이미지 소스 위치를 참조하십시오.

    거버넌스 정책 유형이미지 소스 위치

    컨테이너 보안

    registry.redhat.io/quay

    컴플라이언스

    registry.redhat.io/compliance

    Gatekeeper

    registry.redhat.io/rhacm2

4.15.8. 정책 세트를 사용하여 Red Hat OpenShift Platform Plus 설치

Red Hat Openshift Platform Plus 정책 세트를 적용하기 위한 지침을 계속 읽습니다. Red Hat OpenShift 정책 세트를 적용하면 Red Hat Advanced Cluster Security 보안 클러스터 서비스와 Compliance Operator가 모든 OpenShift Container Platform 관리 클러스터에 배포됩니다.

4.15.8.1. 사전 요구 사항

정책 세트를 적용하기 전에 다음 단계를 완료합니다.

  1. 서브스크립션을 클러스터에 적용할 수 있도록 하려면 policy-configure-subscription-admin-hub.yaml 정책을 적용하고 적용하도록 수정 작업을 설정해야 합니다. 다음 YAML을 복사하여 콘솔의 YAML 편집기에 붙여넣습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-configure-subscription-admin-hub
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: inform
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-configure-subscription-admin-hub
            spec:
              remediationAction: inform
              severity: low
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: rbac.authorization.k8s.io/v1
                    kind: ClusterRole
                    metadata:
                      name: open-cluster-management:subscription-admin
                    rules:
                    - apiGroups:
                      - app.k8s.io
                      resources:
                      - applications
                      verbs:
                      - '*'
                    - apiGroups:
                      - apps.open-cluster-management.io
                      resources:
                      - '*'
                      verbs:
                      - '*'
                    - apiGroups:
                      - ""
                      resources:
                      - configmaps
                      - secrets
                      - namespaces
                      verbs:
                      - '*'
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: rbac.authorization.k8s.io/v1
                    kind: ClusterRoleBinding
                    metadata:
                      name: open-cluster-management:subscription-admin
                    roleRef:
                      apiGroup: rbac.authorization.k8s.io
                      kind: ClusterRole
                      name: open-cluster-management:subscription-admin
                    subjects:
                    - apiGroup: rbac.authorization.k8s.io
                      kind: User
                      name: kube:admin
                    - apiGroup: rbac.authorization.k8s.io
                      kind: User
                      name: system:admin
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-configure-subscription-admin-hub
    placementRef:
      name: placement-policy-configure-subscription-admin-hub
      kind: Placement
      apiGroup: cluster.open-cluster-management.io
    subjects:
    - name: policy-configure-subscription-admin-hub
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-policy-configure-subscription-admin-hub
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions:
            - {key: name, operator: In, values: ["local-cluster"]}
  2. 명령줄 인터페이스에서 이전 YAML을 적용하려면 다음 명령을 실행합니다.

    oc apply -f policy-configure-subscription-admin-hub.yaml
  3. Policy Generator kustomize 플러그인을 설치합니다. Kustomize v4.5 이상을 사용합니다. Operator를 설치하기 위한 정책 생성을 참조하십시오.
  4. 정책은 정책 네임스페이스에 설치됩니다. 해당 네임스페이스를 ClusterSet 에 바인딩해야 합니다. 예를 들어 다음 예제 YAML을 복사하고 적용하여 네임스페이스를 기본 ClusterSet 에 바인딩합니다.

    apiVersion: cluster.open-cluster-management.io/v1beta2
    kind: ManagedClusterSetBinding
    metadata:
        name: default
        namespace: policies
    spec:
        clusterSet: default
  5. 다음 명령을 실행하여 명령줄 인터페이스에서 ManagedClusterSetBinding 리소스를 적용합니다.

    oc apply -f managed-cluster.yaml

사전 요구 사항을 충족한 후 정책 세트를 적용할 수 있습니다.

4.15.8.2. Red Hat OpenShift Platform Plus 정책 세트 적용
  1. Red Hat OpenShift Plus에 대한 사전 요구 사항 구성이 포함된 openshift-plus/policyGenerator.yaml 파일을 사용합니다. openshift-plus/policyGenerator.yaml 을 참조하십시오.
  2. kustomize 명령을 사용하여 허브 클러스터에 정책을 적용합니다.

    kustomize build --enable-alpha-plugins  | oc apply -f -

    참고: 설치하지 않으려는 OpenShift Platform Plus의 구성 요소의 경우 policyGenerator.yaml 파일을 편집하고 해당 구성 요소의 정책을 제거하거나 주석 처리합니다.

4.15.8.3. 추가 리소스

4.15.9. OperatorPolicy 리소스를 사용하여 Operator 설치

관리 클러스터에 OLM(Operator Lifecycle Manager) 관리형 Operator를 설치하려면 정책 정의에서 Operator Policy 정책 템플릿을 사용합니다.

4.15.9.1. Quay를 설치할 OperatorPolicy 리소스 생성

Red Hat Operator 카탈로그를 사용하여 stable-3.11 채널에 최신 Quay Operator를 설치하는 다음 operator 정책 샘플을 참조하십시오.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: install-quay
  namespace: open-cluster-management-global-set
spec:
  disabled: false
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1beta1
        kind: OperatorPolicy
        metadata:
          name: install-quay
        spec:
          remediationAction: enforce
          severity: critical
          complianceType: musthave
          upgradeApproval: None
          subscription:
            channel: stable-3.11
            name: quay-operator
            source: redhat-operators
            sourceNamespace: openshift-marketplace

OperatorPolicy 정책 템플릿을 추가하면 컨트롤러를 사용하여 operatorGroup서브스크립션 오브젝트가 클러스터에 생성됩니다. 결과적으로 OLM에서 나머지 설치를 완료합니다. 관리 클러스터의 OperatorPolicy 리소스의 .status.Conditions.status.relatedObjects 필드에서 보유 리소스의 상태를 볼 수 있습니다.

Operator 정책 상태를 확인하려면 관리 클러스터에서 다음 명령을 실행합니다.

oc -n <managed cluster namespace> get operatorpolicy install-quay
4.15.9.2. 추가 리소스

Operator 정책 컨트롤러참조

4.16. 허브 클러스터 보안

허브 클러스터 보안을 강화하여 Kubernetes용 Red Hat Advanced Cluster Management를 보호합니다. 다음 단계를 완료합니다.

  1. Secure Red Hat OpenShift Container Platform. 자세한 내용은 OpenShift Container Platform 설명서의 보안 및 컴플라이언스 를 참조하십시오.
  2. RBAC(역할 기반 액세스 제어) 설정. 자세한 내용은 역할 기반 액세스 제어를 참조하십시오.
  3. 인증서를 사용자 지정합니다. 인증서 를 참조하십시오.
  4. 클러스터 인증 정보 정의, 인증 정보 관리 개요를 참조하십시오.
  5. 클러스터 보안을 강화하는 데 도움이 되는 정책을 검토합니다. 지원되는 정책을 참조하십시오.

5장. Gatekeeper Operator 개요

Gatekeeper Operator는 감사 기능이 있는 검증 웹 후크인 Gatekeeper를 설치합니다. Operator Lifecycle Manager Operator 카탈로그에서 Red Hat OpenShift Container Platform 클러스터에 Gatekeeper Operator를 설치합니다. Red Hat Advanced Cluster Management for Kubernetes를 사용하면 Gatekeeper Operator 정책을 사용하여 허브 클러스터에 Gatekeeper를 설치할 수 있습니다. Gatekeeper를 설치한 후 다음과 같은 이점을 위해 사용하십시오.

  • Red Hat Advanced Cluster Management 정책 통합을 사용하여 관리 클러스터에서 Gatekeeper ConstraintTemplates 및 제약 조건을 배포하고 확인합니다.
  • OCI(Open Policy Agent)와 함께 실행되는 Kubernetes 사용자 정의 리소스 정의 기반 정책을 시행합니다.
  • Gatekeeper 제약 조건을 사용하여 Kubernetes API에 대한 Kubernetes 리소스 규정 준수 요청을 평가합니다.
  • OPA를 정책 엔진으로 사용하고 Rego를 정책 언어로 사용합니다.

사전 요구 사항: Gatekeeper를 설치하고 클러스터에 Gatekeeper 정책을 적용하려면 Red Hat Advanced Cluster Management for Kubernetes 또는 Red Hat OpenShift Container Platform Plus 서브스크립션이 필요합니다.

Gatekeeper Operator 사용에 대한 자세한 내용은 다음 리소스를 참조하십시오.

5.1. 일반 지원

Gatekeeper Operator에서 받는 지원을 이해하려면 다음 목록을 참조하십시오.

  • 현재 버전의 Gatekeeper Operator, 이전 버전 및 해당 버전의 모든 z-stream 릴리스를 지원합니다.
  • 이전 버전과 현재 버전에 대한 유지 관리 지원 및 관련 보안 취약점 수정 사항을 받을 수 있습니다.
  • 표준 지원을 받는 모든 Red Hat OpenShift Container Platform 버전을 지원합니다. 참고: Gatekeeper Operator는 연장된 지원을 받는 라이프 사이클 종료 버전 또는 버전에서 지원되지 않습니다.

Gatekeeper Operator의 릴리스 노트를 보려면 gatekeeper-operator-bundle 을 참조하십시오.

5.2. Operator 채널

Gatekeeper Operator를 사용하면 두 가지 유형의 채널에 액세스하여 업그레이드를 수행할 수 있습니다. 이러한 채널은 stable 채널과 y-stream 버전 채널입니다.

stable 채널을 사용하면 x-stream,y-stream 또는 z-stream 이든 관계없이 사용 가능한 최신 버전에 액세스할 수 있습니다. stable 채널에는 최신 y-stream 채널의 최신 버전이 포함되어 있습니다.

y-stream 버전 채널을 사용하면 특정 y-stream의 모든 z-stream 버전에 액세스할 수 있습니다.

5.3. Gatekeeper Operator 구성

Operator Lifecycle Manager 카탈로그에서 Gatekeeper Operator를 설치하여 클러스터에 Gatekeeper를 설치합니다. Red Hat Advanced Cluster Management를 사용하면 정책을 사용하여 거버넌스 프레임워크를 사용하여 Gatekeeper Operator를 설치할 수 있습니다. Gatekeeper Operator를 설치한 후 Gatekeeper Operator 사용자 지정 리소스를 구성하여 Gatekeeper를 설치합니다.

5.3.1. 사전 요구 사항

  • 필수 액세스: 클러스터 관리자.
  • 클러스터에 Operator 추가 및 OpenShift Container Platform 설명서추가 리소스 섹션을 완료하여 OLM(Operator Lifecycle Manager) 및 OperatorHub를 사용하는 방법을 알아봅니다.

5.3.2. Gatekeeper 사용자 정의 리소스 샘플

Gatekeeper Operator 사용자 지정 리소스는 Gatekeeper Operator가 클러스터에서 Gatekeeper 설치를 시작하도록 지시합니다. Gatekeeper를 설치하려면 샘플 및 기본값이 포함된 다음 샘플 YAML을 사용합니다.

apiVersion: operator.gatekeeper.sh/v1alpha1
kind: Gatekeeper
metadata:
  name: gatekeeper
spec:
  audit:
    replicas: 1
    auditEventsInvolvedNamespace: Enabled 1
    logLevel: DEBUG
    auditInterval: 10s
    constraintViolationLimit: 55
    auditFromCache: Enabled
    auditChunkSize: 66
    emitAuditEvents: Enabled
    containerArguments: 2
    - name: ""
      value: ""
    resources:
      limits:
        cpu: 500m
        memory: 150Mi
      requests:
        cpu: 500m
        memory: 130Mi
  validatingWebhook: Enabled
  mutatingWebhook: Enabled
  webhook:
    replicas: 3
    emitAdmissionEvents: Enabled
    admissionEventsInvolvedNamespace: Enabled 3
    disabledBuiltins:
     - http.send
    operations: 4
     - "CREATE"
     - "UPDATE"
     - "CONNECT"
    failurePolicy: Fail
    containerArguments: 5
    - name: ""
      value: ""
    resources:
      limits:
        cpu: 480m
        memory: 140Mi
      requests:
        cpu: 400m
        memory: 120Mi
  nodeSelector:
    region: "EMEA"
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              auditKey: "auditValue"
          topologyKey: topology.kubernetes.io/zone
  tolerations:
    - key: "Example"
      operator: "Exists"
      effect: "NoSchedule"
  podAnnotations:
    some-annotation: "this is a test"
    other-annotation: "another test"
1
버전 3.14 이상의 경우 auditEventsInvolvedNamespace 매개변수를 활성화하여 생성하려는 네임스페이스 감사 이벤트를 관리합니다. 이 매개변수를 활성화하면 Gatekeeper 컨트롤러 배포는 --audit-events-involved-namespace=true 인수를 사용하여 실행됩니다.
3
버전 3.14 이상의 경우 admissionEventsInvolvedNamespace 매개변수를 활성화하여 생성하려는 네임스페이스 승인 이벤트를 관리합니다. 이 매개변수를 활성화하면 Gatekeeper 컨트롤러 배포는 --admission-events-involved-namespace=true 인수를 사용하여 실행됩니다.
4
버전 3.14 이상에서는 Webhook 작업을 관리하려면 operations 매개변수, "CREATE", "UPDATE", "CONNECT", "DELETE" 에 대해 다음 값을 사용합니다.
2 5
버전 3.17 이상의 경우 컨테이너에 전달할 인수 이름 및 값 목록을 제공하여 containerArguments 를 지정합니다. 인수 이름에서 선행 대시를 생략합니다. 생략된 값은 true 로 처리됩니다. 인수가 이전에 다른 필드의 operator 또는 구성에 의해 설정된 경우 제공하는 인수는 무시됩니다. 다음 플래그 목록은 거부 목록이며 현재 지원되지 않는 플래그를 참조하십시오.
  • port
  • prometheus-port
  • health-addr
  • validating-webhook-configuration-name
  • mutating-webhook-configuration-name
  • disable-cert-rotation
  • client-cert-name
  • tls-min-version

5.3.3. 동기화 세부 정보를 위해 auditFromCache 구성

버전 3.14 이상의 경우 Gatekeeper Operator는 auditFromCache 매개변수를 사용하여 감사 구성에 대한 Gatekeeper 사용자 정의 리소스에 설정을 노출합니다. 이 설정은 기본적으로 비활성화되어 있습니다. 제약 조건에서 리소스를 수집하도록 auditFromCache 매개변수를 구성합니다.

auditFromCache 매개변수를 자동으로 설정하면 Gatekeeper Operator가 제약에서 리소스를 수집하고 해당 리소스를 Gatekeeper Config 리소스에 삽입합니다. 리소스가 없으면 Gatekeeper Operator가 Config 리소스를 생성합니다.

auditFromCache 매개변수를 Enabled 로 설정하는 경우 Gatekeeper Config 리소스를 캐시와 동기화할 오브젝트와 수동으로 설정해야 합니다. 자세한 내용은 Gatekeeper 문서의 감사 구성 을 참조하십시오.

제약 조건에서 리소스 컬렉션에 대한 auditFromCache 매개변수를 구성하려면 다음 단계를 완료합니다.

  1. Gatekeeper 리소스에서 auditFromCache 를 자동으로 설정합니다. 다음 예제를 참조하십시오.

    apiVersion: operator.gatekeeper.sh/v1alpha1
    kind: Gatekeeper
    metadata:
      name: gatekeeper
    spec:
      audit:
        replicas: 2
        logLevel: DEBUG
        auditFromCache: Automatic
  2. 리소스가 Config 리소스에 추가되었는지 확인하려면 syncOnly 매개변수 섹션이 추가되었는지 확인합니다. 다음 명령을 실행합니다.

    oc get configs.config.gatekeeper.sh config -n openshift-gatekeeper-system

    Config 리소스는 다음 예와 유사할 수 있습니다.

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
     name: config
     namespace: "openshift-gatekeeper-system"
    spec:
     sync:
       syncOnly:
       - group: ""
         version: "v1"
         kind: "Namespace"
       - group: ""
         version: "v1"
         kind: "Pod"

선택 사항: 다음 명령을 실행하여 Gatekeeper Operator 사용자 정의 리소스에 대한 설명에서 auditFromCache 설정에 대한 설명을 볼 수 있습니다.

oc explain gatekeeper.spec.audit.auditFromCache

5.3.4. 추가 리소스

  • 자세한 내용은 Gatekeeper 문서의 감사 구성 을 참조하십시오.

5.4. Gatekeeper Operator 설치 정책 관리

Red Hat Advanced Cluster Management 정책을 사용하여 관리 클러스터에 Gatekeeper operator 및 Gatekeeper를 설치합니다.

필수 액세스: 클러스터 관리자

Gatekeeper Operator 설치 정책을 생성, 보기 및 업데이트하려면 다음 섹션을 완료합니다.

5.4.1. Gatekeeper Operator 정책을 사용하여 Gatekeeper 설치

Gatekeeper Operator 정책을 설치하려면 구성 정책 컨트롤러를 사용합니다. 설치하는 동안 Operator 그룹 및 서브스크립션에서는 Gatekeeper Operator를 가져와서 관리 클러스터에 설치합니다. 그런 다음 이 정책은 Gatekeeper 사용자 지정 리소스를 생성하여 Gatekeeper를 구성합니다.

Red Hat Advanced Cluster Management 구성 정책 컨트롤러는 Gatekeeper Operator 정책을 확인하고 적용 수정 작업을 지원합니다. 컨트롤러를 적용 하도록 설정하면 관리 클러스터에서 Gatekeeper Operator 오브젝트가 자동으로 생성됩니다.

5.4.2. 콘솔에서 Gatekeeper 정책 생성

콘솔에서 Gatekeeper 정책을 생성할 때 Gatekeeper를 설치 하도록 수정 적용을 설정해야 합니다.

5.4.2.1. Gatekeeper Operator 정책 보기

콘솔에서 Gatekeeper Operator 정책 및 해당 상태를 보려면 다음 단계를 완료하십시오.

  1. policy-gatekeeper-operator 정책을 선택하여 자세한 내용을 확인합니다.
  2. 클러스터 탭을 선택하여 정책 위반을 확인합니다.

5.4.3. Gatekeeper 및 Gatekeeper Operator 업그레이드

Gatekeeper 및 Gatekeeper Operator의 버전을 업그레이드할 수 있습니다. Gatekeeper Operator 정책을 사용하여 Gatekeeper Operator를 설치할 때 upgradeApproval 의 값을 확인합니다. upgradeApproval 을 자동으로 설정하면 Operator가 자동으로 업그레이드됩니다.

upgradeApprovalManual 로 설정하는 경우 Gatekeeper Operator가 설치된 각 클러스터에 대한 업그레이드를 수동으로 승인해야 합니다.

5.4.4. Gatekeeper Operator 정책 비활성화

policy-gatekeeper-operator 정책을 비활성화하려면 콘솔의 Actions 메뉴에서 Disable 옵션을 선택하거나 CLI에서 spec.disabled: true 를 설정합니다.

5.4.5. Gatekeeper Operator 정책 삭제

CLI에서 Gatekeeper Operator 정책을 삭제하려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 Gatekeeper Operator 정책을 삭제합니다.

    oc delete policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>
  2. 다음 명령을 실행하여 정책을 삭제했는지 확인합니다.

    oc get policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>

콘솔에서 Gatekeeper Operator 정책을 삭제하려면 policy -gatekeeper-operator 정책에 대한 Actions 아이콘을 클릭하고 Delete 를 선택합니다.

5.4.6. Gatekeeper 제약 조건, Gatekeeper 인스턴스 및 Gatekeeper Operator 정책 설치 제거

Gatekeeper 정책을 제거하려면 다음 섹션의 단계를 완료합니다.

5.4.6.1. Gatekeeper 제약 조건 제거

관리 클러스터에서 Gatekeeper 제약 조건 및 ConstraintTemplate 을 제거하려면 다음 단계를 완료하십시오.

  1. Gatekeeper 제약 조건 또는 ConstraintTemplate 정책을 편집합니다.
  2. Gatekeeper ConstraintConstraintTemplate 을 생성하는 데 사용한 템플릿을 찾습니다.
  3. 템플릿 목록에서 항목을 삭제합니다. (또는 유일한 템플릿인 경우 정책을 삭제합니다.)
  4. 정책을 저장하고 적용합니다.

참고: 제약 조건 및 ConstraintTemplateConfigurationPolicy 가 아닌 policy-templates 에서 직접 제공됩니다.

5.4.6.2. Gatekeeper 인스턴스 제거

관리 클러스터에서 Gatekeeper 인스턴스를 제거하려면 다음 단계를 완료합니다.

  1. Gatekeeper Operator 정책을 편집합니다.
  2. Gatekeeper Operator 사용자 정의 리소스를 생성하는 데 사용한 ConfigurationPolicy 템플릿을 찾습니다.
  3. ConfigurationPolicy 템플릿의 complianceType 값을 mustnothave 로 변경합니다. 값을 변경하면 Gatekeeper 사용자 지정 리소스가 삭제되고 Gatekeeper operator에 신호를 보내 Gatekeeper 배포를 정리합니다.
5.4.6.3. Gatekeeper Operator 제거

관리 클러스터에서 Gatekeeper Operator를 제거하려면 다음 단계를 완료합니다.

  1. Gatekeeper Operator 정책을 편집합니다.
  2. Subscription CR을 생성하는 데 사용한 OperatorPolicy 템플릿을 찾습니다.
  3. OperatorPolicy 템플릿의 complianceType 값을 mustnothave 로 변경합니다.

5.4.7. 추가 리소스

자세한 내용은 다음 리소스를 참조하십시오.

5.5. Gatekeeper 제약 조건 및 제약 조건 템플릿 통합

Gatekeeper 정책을 생성하려면 ConstraintTemplates 및 제약 조건을 사용합니다. 정책 리소스의 policy-templates 에 템플릿 및 제약 조건을 추가합니다. Red Hat Advanced Cluster Management 정책에서 Gatekeeper 제약 조건을 사용하는 다음 YAML 예제를 확인합니다.

  • ConstraintTemplates 및 제약 조건: Gatekeeper 제약 조건 및 Gatekeeper 감사 결과 집계에 Red Hat Advanced Cluster Management 정책을 사용하여 Gatekeeper 통합 기능을 사용합니다. 다음 예제에서는 Gatekeeper ConstraintTemplate 및 제약 조건(K8sRequiredLabels)을 정의하여 모든 네임스페이스에 gatekeeper 라벨이 설정되어 있는지 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: require-gatekeeper-labels-on-ns
    spec:
      remediationAction: inform 1
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: templates.gatekeeper.sh/v1beta1
            kind: ConstraintTemplate
            metadata:
              name: k8srequiredlabels
              annotations:
                policy.open-cluster-management.io/severity: low 2
            spec:
              crd:
                spec:
                  names:
                    kind: K8sRequiredLabels
                  validation:
                    openAPIV3Schema:
                      properties:
                        labels:
                          type: array
                          items: string
              targets:
                - target: admission.k8s.gatekeeper.sh
                  rego: |
                    package k8srequiredlabels
                    violation[{"msg": msg, "details": {"missing_labels": missing}}] {
                      provided := {label | input.review.object.metadata.labels[label]}
                      required := {label | label := input.parameters.labels[_]}
                      missing := required - provided
                      count(missing) > 0
                      msg := sprintf("you must provide labels: %v", [missing])
                    }
        - objectDefinition:
            apiVersion: constraints.gatekeeper.sh/v1beta1
            kind: K8sRequiredLabels
            metadata:
              name: ns-must-have-gk
              annotations:
                policy.open-cluster-management.io/severity: low 3
            spec:
              enforcementAction: dryrun
              match:
                kinds:
                  - apiGroups: [""]
                    kinds: ["Namespace"]
              parameters:
                labels: ["gatekeeper"]
    1
    remediationAction알리는 것으로 설정되어 있으므로 Gatekeeper 제약 조건의 enforcementAction 필드가 warn 로 재정의됩니다. 즉, Gatekeeper는 게이트 키퍼 레이블이 누락된 네임스페이스 생성 또는 업데이트에 대해 탐지하고 경고합니다. 정책 수정적용하도록 설정된 경우 Gatekeeper 제약 조건 시행 필드를 거부하도록 덮어씁니다. 이 컨텍스트에서 이 구성을 사용하면 모든 사용자가 gatekeeper 레이블이 없는 네임스페이스를 생성하거나 업데이트할 수 없습니다.
    2 3
    선택 사항: 각 Gatekeeper 제약 조건 또는 제약 조건 템플릿에 대해 policy.open-cluster-management.io/severity 주석의 심각도 값을 설정합니다. 유효한 값은 다른 Red Hat Advanced Cluster Management 정책 유형( 낮음,중간,높음 또는 심각)과 동일합니다.

    이전 정책에서는 다음과 같은 정책 상태 메시지를 수신할 수 있습니다. warn - you must provide labels: {"gatekeeper"} (On Namespace default); warn - you must provide labels: {"gatekeeper"} (on Namespace gatekeeper-system). 정책에서 Gatekeeper 제약 조건 또는 ConstraintTemplates 를 삭제하면 관리 클러스터에서 제약 조건 및 ConstraintTemplates 도 삭제됩니다.

    콘솔에서 특정 관리 클러스터에 대한 Gatekeeper 감사 결과를 보려면 정책 템플릿 결과 페이지로 이동합니다. search가 활성화된 경우 감사에 실패한 Kubernetes 오브젝트의 YAML을 확인합니다.

    참고:

    • 관련 리소스 섹션은 Gatekeeper가 감사 결과를 생성하는 경우에만 사용할 수 있습니다.
    • Gatekeeper 감사는 기본적으로 1분마다 실행됩니다. 관리 클러스터의 Red Hat Advanced Cluster Management 정책 상태에서 볼 수 있도록 감사 결과가 hub 클러스터로 다시 전송됩니다.
  • policy-gatekeeper-admission : Red Hat Advanced Cluster Management 정책 내에서 policy-gatekeeper-admission 구성 정책을 사용하여 Gatekeeper 승인 Webhook에서 거부하는 Kubernetes API 요청을 확인합니다. 다음 예제를 확인합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: policy-gatekeeper-admission
    spec:
      remediationAction: inform 1
      severity: low
      object-templates:
        - complianceType: mustnothave
          objectDefinition:
            apiVersion: v1
            kind: Event
            metadata:
              namespace: openshift-gatekeeper-system 2
              annotations:
                constraint_action: deny
                constraint_kind: K8sRequiredLabels
                constraint_name: ns-must-have-gk
                event_type: violation
    1
    ConfigurationPolicy remediationAction 매개변수는 상위 정책의 remediationAction 으로 덮어씁니다.
    2
    Gatekeeper가 다른 경우 실행 중인 실제 네임스페이스로 설정합니다.

5.5.1. 추가 리소스

자세한 내용은 다음 리소스를 참조하십시오.

6장. 보안 개요

Kubernetes 구성 요소에 대한 Red Hat Advanced Cluster Management의 보안을 관리합니다. 정의된 정책 및 프로세스를 통해 클러스터를 관리하여 위험을 식별하고 최소화합니다. 정책을 사용하여 규칙을 정의하고 제어를 설정합니다.

사전 요구 사항: Red Hat Advanced Cluster Management for Kubernetes에 대한 인증 서비스 요구 사항을 구성해야 합니다. 자세한 내용은 액세스 제어를 참조하십시오.

다음 주제를 읽고 클러스터 보안에 대해 자세히 알아보십시오.

6.1. 인증서 소개

다양한 인증서를 사용하여 Kubernetes 클러스터용 Red Hat Advanced Cluster Management의 진위 여부를 확인할 수 있습니다. 인증서 관리에 대해 알아보려면 계속 읽으십시오.

6.1.1. 인증서

Red Hat Advanced Cluster Management에서 실행되는 서비스에 필요한 모든 인증서는 Red Hat Advanced Cluster Management를 설치하는 동안 생성됩니다. Red Hat OpenShift Container Platform의 다음 구성 요소에서 생성 및 관리하는 다음 인증서 목록을 확인하십시오.

  • OpenShift Service Serving 인증서
  • Red Hat Advanced Cluster Management webhook 컨트롤러
  • Kubernetes 인증서 API
  • OpenShift 기본 수신

필수 액세스: 클러스터 관리자

인증서 관리에 대해 자세히 알아보려면 계속 읽으십시오.

참고: 사용자는 인증서 교체 및 업데이트를 담당합니다.

6.1.1.1. Red Hat Advanced Cluster Management hub 클러스터 인증서

OpenShift 기본 수신 인증서는 기술적으로 허브 클러스터 인증서입니다. Red Hat Advanced Cluster Management 설치 후 관찰 기능 인증서가 생성 및 사용하여 허브 클러스터와 관리 클러스터 간의 트래픽에 상호 TLS를 제공합니다.

  • open-cluster-management-observability 네임스페이스에는 다음 인증서가 포함되어 있습니다.

    • observability-server-ca-certs: 서버 측 인증서에 서명하는 CA 인증서
    • observability-client-ca-certs: 클라이언트 측 인증서에 서명하는 CA 인증서
    • observability-server-certs: observability-observatorium-api 배포에서 사용하는 서버 인증서
    • observability-grafana-certs: observability-rbac-query-proxy 배포에서 사용하는 클라이언트 인증서
  • open-cluster-management-addon-observability 네임스페이스에는 관리 클러스터에서 다음 인증서가 포함되어 있습니다.

    • observability-managed-cluster-certs: 허브 서버의 observability-server-ca-certs 와 동일한 서버 CA 인증서 사용
    • observability-controller-open-cluster-management.io-observability-signer-client-cert: metrics-collector-deployment에서 사용하는 클라이언트 인증서

CA 인증서는 5년 동안 유효하며 다른 인증서는 1년 동안 유효합니다. 모든 관찰 가능 인증서는 만료 시 자동으로 새로 고쳐집니다. 인증서가 자동으로 갱신될 때의 영향을 이해하려면 다음 목록을 확인하십시오.

  • CA가 아닌 인증서는 나머지 유효한 시간이 73일 미만이 아닌 경우 자동으로 갱신됩니다. 인증서가 갱신되면 관련 배포의 Pod가 갱신된 인증서를 사용하도록 자동으로 다시 시작됩니다.
  • CA 인증서는 나머지 유효한 시간이 1년을 넘지 않으면 자동으로 갱신됩니다. 인증서가 갱신되면 이전 CA가 삭제되지 않고 업데이트된 CA와 함께 생성됩니다. 이전 인증서와 갱신된 인증서 모두 관련 배포에서 사용되며 계속 작동합니다. 이전 CA 인증서는 만료 시 삭제됩니다.
  • 인증서가 업데이트되면 허브 클러스터와 관리 클러스터 간의 트래픽이 중단되지 않습니다.

다음 Red Hat Advanced Cluster Management Hub 클러스터 인증서 표를 확인하십시오.

표 6.1. Red Hat Advanced Cluster Management hub 클러스터 인증서
네임스페이스시크릿 이름Pod 레이블 

open-cluster-management

channels-apps-open-cluster-management-webhook-svc-ca

app=multicluster-operators-channel

open-cluster-management

channels-apps-open-cluster-management-webhook-svc-signed-ca

app=multicluster-operators-channel

open-cluster-management

multicluster-operators-application-svc-ca

app=multicluster-operators-application

open-cluster-management

multicluster-operators-application-svc-signed-ca

app=multicluster-operators-application

open-cluster-management-hub

registration-webhook-serving-cert signer-secret

필요하지 않음

open-cluster-management-hub

6.1.1.2. Red Hat Advanced Cluster Management 관리 인증서

Red Hat Advanced Cluster Management 관리 인증서 및 관련 시크릿이 포함된 구성 요소 Pod의 요약된 목록은 다음 표를 참조하십시오.

표 6.2. Red Hat Advanced Cluster Management 관리 인증서가 포함된 Pod
네임스페이스시크릿 이름(해당되는 경우)

open-cluster-management-agent-addon

cluster-proxy-open-cluster-management.io-proxy-agent-signer-client-cert

open-cluster-management-agent-addon

cluster-proxy-service-proxy-server-certificates

6.1.1.2.1. 관리형 클러스터 인증서

인증서를 사용하여 허브 클러스터로 관리되는 클러스터를 인증할 수 있습니다. 따라서 이러한 인증서와 관련된 문제 해결 시나리오를 알고 있어야 합니다.

관리형 클러스터 인증서는 자동으로 새로 고쳐집니다.

6.1.1.3. 추가 리소스

6.1.2. 인증서 관리

인증서를 새로 고침, 교체, 교체 및 나열하는 방법에 대한 정보를 계속 읽습니다.

6.1.2.1. Red Hat Advanced Cluster Management Webhook 인증서 새로 고침

Red Hat Advanced Cluster Management 서비스에서 생성 및 관리하는 인증서인 Red Hat Advanced Cluster Management 관리 인증서를 새로 고칠 수 있습니다.

Red Hat Advanced Cluster Management에서 관리하는 인증서를 새로 고치려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 Red Hat Advanced Cluster Management 관리 인증서와 연결된 보안을 삭제합니다.

    oc delete secret -n <namespace> <secret> 1
    1
    & lt;namespace& gt ; 및 <secret >을 사용하려는 값으로 바꿉니다.
  2. 다음 명령을 실행하여 Red Hat Advanced Cluster Management 관리 인증서와 연결된 서비스를 다시 시작합니다.

    oc delete pod -n <namespace> -l <pod-label> 1
    1
    & lt;namespace > 및 < pod-label >을 Red Hat Advanced Cluster Management 관리 클러스터 인증서 테이블의 값으로 바꿉니다.

    참고: pod-label 을 지정하지 않으면 재시작해야 하는 서비스가 없습니다. 보안이 다시 생성되고 자동으로 사용됩니다.

6.1.2.2. alertmanager 경로에 대한 인증서 교체

OpenShift 기본 수신 인증서를 사용하지 않으려면 alertmanager 경로를 업데이트하여 observability alertmanager 인증서를 교체합니다. 다음 단계를 완료합니다.

  1. 다음 명령을 사용하여 관찰 기능 인증서를 검사합니다.

    openssl x509  -noout -text -in ./observability.crt
  2. 인증서의CN(일반 이름)을 alertmanager 로 변경합니다.
  3. alertmanager 경로의 호스트 이름으로 csr.cnf 구성 파일의 SAN을 변경합니다.
  4. open-cluster-management-observability 네임스페이스에 다음 두 개의 시크릿을 생성합니다. 다음 명령을 실행합니다.

    oc -n open-cluster-management-observability create secret tls alertmanager-byo-ca --cert ./ca.crt --key ./ca.key
    
    oc -n open-cluster-management-observability create secret tls alertmanager-byo-cert --cert ./ingress.crt --key ./ingress.key
6.1.2.3. gatekeeper 웹 후크 인증서 교체

gatekeeper 웹 후크 인증서를 교체하려면 다음 단계를 완료합니다.

  1. 다음 명령을 사용하여 인증서가 포함된 보안을 편집합니다.

    oc edit secret -n openshift-gatekeeper-system gatekeeper-webhook-server-cert
  2. data 섹션에서 다음 콘텐츠를 삭제합니다. ca.crt,ca.key,tls.crt, tls.key.key .
  3. 다음 명령을 사용하여 gatekeeper -controller-manager Pod 를 삭제하여 gatekeeper 웹 후크 서비스를 다시 시작합니다.

    oc delete pod -n openshift-gatekeeper-system -l control-plane=controller-manager

gatekeeper 웹 후크 인증서가 순환됩니다.

6.1.2.4. 인증서 교체 확인

다음 단계를 사용하여 인증서가 순환되었는지 확인합니다.

  1. 확인할 시크릿을 식별합니다.
  2. tls.crt 키를 확인하여 인증서를 사용할 수 있는지 확인합니다.
  3. 다음 명령을 사용하여 인증서 정보를 표시합니다.

    oc get secret <your-secret-name> -n open-cluster-management -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout

    & lt;your-secret-name >을 확인 중인 보안 이름으로 바꿉니다. 필요한 경우 네임스페이스 및 JSON 경로도 업데이트합니다.

  4. 출력에서 유효한 세부 정보를 확인합니다. 다음 유효성 검사 예제를 확인합니다.

    Validity
                Not Before: Jul 13 15:17:50 2023 GMT 1
                Not After : Jul 12 15:17:50 2024 GMT 2
    1
    Not Before 값은 인증서를 교체한 날짜와 시간입니다.
    2
    Not After 값은 인증서 만료 날짜 및 시간입니다.
6.1.2.5. 허브 클러스터 관리 인증서 나열

내부적으로 OpenShift Service Serving 인증서 서비스를 사용하는 허브 클러스터 관리 인증서 목록을 볼 수 있습니다. 다음 명령을 실행하여 인증서를 나열합니다.

for ns in multicluster-engine open-cluster-management ; do echo "$ns:" ; oc get secret -n $ns -o custom-columns=Name:.metadata.name,Expiration:.metadata.annotations.service\\.beta\\.openshift\\.io/expiry | grep -v '<none>' ; echo ""; done

자세한 내용은 추가 리소스OpenShift Service Serving 인증서 섹션을 참조하십시오.

참고: 관찰 기능이 활성화된 경우 인증서가 생성되는 추가 네임스페이스가 있습니다.

6.1.2.6. 추가 리소스

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.