검색

2.6. 보안 정책 관리

download PDF

거버넌스 대시보드를 사용하여 보안 정책 및 정책 위반을 생성, 보기 및 관리할 수 있습니다. CLI 및 콘솔에서 정책에 대한 YAML 파일을 생성할 수 있습니다.

2.6.1. 거버넌스 페이지

관리 페이지에 다음 탭이 표시됩니다.

  • 개요

    개요 탭에서 다음 요약 카드를 확인하십시오. 정책 위반,정책 위반 ,클러스터,카테고리,제어표준.

  • 정책 세트

    허브 클러스터 정책 세트를 만들고 관리합니다.

  • Policies

    보안 정책을 생성하고 관리합니다. 정책 표에는 이름,네임스페이스,상태 관리,정책 세트,클러스터 위반,소스,자동화생성 이라는 세부 정보가 나열됩니다.

    Actions 아이콘을 선택하여 정책을 알리거나 적용하도록 수정을 편집, 활성화 또는 비활성화, 설정 또는 설정할 수 있습니다. 드롭다운 화살표를 선택하여 행을 확장하여 특정 정책의 카테고리 및 표준을 볼 수 있습니다.

    여러 정책을 선택하고 Actions 버튼을 클릭하여 대규모 작업을 완료합니다. 필터 버튼을 클릭하여 정책 테이블을 사용자 지정할 수도 있습니다.

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

  • 수동 실행 모드: 수동으로 이 자동화를 한 번 실행하도록 설정합니다. 자동화가 실행된 후 비활성화 됨으로 설정됩니다. 자동화의 Manual run 확인란을 선택합니다.
  • once mode: 정책을 위반하면 자동화가 한 번 실행됩니다. 자동화가 실행된 후 비활성화 됨으로 설정됩니다. 자동화가 disabled 로 설정된 후 자동화를 수동으로 계속 실행해야 합니다. 한 번 모드를 실행하면 정책을 위반하는 클러스터 목록과 target_cluster 의 추가 변수가 자동으로 제공됩니다. Ansible Tower 작업 템플릿에는 EXTRA VARIABLES (추가 변수) 섹션에 대해 PROMPT ONECDHE(시작 시 PROMPT)가 활성화되어 있어야 합니다.
  • Disabled: 예약된 자동화가 비활성화 됨으로 설정되면 설정이 업데이트될 때까지 자동화가 실행되지 않습니다.

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

  • 세부 정보: 세부 정보 탭을 선택하여 정책 세부 정보와 배치 세부 정보를 확인합니다. 배치 테이블의 Compliance 열은 표시되는 클러스터의 규정 준수를 확인하는 링크를 제공합니다.
  • 결과 탭을 선택하여 정책과 연결된 모든 클러스터의 테이블 목록을 확인합니다.

    Message 열에서 View details 링크를 클릭하여 템플릿 세부 정보, 템플릿 YAML 및 관련 리소스를 확인합니다. 관련 리소스도 볼 수 있습니다. 기록 보기 링크를 클릭하여 위반 메시지와 마지막 보고서의 시간을 확인합니다.

다음 주제를 검토하여 보안 정책 생성 및 업데이트에 대해 자세히 알아보십시오.

자세한 내용은 관리에서 참조하십시오.

2.6.2. 거버넌스를 위한 Ansible Tower 구성

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

2.6.2.1. 사전 요구 사항

  • Red Hat OpenShift Container Platform 4.5 이상
  • Ansible Tower 버전 3.7.3 또는 이후 버전이 설치되어 있어야 합니다. 지원되는 최신 Ansible Tower 버전을 설치하는 것이 좋습니다. 자세한 내용은 Red Hat Ansible Tower 설명서 를 참조하십시오.
  • Ansible Automation Platform Resource Operator를 hub 클러스터에 설치하여 Ansible 작업을 거버넌스 프레임워크에 연결합니다. AnsibleJob을 사용하여 Ansible Tower 작업을 시작할 때 최상의 결과를 얻으려면 Ansible Tower 작업 템플릿이 멱등이어야 합니다. Ansible Automation Platform Resource Operator가 없는 경우 Red Hat OpenShift Container Platform OperatorHub 페이지에서 확인할 수 있습니다.

Ansible Tower 자동화 설치 및 구성에 대한 자세한 내용은 Ansible 작업 설정을참조하십시오.

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

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

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

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

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

  • 수동 실행: 이 자동화를 수동으로 한 번 실행하도록 설정합니다. 자동화가 실행된 후 비활성화 됨으로 설정됩니다. 참고: 일정 빈도가 비활성화된 경우에만 수동 실행 모드를 선택할 수 있습니다.
  • 한 번 실행: 정책이 위반되면 자동화가 한 번 실행됩니다. 자동화가 실행된 후 비활성화 됨으로 설정됩니다. 자동화가 disabled 로 설정된 후 자동화를 수동으로 계속 실행해야 합니다. 한 번 모드를 실행하면 정책을 위반하는 클러스터 목록과 target_cluster 의 추가 변수가 자동으로 제공됩니다. Ansible Tower 작업 템플릿에는 EXTRA VARIABLES (추가 변수 ) 섹션에 대해 PROMPT ON ECDHE(시작 시 확인)가 활성화되어 있어야 합니다.
  • 자동 비활성화: 예약된 자동화가 비활성화 됨으로 설정되면 설정이 업데이트될 때까지 자동화가 실행되지 않습니다.

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

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

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

2.6.2.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. 이전 샘플의 Ansible 작업 템플릿 이름은 Policy Compliance Template 입니다. 작업 템플릿 이름과 일치하도록 해당 값을 변경합니다.
  5. extra_vars 섹션에서 Ansible 작업 템플릿에 전달하는 데 필요한 매개변수를 추가합니다.
  6. 모드를 한 또는 비활성화 로 설정합니다. once 모드에서는 작업을 한 번 실행한 다음 모드가 disabled 로 설정됩니다.

    • once mode: 정책을 위반하면 자동화가 한 번 실행됩니다. 자동화가 실행된 후 비활성화 됨으로 설정됩니다. 자동화가 disabled 로 설정된 후 자동화를 수동으로 계속 실행해야 합니다. 한 번 모드를 실행하면 정책을 위반하는 클러스터 목록과 target_cluster 의 추가 변수가 자동으로 제공됩니다. Ansible Tower 작업 템플릿에는 EXTRA VARIABLES (추가 변수 ) 섹션에 대해 PROMPT ON ECDHE(시작 시 확인)가 활성화되어 있어야 합니다.
    • 자동 비활성화: 예약된 자동화가 비활성화 됨으로 설정되면 설정이 업데이트될 때까지 자동화가 실행되지 않습니다.
  7. policyRef 를 정책 이름으로 설정합니다.
  8. Ansible Tower 자격 증명이 포함된 이 PolicyAutomation 리소스와 동일한 네임스페이스에 시크릿을 생성합니다. 이전 예에서 시크릿 이름은 ansible-tower 입니다. 애플리케이션 라이프사이클의 샘플을 사용하여 시크릿을 생성하는 방법을 확인합니다.
  9. PolicyAutomation 리소스를 생성합니다.

    참고:

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

      metadata:
        annotations:
          policy.open-cluster-management.io/rerun: "true"
    • 정책이 once 모드이면 정책을 준수하지 않는 경우 자동화가 실행됩니다. target_clusters 라는 extra_vars 변수가 추가되고 값은 정책이 호환되지 않는 각 관리형 클러스터 이름의 배열입니다.

2.6.3. GitOps를 사용하여 정책 배포

거버넌스 프레임워크를 사용하여 여러 관리 클러스터에 일련의 정책을 배포할 수 있습니다. 리포지토리의 정책에 기여하고 사용하여 오픈 소스 커뮤니티에 정책 수집 할 수 있습니다. 자세한 내용은 사용자 지정 정책 Contributing을 참조하십시오. 오픈 소스 커뮤니티의 안정커뮤니티 폴더에 있는 각 정책은 NIST의 특수한 800-53 에 따라 추가로 구성됩니다.

GitOps를 사용하는 모범 사례를 계속 읽고 Git 리포지토리를 통해 정책 업데이트 및 생성을 자동화하고 추적합니다.

사전 요구 사항: 시작하기 전에 정책 수집 리포지토리를 분기해야 합니다.

2.6.3.1. 로컬 리포지토리 사용자 정의

안정적인커뮤니티 정책을 단일 폴더에 통합하여 로컬 리포지토리를 사용자 정의합니다. 사용하지 않으려는 정책을 제거합니다. 로컬 리포지토리를 사용자 지정하려면 다음 단계를 완료합니다.

  1. 리포지토리에 배포하려는 정책을 유지하기 위해 새 디렉터리를 생성합니다. GitOps의 기본 기본 분기의 로컬 정책 수집 리포지토리에 있는지 확인합니다. 다음 명령을 실행합니다.

    mkdir my-policies
  2. 모든 안정커뮤니티 정책을 my-policies 디렉터리에 복사합니다. 먼저 커뮤니티 정책부터 stable 폴더에 커뮤니티에서 사용할 수 있는 항목이 중복되는 경우부터 시작합니다. 다음 명령을 실행합니다.

    cp -R community/* my-policies/
    
    cp -R stable/* my-policies/

    이제 단일 상위 디렉터리 구조에 모든 정책이 있으므로 포크의 정책을 편집할 수 있습니다.

    팁:

    • 사용하지 않으려는 정책을 제거하는 것이 좋습니다.
    • 다음 목록에서 정책 및 정책 정의에 대해 알아보십시오.

      • 목적: 정책이 수행하는 작업을 파악합니다.
      • 수정 작업: 정책은 규정 준수를 사용자에게만 알리거나 정책을 적용하고 변경합니까? spec.remediationAction 매개변수를 참조하십시오. 변경 사항이 적용되는 경우 기능적 기대치를 이해해야 합니다. 어떤 정책이 시행을 지원하는지 확인하십시오. 자세한 내용은 Validate 섹션을 참조하십시오.

        참고: 정책에 대해 설정된 spec.remediationAction 은 개별 spec.policy-templates 에 설정된 모든 수정 작업을 덮어씁니다.

      • 배치: 정책이 배포되는 클러스터는 무엇입니까? 기본적으로 대부분의 정책은 environment: dev 레이블을 사용하여 클러스터를 대상으로 합니다. 일부 정책은 OpenShift Container Platform 클러스터 또는 다른 레이블을 대상으로 할 수 있습니다. 다른 클러스터를 포함하도록 라벨을 업데이트하거나 추가할 수 있습니다. 특정 값이 없는 경우 정책이 모든 클러스터에 적용됩니다. 하나의 클러스터 세트에 대해 한 가지 방식으로 구성된 정책을 사용하고 다른 클러스터 세트에 대해 다른 방식으로 구성하려는 경우 정책 복사본을 여러 개 생성하고 각 사본을 사용자 지정할 수도 있습니다.

2.6.3.2. 로컬 리포지토리에 커밋

디렉터리에 대한 변경 사항을 충족한 후 클러스터에서 액세스할 수 있도록 변경 사항을 커밋 및 내보냅니다.

참고: 이 예제는 GitOps에서 정책을 사용하는 방법에 대한 기본을 표시하는 데 사용되므로 분기를 변경할 수 있는 다른 워크플로우가 있을 수 있습니다.

다음 단계를 완료합니다.

  1. 터미널에서 git status 를 실행하여 이전에 생성한 디렉터리의 최근 변경 사항을 확인합니다. 다음 명령을 사용하여 커밋할 변경 사항 목록에 새 디렉터리를 추가합니다.

    git add my-policies/
  2. 변경 사항을 커밋하고 메시지를 사용자 지정합니다. 다음 명령을 실행합니다.

    git commit -m “Policies to deploy to the hub cluster”
  3. GitOps에 사용되는 분기된 리포지토리 분기로 변경 사항을 내보냅니다. 다음 명령을 실행합니다.

    git push origin <your_default_branch>master

변경 사항이 커밋됩니다.

2.6.3.3. 클러스터에 정책 배포

변경 사항을 푸시한 후 Kubernetes용 Red Hat Advanced Cluster Management에 정책을 배포할 수 있습니다. 배포 후 hub 클러스터가 Git 리포지토리에 연결되어 있습니다. Git 리포지토리의 선택한 분기에 대한 추가 변경 사항은 클러스터에 반영됩니다.

참고: 기본적으로 GitOps와 함께 배포된 정책은 병합 조정 옵션을 사용합니다. 대신 교체 조정 옵션을 사용하려면 apps.open-cluster-management.io/reconcile-option: 주석을 Subscription 리소스에 추가합니다. 자세한 내용은 애플리케이션 라이프사이클 을 참조하십시오.

deploy.sh 스크립트는 허브 클러스터에 채널서브스크립션 리소스를 생성합니다. 채널은 Git 리포지토리에 연결되고 서브스크립션은 채널을 통해 클러스터에 가져올 데이터를 지정합니다. 결과적으로 지정된 하위 디렉터리에 정의된 모든 정책이 허브에 생성됩니다. 서브스크립션을 통해 정책을 생성한 후 Red Hat Advanced Cluster Management는 정책을 분석하고 정의된 배치 규칙에 따라 정책이 적용되는 각 관리 대상 클러스터와 연결된 네임스페이스에 추가 정책 리소스를 생성합니다.

그런 다음 이 정책은 hub 클러스터의 해당 관리 클러스터 네임스페이스에서 관리 클러스터에 복사됩니다. 결과적으로 Git 리포지토리의 정책은 정책의 배치 규칙에 정의된 clusterSelector 와 일치하는 라벨이 있는 모든 관리 클러스터로 푸시됩니다.

다음 단계를 완료합니다.

  1. policy-collection 디렉토리에서 다음 명령을 실행하여 디렉터리를 변경합니다.

    cd deploy
  2. 다음 명령을 사용하여 올바른 클러스터에 리소스를 생성하도록 CLI(명령줄 인터페이스)가 구성되어 있는지 확인합니다.

    oc cluster-info

    명령 출력은 Red Hat Advanced Cluster Management가 설치된 클러스터의 API 서버 세부 정보를 표시합니다. 올바른 URL이 표시되지 않으면 올바른 클러스터를 가리키도록 CLI를 구성합니다. 자세한 내용은 OpenShift CLI 사용을 참조하십시오.

  3. 정책을 생성하여 액세스를 제어하고 정책을 구성합니다. 다음 명령을 실행합니다.

    oc create namespace policy-namespace
  4. 다음 명령을 실행하여 클러스터에 정책을 배포합니다.

    ./deploy.sh -u https://github.com/<your-repository>/policy-collection -p my-policies -n policy-namespace

    your-repository 를 Git 사용자 이름 또는 리포지토리 이름으로 바꿉니다.

    참고: 참조를 위해 deploy.sh 스크립트의 전체 인수 목록은 다음 구문을 사용합니다.

    ./deploy.sh [-u <url>] [-b <branch>] [-p <path/to/dir>] [-n <namespace>] [-a|--name <resource-name>]

    각 인수에 대한 다음 설명을 확인합니다.

    • URL: 기본 정책 수집 리포지토리에서 분기한 리포지토리의 URL입니다. 기본 URL은 https://github.com/stolostron/policy-collection.git 입니다.
    • 분기: 을 가리키는 Git 리포지토리의 분기입니다. 기본 분기는 main 입니다.
    • 하위 디렉터리 경로: 사용하려는 정책을 포함하도록 생성한 하위 디렉터리 경로입니다. 이전 샘플에서는 my-policies 하위 디렉터리를 사용했지만 시작할 폴더를 지정할 수도 있습니다. 예를 들어 my-policies/AC-Access-Control 을 사용할 수 있습니다. 기본 폴더는 stable 입니다.
    • namespace: 허브 클러스터에서 리소스 및 정책이 생성되는 네임스페이스입니다. 이 명령은 policy-namespace 네임스페이스를 사용합니다. 기본 네임스페이스는 policy 입니다.
    • 이름 접두사: 채널서브스크립션 리소스의 접두사입니다. 기본값은 demo-stable-policies 입니다.

deploy.sh 스크립트를 실행하면 리포지토리에 액세스할 수 있는 모든 사용자가 분기에 대한 변경 사항을 커밋할 수 있으므로 클러스터의 기존 정책으로 변경 사항이 푸시됩니다.

참고: 서브스크립션을 사용하여 정책을 배포하려면 다음 단계를 완료하십시오.

  1. open-cluster-management:subscription-admin ClusterRole을 서브스크립션을 생성한 사용자에게 바인딩합니다.
  2. 서브스크립션에서 허용 목록을 사용하는 경우 다음 API 항목을 포함합니다.

        - apiVersion: policy.open-cluster-management.io/v1
          kinds:
            - "*"
        - apiVersion: policy.open-cluster-management.io/v1beta1
          kinds:
            - "*"
        - apiVersion: apps.open-cluster-management.io/v1
          kinds:
            - PlacementRule
        - apiVersion: cluster.open-cluster-management.io/v1beta1
          kinds:
            - Placement

2.6.3.4. 콘솔에서 GitOps 정책 배포 확인

콘솔에서 변경 사항이 정책에 적용되었는지 확인합니다. 콘솔에서 정책을 추가로 변경할 수도 있지만 서브스크립션 이 Git 리포지토리로 조정되면 변경 사항이 되돌아갑니다. 다음 단계를 완료합니다.

  1. Red Hat Advanced Cluster Management 클러스터에 로그인합니다.
  2. 탐색 메뉴에서 Governance 를 선택합니다.
  3. 표에 배포한 정책을 찾습니다. GitOps를 사용하여 배포되는 정책에는 소스 열에 Git 레이블이 있습니다. 레이블을 클릭하여 Git 리포지토리의 세부 정보를 확인합니다.
2.6.3.4.1. CLI에서 GitOps 정책 배포 확인

다음 단계를 완료합니다.

  1. 다음 정책 세부 정보를 확인합니다.

    • 배포된 클러스터에 대한 특정 정책을 준수하거나 비준수하는 이유는 무엇입니까?
    • 올바른 클러스터에 정책이 적용됩니까?
    • 이 정책이 클러스터에 배포되지 않은 경우 이유는 무엇입니까?
  2. 생성하거나 수정한 GitOps 배포 정책을 식별합니다. GitOps 배포된 정책은 자동으로 적용되는 주석으로 식별할 수 있습니다. GitOps 배포 정책에 대한 주석은 다음 경로와 유사합니다.

    apps.open-cluster-management.io/hosting-deployable: policies/deploy-stable-policies-Policy-policy-role9
    
    apps.open-cluster-management.io/hosting-subscription: policies/demo-policies
    
    apps.open-cluster-management.io/sync-source: subgbk8s-policies/demo-policies

    GitOps 주석은 정책을 생성한 서브스크립션을 확인하는 데 유용합니다. 레이블을 기반으로 정책을 선택하는 런타임 쿼리를 작성할 수 있도록 정책에 고유한 레이블을 추가할 수도 있습니다.

    예를 들어 다음 명령을 사용하여 정책에 라벨을 추가할 수 있습니다.

    oc label policy <policy-name> -n <policy-namespace> <key>=<value>

    그런 다음 다음 명령을 사용하여 라벨이 있는 정책을 쿼리할 수 있습니다.

    oc get policy -n <policy-namespace> -l <key>=<value>

정책은 GitOps를 사용하여 배포됩니다.

2.6.4. 구성 정책의 템플릿 지원

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

2.6.4.1. 사전 요구 사항

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

2.6.4.2. 템플릿 함수

리소스별 및 일반 조회 템플릿 기능과 같은 템플릿 기능은 hub 클러스터에서 Kubernetes 리소스를 참조할 수 있습니다( {{hub …​ hub}} 구분 기호 사용), 또는 관리 클러스터({ { …​ }} 구분 사용). 자세한 내용은 구성 정책의 허브 클러스터 템플릿 지원을 참조하십시오. 리소스별 기능은 편의를 위해 사용되며 리소스의 콘텐츠에 보다 쉽게 액세스할 수 있습니다. 일반 함수인 lookup 을 사용하는 경우 조회되는 리소스의 YAML 구조에 대해 잘 알고 있는 것이 가장 좋습니다. 이러한 함수 외에도 base64encode,base64decode,들여 쓰기,자동 들여 쓰기,ToInt,to Bool 등의 유틸리티 함수도 사용할 수 있습니다.

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

지원되는 사용자 지정 템플릿 함수 중 일부에 대한 설명 및 예를 보려면 계속 읽습니다.

2.6.4.2.1. fromSecret 함수

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

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

이 기능을 사용하는 경우 Kubernetes Secret 리소스의 namespace, name, data 키를 입력합니다. 허브 클러스터 템플릿에서 함수를 사용할 때 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 구성 정책의 허브 클러스터 템플릿 지원을 참조하십시오.

참고: hub 클러스터 템플릿과 함께 이 함수를 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.

Kubernetes Secret 리소스가 대상 클러스터에 없는 경우 정책 위반이 표시됩니다. 대상 클러스터에 데이터 키가 없으면 값이 빈 문자열이 됩니다. 대상 클러스터에 Secret 리소스를 적용하는 다음 구성 정책을 확인합니다. PASSWORD 데이터 키의 값은 대상 클러스터의 보안을 참조하는 템플릿입니다.

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:
        USER_NAME: YWRtaW4=
        PASSWORD: '{{ fromSecret "default" "localsecret" "PASSWORD" }}'
      kind: Secret
      metadata:
        name: demosecret
        namespace: test
      type: Opaque
  remediationAction: enforce
  severity: low
2.6.4.2.2. fromConfigmap 함수

fromConfigmap 함수는 ConfigMap에 지정된 데이터 키의 값을 반환합니다. 함수의 다음 구문을 확인합니다.

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

이 기능을 사용하는 경우 Kubernetes ConfigMap 리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. 허브 클러스터 템플릿의 함수를 사용하여 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 구성 정책의 허브 클러스터 템플릿 지원을 참조하십시오. Kubernetes ConfigMap 리소스가 대상 클러스터에 없는 경우 정책 위반이 표시됩니다. 대상 클러스터에 데이터 키가 없으면 값이 빈 문자열이 됩니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 다음 구성 정책을 확인합니다. log-file 데이터 키의 값은 ConfigMap에서 log-file 의 값을 검색하고, default 네임스페이스에서 logs-config, log-level 이 데이터 키 로그 수준으로 설정된 템플릿입니다.

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
      apiVersion: v1
      metadata:
        name: demo-app-config
        namespace: test
      data:
        app-name: sampleApp
        app-description: "this is a sample app"
        log-file: '{{ fromConfigMap "default" "logs-config" "log-file" }}'
        log-level: '{{ fromConfigMap "default" "logs-config" "log-level" }}'
  remediationAction: enforce
  severity: low
2.6.4.2.3. fromClusterClaim 함수

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

func fromClusterClaim (clusterclaimName string) (value map[string]interface{}, err Error)

이 기능을 사용하는 경우 Kubernetes ClusterClaim 리소스의 이름을 입력합니다. ClusterClaim 리소스가 없는 경우 정책 위반이 표시됩니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예제를 봅니다. 플랫폼 데이터 키의 값은 platform.open-cluster-management.io 클러스터 클레임의 가치를 검색하는 템플릿입니다. 마찬가지로 ClusterClaim 에서 제품버전 값을 검색합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-clusterclaims
  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:
        # Configuration values can be set as key-value properties
        platform: '{{ fromClusterClaim "platform.open-cluster-management.io" }}'
        product: '{{ fromClusterClaim "product.open-cluster-management.io" }}'
        version: '{{ fromClusterClaim "version.openshift.io" }}'
  remediationAction: enforce
  severity: low
2.6.4.2.4. lookup 함수

lookup 함수는 Kubernetes 리소스를 JSON 호환 맵으로 반환합니다. 요청된 리소스가 없으면 빈 맵이 반환됩니다. 리소스가 없고 다른 템플릿 함수에 값이 제공되면 다음과 같은 error: invalid value; 예상 문자열 이 표시될 수 있습니다.

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

함수의 다음 구문을 확인합니다.

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

이 기능을 사용하는 경우 API 버전, 종류, 네임스페이스, Kubernetes 리소스의 이름을 입력합니다. 허브 클러스터 템플릿 내에서 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 구성 정책의 허브 클러스터 템플릿 지원을 참조하십시오. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예제를 봅니다. metrics-url 데이터 키의 값은 default 네임스페이스에서 v1/Service Kubernetes 리소스 지표 를 검색하고 쿼리된 리소스에서 Spec.ClusterIP 의 값으로 설정된 템플릿입니다.

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:
        # Configuration values can be set as key-value properties
        app-name: sampleApp
        app-description: "this is a sample app"
        metrics-url: |
          http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080
  remediationAction: enforce
  severity: low
2.6.4.2.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 }}'
2.6.4.2.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 }}"
2.6.4.2.7. 들여쓰기 함수

indent 함수는 padded 데이터 문자열 을 반환합니다. 함수의 다음 구문을 확인합니다.

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

이 함수를 사용하면 특정 수의 공백을 사용하여 데이터 문자열을 입력합니다. indent 함수를 사용하는 구성 정책의 다음 예제를 확인합니다.

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  }}
2.6.4.2.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 }}
2.6.4.2.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 }}
2.6.4.2.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 }}
2.6.4.2.11. 기능 보호

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+wpL7ZxFMLvL204구문과 유사합니다.

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

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

즉시 순환하려면 hub 클러스터의 관리형 클러스터 네임스페이스의 policy-encryption-key Secret에서 policy.open-cluster-management.io/last-rotated 주석을 삭제합니다. 그런 다음 새 암호화 키를 사용하도록 정책이 다시 처리됩니다.

2.6.4.3. 구성 정책에서 허브 클러스터 템플릿 지원

Red Hat Advanced Cluster Management는 대상 클러스터에 동적으로 사용자 정의된 관리형 클러스터 템플릿 외에도 허브 클러스터 템플릿을 지원하여 hub 클러스터 값을 사용하여 구성 정책을 정의합니다. 이 조합을 사용하면 정책 정의의 각 대상 클러스터 또는 하드 코드 구성 값에 대해 별도의 정책을 생성해야 할 필요성이 줄어듭니다.

Hub 클러스터 템플릿은 Golang 텍스트 템플릿 사양을 기반으로 하며 {{hub … hub}} 구분자는 구성 정책의 허브 클러스터 템플릿을 나타냅니다.

보안을 위해 허브 클러스터 템플릿의 리소스별 및 일반 조회 기능 모두 허브 클러스터 정책의 네임스페이스로 제한됩니다. 자세한 내용은 허브 및 관리형 클러스터 템플릿 비교 를 참조하십시오.

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

2.6.4.3.1. 템플릿 처리

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

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

정책은 생성 시 또는 업데이트 후에만 허브 클러스터에서 처리됩니다. 따라서 허브 클러스터 템플릿은 정책 생성 또는 업데이트 시 참조된 리소스의 데이터로만 확인됩니다. 참조된 리소스에 대한 변경 사항은 정책과 자동으로 동기화되지 않습니다.

특정 주석인 policy.open-cluster-management.io/trigger-update 를 사용하여 템플릿에서 참조하는 데이터의 변경 사항을 표시할 수 있습니다. 특수 주석 값을 변경하면 템플릿 처리가 시작되고, 참조된 리소스의 최신 콘텐츠가 관리 클러스터의 처리를 위한 전파자인 정책 정의에서 읽고 업데이트됩니다. 이 주석을 사용하는 일반적인 방법은 값을 한 번에 하나씩 늘리는 것입니다.

2.6.4.3.3. 템플릿 처리 바이패스

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

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

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

허브 클러스터 및 관리형 클러스터 템플릿을 비교하려면 다음 표를 참조하십시오.

2.6.4.3.4. hub 클러스터 및 관리형 클러스터 템플릿 비교
표 2.6. 비교표
템플릿hub cluster관리형 클러스터

구문

Golang 텍스트 템플릿 사양

Golang 텍스트 템플릿 사양

구분 기호

{{Hub … hub}}

{{ … }}

context

런타임 시 정책이 전파되는 대상 클러스터의 이름으로 확인되는 .ManagedClusterName 변수를 사용할 수 있습니다.

컨텍스트 변수가 없음

액세스 제어

Policy 리소스와 동일한 네임스페이스에 있는 네임스페이스가 지정된 Kubernetes 오브젝트만 참조할 수 있습니다.

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

함수

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

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

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

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

함수 출력 스토리지

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

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

processing

처리는 복제된 정책을 클러스터에 전파하는 동안 hub 클러스터의 런타임 시 수행됩니다. 정책 내의 정책 및 허브 클러스터 템플릿은 템플릿을 만들거나 업데이트할 때만 hub 클러스터에서 처리됩니다.

처리는 관리되는 클러스터의 ConfigurationPolicyController 에서 수행됩니다. 정책은 정기적으로 처리되며, 이 정책은 참조된 리소스의 데이터로 확인된 오브젝트 정의를 자동으로 업데이트합니다.

처리 오류

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

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

2.6.5. 거버넌스 메트릭

정책 프레임워크는 정책 배포 및 규정 준수를 보여주는 지표를 노출합니다. hub 클러스터에서 policy_governance_info 지표를 사용하여 추세를 보고 정책 실패를 분석합니다.

2.6.5.1. 지표 개요

policy_governance_info 는 OpenShift Container Platform 모니터링에 의해 수집되며 일부 집계 데이터는 활성화된 경우 Red Hat Advanced Cluster Management Observability에 의해 수집됩니다.

참고: 관찰 기능이 활성화된 경우 Grafana Explore 페이지에서 메트릭 쿼리를 입력할 수 있습니다.

정책을 생성할 때 루트 정책을 생성합니다. 프레임워크는 관리 클러스터에 정책을 배포하기 위해 전파된 정책을 생성할 위치를 결정하기 위해 PlacementRulesPlacementBindings 뿐만 아니라 루트 정책을 감시합니다. 루트 정책과 전파 정책 모두에 대해 정책이 준수되는 경우 0 의 지표가 기록되고 1 이 호환되지 않는 경우 1이 기록됩니다.

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

  • type: 레이블 값은 root 이거나 전파됩니다.
  • Policy: 연결된 root 정책의 이름입니다.
  • policy_namespace: 루트 정책이 정의된 hub 클러스터의 네임스페이스입니다.
  • cluster_namespace: 정책이 배포된 클러스터의 네임스페이스입니다.

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

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

2.6.6. 보안 정책 관리

지정된 보안 표준, 카테고리 및 제어를 기반으로 클러스터 컴플라이언스를 보고하고 검증할 수 있는 보안 정책을 생성합니다. Red Hat Advanced Cluster Management for Kubernetes에 대한 정책을 생성하려면 관리 클러스터에 YAML 파일을 생성해야 합니다.

참고: 의 기존 정책을 복사하여 Policy YAML 에 붙여넣을 수 있습니다. 기존 정책을 붙여넣을 때 매개변수 필드의 값이 자동으로 입력됩니다. 검색 기능을 사용하여 정책 YAML 파일에서 콘텐츠를 검색할 수도 있습니다.

다음 섹션을 확인합니다.

2.6.6.1. 보안 정책 생성

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

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

중요: 특정 클러스터에 정책을 적용하려면 배치 규칙 및 배치 바인딩을 정의해야 합니다. Cluster selector 필드에 유효한 값을 입력하여 PlacementRulePlacementBinding 을 정의합니다. 유효한 표현식은 Kubernetes 문서의 세트 기반 요구 사항을 지원하는 리소스를 참조하십시오. Red Hat Advanced Cluster Management 정책에 필요한 오브젝트 정의를 확인합니다.

  • PlacementRule: 정책을 배포해야 하는 클러스터 선택기를 정의합니다.
  • PlacementBinding: 배치를 배치 규칙에 바인딩합니다.

정책 개요에서 정책 YAML 파일에 대한 자세한 설명을 확인하십시오.

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

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

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

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

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy1
    spec:
      remediationAction: "enforce" # or inform
      disabled: false # or true
      namespaces:
        include: ["default"]
        exclude: ["kube*"]
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              namespace: kube-system # will be inferred
              name: operator
            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. PlacementRule 을 정의합니다. PlacementRule 을 변경하여 clusterNames, 또는 clusterLabels 에서 정책을 적용해야 하는 클러스터를 지정해야 합니다. 배치 규칙 샘플 개요보기

    PlacementRule 은 다음 내용과 유사할 수 있습니다.

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement1
    spec:
      clusterConditions:
        - type: ManagedClusterConditionAvailable
          status: "True"
      clusterNames:
      - "cluster1"
      - "cluster2"
      clusterLabels:
        matchLabels:
          cloud: IBM
  4. 정책 및 PlacementRule 을 바인딩하도록 PlacementBinding 을 정의합니다. PlacementBinding 은 다음 YAML 샘플과 유사할 수 있습니다.

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

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

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

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

    kubectl describe securitypolicy <name> -n <namespace>
2.6.6.1.2. 콘솔에서 클러스터 보안 정책 생성

Red Hat Advanced Cluster Management에 로그인한 후 관리 페이지로 이동 하여 정책 생성을 클릭합니다.

콘솔에서 새 정책을 생성하면 YAML 파일도 YAML 편집기에서 생성됩니다. YAML 편집기를 보려면 Create 정책 양식의 시작 부분에 있는 토글을 선택하여 활성화합니다.

Create policy form을 완료한 후 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'
 spec:
   complianceType: musthave
   namespaces:
     exclude: ["kube*"]
     include: ["default"]
   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

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

 ---
 apiVersion: apps.open-cluster-management.io/v1
 kind: PlacementRule
 metadata:
   name: placement-pod
 spec:
   clusterConditions:
     - type: ManagedClusterConditionAvailable
       status: "True"
   clusterLabels:
     matchLabels:
       cloud: "IBM"

정책 생성을 클릭합니다. 콘솔에서 보안 정책을 생성합니다.

2.6.6.1.2.1. 콘솔에서 보안 정책 보기

콘솔에서 모든 보안 정책 및 해당 상태를 확인합니다. Governance 페이지로 이동하여 정책의 테이블 목록을 확인합니다. 참고: 정책 탭 또는 클러스터 위반 탭을 선택하여 정책의 표 목록을 필터링할 수 있습니다.

자세한 내용을 보려면 정책 중 하나를 선택합니다. 세부 정보 , 클러스터템플릿 탭이 표시됩니다. 클러스터 또는 정책 상태를 확인할 수 없는 경우 다음 메시지가 표시됩니다. 상태 없음.

2.6.6.1.3. CLI에서 정책 세트 생성

기본적으로 정책 세트는 정책 또는 배치 없이 생성됩니다. 정책 세트에 대한 배치를 생성하고 클러스터에 존재하는 정책이 하나 이상 있어야 합니다. 정책 세트를 생성하면 다양한 정책을 추가할 수 있습니다. 다음 명령을 실행하여 CLI에서 설정된 정책을 생성합니다.

kubectl apply -f <policyset-filename>
2.6.6.1.4. 콘솔에서 정책 세트 생성

탐색 메뉴에서 Governance 를 선택합니다. 그런 다음 정책 설정 탭을 선택합니다. Create policy set 버튼을 선택하고 양식을 작성합니다. 정책 세트 세부 정보를 추가한 후 Submit 버튼을 선택합니다.

배포를 위해 정책 생성기가 필요한 안정된 정책 세트를 확인합니다. PolicySets-- Stable.

2.6.6.2. 보안 정책 업데이트

다음 섹션을 확인하여 보안 정책을 업데이트하는 방법을 알아봅니다.

2.6.6.2.1. CLI에서 설정된 정책에 정책 추가

다음 명령을 실행하여 정책 세트를 편집합니다. kubectl edit policysets your-policyset-name

정책 세트의 policies 섹션에 정책 이름을 추가합니다. kubectl apply -f your-added-policy.yaml 명령을 사용하여 다음 명령을 사용하여 정책 세트의 배치 섹션에 추가된 정책을 적용합니다. PlacementBindingPlacementRule 이 생성됩니다. 참고: 배치 바인딩을 삭제하면 정책 세트에 따라 정책이 계속 배치됩니다.

2.6.6.2.2. 콘솔에서 설정된 정책에 정책 추가

Policy sets 탭을 선택하여 설정된 정책에 정책을 추가합니다. 작업 아이콘을 선택하고 편집 을 선택합니다. Edit policy set form이 나타납니다.

양식의 Policies 섹션으로 이동하여 정책 세트에 추가할 정책을 선택합니다.

2.6.6.2.3. 보안 정책 비활성화

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

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

Actions 아이콘 > Disable policy 를 선택합니다. 정책 비활성화 대화 상자가 나타납니다.

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

2.6.6.3. 보안 정책 삭제

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

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

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

      kubectl delete policy <securitypolicy-name> -n <open-cluster-management-namespace>

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

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

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

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

2.6.6.3.1. 콘솔에서 정책 세트 삭제

Policy sets 탭에서 정책 세트의 Actions 아이콘을 선택합니다. 삭제 를 클릭하면 정책 집합을 영구적으로 삭제하시겠습니까? 대화 상자가 나타납니다.

삭제 버튼을 클릭합니다.

다른 정책을 관리하려면 자세한 내용은 보안 정책 관리를 참조하십시오. 정책에 대한 자세한 내용은 감독을 참조하십시오.

2.6.7. 구성 정책 관리

구성 정책 생성, 적용, 보기 및 업데이트 방법을 학습합니다. 다음 리소스는 구성 정책입니다.

  • 메모리 사용량 정책
  • 네임스페이스 정책
  • 이미지 취약점 정책
  • Pod 정책
  • Pod 보안 정책
  • 역할 정책
  • 역할 바인딩 정책
  • SCC(보안 콘텐츠 제약 조건) 정책
  • ETCD 암호화 정책
  • 컴플라이언스 Operator 정책

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

2.6.7.1. 구성 정책 생성

CLI(명령줄 인터페이스) 또는 콘솔에서 구성 정책에 대한 YAML 파일을 생성할 수 있습니다. 다음 섹션을 보고 구성 정책을 생성합니다.

2.6.7.1.1. CLI에서 구성 정책 생성

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

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

    kubectl create -f configpolicy-1.yaml

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

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

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

    kubectl get policy --namespace=<namespace>

구성 정책이 생성됩니다.

2.6.7.1.2. CLI에서 구성 정책 보기

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

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

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

    kubectl describe policy <name> -n <namespace>
2.6.7.1.3. 콘솔에서 구성 정책 생성

콘솔에서 구성 정책을 생성하면 YAML 파일도 YAML 편집기에서 생성됩니다.

콘솔에서 클러스터에 로그인하고 탐색 메뉴에서 Governance 를 선택합니다.

정책 생성을 클릭합니다. 사양 매개변수에 대한 구성 정책 중 하나를 선택하여 생성할 정책을 지정합니다.

정책 양식을 작성하여 구성 정책 생성을 계속합니다. 다음 필드에 적절한 값을 입력하거나 선택합니다.

  • 이름
  • 사양
  • 클러스터 선택기
  • 수정 작업
  • 표준
  • 카테고리
  • 제어

생성을 클릭합니다. 구성 정책이 생성됩니다.

2.6.7.1.4. 콘솔에서 구성 정책 보기

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

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

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

2.6.7.2. 구성 정책 업데이트

다음 섹션을 확인하여 구성 정책을 업데이트하는 방법을 알아봅니다.

2.6.7.2.1. 구성 정책 비활성화

구성 정책을 비활성화합니다. 앞서 언급한 지침과 유사하게 로그인하여 Governance 페이지로 이동합니다.

테이블 목록에서 구성 정책의 Actions 아이콘을 선택한 다음 Disable 를 클릭합니다. 정책 비활성화 대화 상자가 나타납니다.

Disable policy 를 클릭합니다.

구성 정책이 비활성화되어 있습니다.

2.6.7.3. 구성 정책 삭제

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

  • CLI에서 구성 정책을 삭제합니다.

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

      kubectl delete policy <policy-name> -n <namespace>

      정책이 삭제되면 대상 클러스터 또는 클러스터에서 제거됩니다.

    2. 다음 명령을 실행하여 정책이 제거되었는지 확인합니다.
    kubectl get policy <policy-name> -n <namespace>
  • 콘솔에서 구성 정책을 삭제합니다.

    탐색 메뉴에서 Governance 를 클릭하여 정책의 테이블 목록을 확인합니다.

    정책 위반 테이블에서 삭제할 정책의 Actions 아이콘을 클릭합니다. 그런 다음 제거를 클릭합니다. 정책 제거 대화 상자에서 정책 제거를 클릭합니다.

정책이 삭제됩니다.

CM-Configuration-Management 폴더의 Red Hat Advanced Cluster Management에서 지원하는 구성 정책 샘플을 참조하십시오.

또는 Kubernetes 구성 정책 컨트롤러를 참조하여 컨트롤러 에서 모니터링하는 다른 구성 정책을 볼 수 있습니다. 다른 정책을 관리하는 방법에 대한 자세한 내용은 보안 정책 관리를 참조하십시오.

2.6.8. 게이트 키퍼 운영자 정책 관리

게이트키퍼 운영자 정책을 사용하여 관리 클러스터에 게이트키퍼 운영자 및 게이트키퍼를 설치합니다. 다음 섹션에서 게이트 키퍼 운영자 정책을 생성, 보기 및 업데이트하는 방법을 알아봅니다.

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

2.6.8.1. 게이트 키퍼 운영자 정책을 사용하여 게이트 키퍼 설치

거버넌스 프레임워크를 사용하여 게이트 키퍼 운영자를 설치합니다. 게이트키퍼 Operator는 OpenShift Container Platform 카탈로그에서 사용할 수 있습니다. 자세한 내용은 OpenShift Container Platform 설명서에서 클러스터에 Operator 추가 를 참조하십시오.

구성 정책 컨트롤러를 사용하여 게이트키퍼 운영자 정책을 설치합니다. 설치 중에 운영자 그룹과 구독은 게이트키퍼 운영자를 가져와 관리 클러스터에 설치합니다. 그런 다음 게이트 키퍼 운영자는 게이트 키퍼( gatekeeper)를 구성하기 위해 게이트키퍼 CR을 생성합니다. Gatekeeper operator CR 샘플을 확인합니다.

게이트키퍼 운영자 정책은 적용 작업을 지원하는 Red Hat Advanced Cluster Management 구성 정책 컨트롤러에서 모니터링합니다. 게이트키퍼 운영자 정책은 강제 적용이 설정된 경우 컨트롤러에서 자동으로 생성합니다.

2.6.8.2. 콘솔에서 게이트 키퍼 정책 생성

콘솔에서 게이트 키퍼 정책을 생성하여 게이트키퍼 정책을 설치합니다.

클러스터에 로그인한 후 Governance 페이지로 이동합니다.

정책 생성을 선택합니다. 양식을 작성할 때 사양 필드에서 GatekeeperOperator 를 선택합니다. 정책의 매개변수 값은 자동으로 채워지고 정책이 기본적으로 알림 으로 설정됩니다. 게이트키퍼를 설치하도록 적용하도록 수정 작업을 설정합니다. 샘플을 보려면 policy-gatekeeper-operator.yaml 을 참조하십시오.

+ 참고: Operator에서 기본값을 생성할 수 있습니다. 게이트키퍼 운영자 정책에 사용할 수 있는 선택적 매개변수에 대한 설명은 Gatekeeper Helm Chart 를 참조하십시오.

2.6.8.2.1. 게이트 키퍼 Operator CR
apiVersion: operator.gatekeeper.sh/v1alpha1
kind: Gatekeeper
metadata:
  name: gatekeeper
spec:
  audit:
    replicas: 1
    logLevel: DEBUG
    auditInterval: 10s
    constraintViolationLimit: 55
    auditFromCache: Enabled
    auditChunkSize: 66
    emitAuditEvents: Enabled
    resources:
      limits:
        cpu: 500m
        memory: 150Mi
      requests:
        cpu: 500m
        memory: 130Mi
  validatingWebhook: Enabled
  webhook:
    replicas: 2
    logLevel: ERROR
    emitAdmissionEvents: Enabled
    failurePolicy: Fail
    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"

2.6.8.3. 업그레이드 게이트키퍼 및 게이트키퍼 Operator

게이트 키퍼 및 게이트키퍼 운영자의 버전을 업그레이드할 수 있습니다. 다음 단계를 완료합니다.

  • 게이트 키퍼 운영자 정책을 사용하여 게이트 키퍼 운영자를 설치할 때 installPlanApproval 의 값을 확인합니다. installPlanApproval 이 자동으로 설정된 경우 Operator 업그레이드가 자동으로 수행됩니다. installPlanApprovalManual 로 설정된 경우 각 클러스터에 대해 게이트 키퍼 Operator의 업그레이드를 수동으로 승인해야 합니다.

2.6.8.4. 게이트 키퍼 운영자 정책 업데이트

다음 섹션을 확인하여 게이트 키퍼 운영자 정책을 업데이트하는 방법을 알아봅니다.

2.6.8.4.1. 콘솔에서 게이트 키 운영자 정책 보기

게이트키퍼 운영자 정책 및 콘솔에서 해당 상태를 확인합니다.

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

자세한 내용을 보려면 policy-gatekeeper-operator 정책을 선택합니다. Clusters 탭을 선택하여 정책 위반을 확인합니다.

2.6.8.4.2. 게이트키퍼 운영자 정책 비활성화

게이트키퍼 운영자 정책을 비활성화합니다.

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

policy-gatekeeper-operator 정책의 Actions 아이콘을 선택한 다음 Disable 를 클릭합니다. 정책 비활성화 대화 상자가 나타납니다.

Disable policy 를 클릭합니다. policy-gatekeeper-operator 정책이 비활성화되어 있습니다.

2.6.8.5. 게이트 키퍼 Operator 정책 삭제

CLI 또는 콘솔에서 게이트키퍼 운영자 정책을 삭제합니다.

  • CLI에서 게이트키퍼 운영자 정책을 삭제합니다.

    1. 다음 명령을 실행하여 게이트키퍼 운영자 정책을 삭제합니다.

      kubectl delete policy <policy-gatekeeper-operator-name> -n <namespace>

      정책이 삭제되면 대상 클러스터 또는 클러스터에서 제거됩니다.

    2. 다음 명령을 실행하여 정책이 제거되었는지 확인합니다.

      kubectl get policy <policy-gatekeeper-operator-name> -n <namespace>
  • 콘솔에서 게이트키퍼 운영자 정책 삭제:

    Governance 페이지로 이동하여 정책의 테이블 목록을 확인합니다.

    이전 콘솔 지침과 유사하게 policy-gatekeeper-operator 정책의 Actions 아이콘을 클릭합니다. 제거를 클릭하여 정책을 삭제합니다. 정책 제거 대화 상자에서 정책 제거를 클릭합니다.

게이트키퍼 운영자 정책이 삭제됩니다.

2.6.8.6. 게이트 키퍼 정책, 게이트키퍼 및 게이트키퍼 운영자 정책 설치 제거

게이트키퍼 정책, 게이트키퍼, 게이트키퍼 운영자 정책을 제거하려면 다음 단계를 완료합니다.

  1. 관리형 클러스터에 적용되는 게이트키퍼 제약 조건 및 Constraint Template 을 제거합니다.

    1. 게이트키퍼 운영자 정책을 편집합니다. 게이트키퍼 제약 조건 및 제약 조건을 생성하는 데 사용한 ConfigurationPolicy 템플릿을 찾습니다.
    2. ConfigurationPolicy 템플릿의 complianceType 값을 mustnothave 로 변경합니다.
    3. 정책을 저장하고 적용합니다.
  2. 관리 클러스터에서 게이트 키퍼 인스턴스를 제거합니다.

    1. 게이트키퍼 운영자 정책을 편집합니다. Gatekeeper CR(사용자 정의 리소스)을 생성하는 데 사용한 ConfigurationPolicy 템플릿을 찾습니다.
    2. ConfigurationPolicy 템플릿의 complianceType 값을 mustnothave 로 변경합니다.
  3. 관리되는 클러스터에 있는 gatekeeper Operator를 제거합니다.

    1. 게이트키퍼 운영자 정책을 편집합니다. Subscription CR을 생성하는 데 사용한 ConfigurationPolicy 템플릿을 찾습니다.
    2. ConfigurationPolicy 템플릿의 complianceType 값을 mustnothave 로 변경합니다.

게이트키퍼 정책, 게이트키퍼, 게이트키퍼 운영자 정책이 제거됩니다.

게이트키퍼에 대한 자세한 내용은 게이트 키퍼 제약 조건 및 제약 조건 템플릿을 통합합니다. 타사 정책을 제품과 통합하는 주제 목록은 타사 정책 컨트롤러 통합을 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.