6.4. 사용자 정의 정책 생성
기본 정책을 사용하는 것 외에도 Red Hat Advanced Cluster Security for Kubernetes에서 사용자 지정 정책을 생성할 수도 있습니다.
새 정책을 빌드하려면 기존 정책을 복제하거나 처음부터 새 정책을 생성할 수 있습니다.
- RHACS 포털의 위험 보기에서 필터 기준을 기반으로 정책을 생성할 수도 있습니다.
-
고급 정책을 생성하기 위해
AND
,또는
, 및NOT
논리 연산자를 사용하여 정책 기준을 설정할 수도 있습니다.
6.4.1. 시스템 정책 보기에서 보안 정책 생성
시스템 정책 보기에서 새 보안 정책을 생성할 수 있습니다.
절차
-
RHACS 포털에서 플랫폼 구성
정책 으로 이동합니다. - 정책 생성을 클릭합니다.
정책 세부 정보 섹션에서 정책에 대한 다음 세부 정보를 입력합니다.
- 정책의 이름을 입력합니다.
선택 사항: Attach notifiers 섹션에서 사용 가능한 Notifiers 를 선택하여 정책에 알림기를 연결합니다.
참고Kubernetes용 Red Hat Advanced Cluster Security를 알림 공급자(예: webhooks, Jira, PagerDuty, Splunk 등)와 통합해야 경고를 전달할 수 있습니다.
-
이 정책에 대해
Critical
,High
,Medium
또는Low
를 선택합니다. - 이 정책에 적용할 정책 범주를 선택합니다.
- Description (설명) 상자에서 정책에 대한 세부 정보를 입력합니다.
- 정책이 RScoringe 상자에 왜 존재하는지에 대한 설명을 입력합니다.
- Guidance 상자에서 이 정책 위반을 해결하는 단계를 입력합니다.
선택 사항: MITRE ATT&CK 섹션에서 정책에 지정할 전략 및 기술을 선택합니다.
- Add tactic 을 클릭한 다음 드롭다운 목록에서 전략을 선택합니다.
- 선택한 전략의 기술을 추가하려면 Add technique 을 클릭합니다. 하나의 전략에 대해 여러 기술을 지정할 수 있습니다.
- 다음을 클릭합니다.
정책 동작 섹션에서 정책에 대해 라이프사이클 단계 및 이벤트 소스(런타임 라이프사이클만 해당) 를 선택합니다.
빌드,배포 또는 런타임 에서 정책을 적용할 수 있는 라이프사이클 단계를 선택합니다. 하나 이상의 단계를 선택할 수 있습니다.
- 빌드 시간 정책은 CVE 및 Dockerfile 명령과 같은 이미지 필드에 적용됩니다.
- 배포 시간 정책에는 모든 빌드 시간 정책 기준이 포함될 수 있지만 권한 있는 모드에서 실행하거나 Docker 소켓 마운트와 같은 클러스터 구성의 데이터를 포함할 수도 있습니다.
- 런타임 정책에는 모든 빌드 시간 및 배포 시간 정책 기준이 포함될 수 있지만 런타임 중 프로세스 실행에 대한 데이터를 포함할 수도 있습니다.
응답 방법 의 경우 다음 중 하나를 선택합니다.
- 위반 사항 목록에 위반 사항을 포함하도록 알립니다.
또는 Inform 을 선택하고 작업을 강제 시행합니다.
정책에 대한 시행 동작을 선택합니다. 라이프사이클 단계를 구성할 때 선택한 단계에서만 사용할 수 있습니다. ON (활성화)을 선택하여 정책을 적용하고 위반을 보고하고, OFF (비활성화)를 선택하여 위반만 보고합니다. 적용 동작은 라이프사이클 단계마다 다릅니다.
- 빌드 - Kubernetes용 Red Hat Advanced Cluster Security는 이미지가 정책 조건과 일치하면 연속 통합(CI) 빌드에 실패합니다.
- 배포 - Kubernetes용 Red Hat Advanced Cluster Security는 정책 조건과 일치하는 배포 생성을 차단합니다. 승인 컨트롤러가 적용되는 클러스터에서 Kubernetes 또는 OpenShift Container Platform API 서버는 모든 비호환 배포를 차단합니다. 다른 클러스터에서 Red Hat Advanced Cluster Security for Kubernetes는 비호환 배포를 편집하여 Pod를 예약하지 않도록 합니다.
런타임 - Kubernetes용 Red Hat Advanced Cluster Security는 정책 조건과 일치하는 모든 Pod를 종료하거나 Pod에서 수행된 작업을 차단합니다.
주의정책 시행은 실행 중인 애플리케이션 또는 개발 프로세스에 영향을 미칠 수 있습니다. 시행 옵션을 활성화하기 전에 모든 이해 관계자에게 알리고 자동화된 시행 조치에 대응하는 방법을 계획합니다.
- 다음을 클릭합니다.
- Policy criteria 섹션에서 정책을 트리거할 속성을 구성합니다.
- 다음을 클릭합니다.
정책 범위 섹션에서 다음을 구성합니다.
- Restrict to Scope 를 사용하여 특정 클러스터, 네임스페이스 또는 라벨에만 이 정책을 활성화하려면 포함 범위 추가 를 클릭합니다. 여러 범위를 추가하고 네임스페이스 및 레이블에 대해 RE2 Syntax 에서 정규식을 사용할 수도 있습니다.
- 범위별 제외 범위를 사용하여 지정한 배포, 클러스터, 네임스페이스 및 레이블을 제외하려면 제외 범위 추가 를 클릭합니다. 즉, 정책을 선택한 엔터티에 적용되지 않습니다. 여러 범위를 추가하고 네임스페이스 및 레이블에 대해 RE2 Syntax 에서 정규식을 사용할 수도 있습니다. 그러나 배포를 선택하는 데 정규식을 사용할 수 없습니다.
제외된 이미지(Build Lifecycle만 해당) 의 경우 위반을 트리거하지 않으려는 모든 이미지를 선택합니다.
참고제외 이미지 설정은 빌드 라이프사이클 단계와 함께 연속 통합 시스템에서 이미지를 확인하는 경우에만 적용됩니다. 이 정책을 사용하여 Runtime 라이프사이클 단계의 배포 또는 런타임 활동에서 실행 중인 배포를 확인하는 경우에는 적용되지 않습니다.
- 다음을 클릭합니다.
- 검토 정책 섹션에서 정책 위반을 미리 봅니다.
- 저장을 클릭합니다.
추가 리소스
6.4.2. 위험 보기에서 보안 정책 생성
위험 보기에서 배포의 위험을 평가하는 동안 로컬 페이지 필터링을 적용할 때 사용 중인 필터링 기준에 따라 새로운 보안 정책을 생성할 수 있습니다.
절차
- RHACS 포털로 이동하여 탐색 메뉴에서 Risk 를 선택합니다.
- 정책을 생성할 로컬 페이지 필터링 기준을 적용합니다.
- 새 정책을 선택하고 필수 필드를 입력하여 새 정책을 생성합니다.
6.4.3. 정책 기준
정책 criteria 섹션에서 정책을 트리거할 데이터를 구성할 수 있습니다.
다음 표에 나열된 속성을 기반으로 정책을 구성할 수 있습니다.
이 표에서는 다음을 수행합니다.
정규식,AND, OR, NOT 열은 정규식 및 기타 논리 연산자를 특정 특성과 함께 사용할 수 있는지 여부를 나타냅니다.
-
!
정규식 열에서는 나열된 필드에 정규식만 사용할 수 있음을 나타냅니다. -
AND, OR 열에서는 언급된 논리 연산자만 속성에 사용할 수 있음을 나타냅니다.
-
- RHACS 버전 열은 특성을 사용해야 하는 Red Hat Advanced Cluster Security for Kubernetes 버전을 나타냅니다.
다음과 같은 논리 조합 연산자 AND 및 OR을 사용할 수 없습니다.You cannot use logical combination operators
AND
andOR
for attributes that have:-
부울 값
true
및false
최소 값의 의미 체계는 다음과 같습니다.
- 최소 RBAC 권한
- 이미지가 생성된 날짜
-
부울 값
다음과 같은 속성에
NOT
논리 연산자를 사용할 수 없습니다.-
부울 값
true
및false
-
이미 사용하는 숫자 값 (예: < , > , <
;=
, >=
operators) 복합 기준 여러 값을 가질 수 있습니다. 예를 들면 다음과 같습니다.
- 명령과 인수를 모두 포함하는 Dockerfile 라인
- 환경 변수: 이름과 값으로 구성됩니다.
- 기능 추가 를 포함한 다른 의미는,Drop Capabilities Drop Capabilities , image was last scanned 이후의 Days.
-
부울 값
논리 운영자 및
,또는
보안 정책을 생성하지 않고
Kubernetes 버전 3.0.45 이상용 Red Hat Advanced Cluster Security가 필요합니다. 그러나 이전 버전에서는 정규식 열에 나열된 필드에 정규식을 계속 사용할 수 있습니다.
속성 | 설명 | RHACS 버전 | 정규 표현식 | NOT | AND, OR | 단계 |
---|---|---|---|---|---|---|
네임스페이스 | 네임스페이스의 이름입니다. | 3.0.51 이상 | ✓ | ✓ | ✓ | 배포 |
이미지 레지스트리 | 이미지 레지스트리의 이름입니다. | All | ✓ | ✓ | ✓ | 배포 |
image remote |
레지스트리에 있는 이미지의 전체 이름입니다(예: | All | ✓ | ✓ | ✓ | 배포 |
이미지 태그 | 이미지의 식별자입니다. | All | ✓ | ✓ | ✓ | 배포 |
이미지가 생성된 날짜 | 이미지 생성 날짜의 일 수입니다. | All | ✕ | ✕ | ✕ | Build |
이미지를 마지막으로 스캔한 이후 일 | 마지막 이미지 스캔 이후의 일 수입니다. | All | ✕ | ✕ | ✕ | Build |
Dockerfile 라인 | 명령과 인수를 모두 포함하여 Dockerfile의 특정 행. | All | ! 값의 경우에만 | ✕ | ✓ | Build |
이미지가 스캔되지 않음 | 이미지에 사용 가능한 검사 데이터가 없습니다. | All | ✕ | ✕ | ✕ | Build |
CVSS |
Common Vulnerability Scoring System은 이를 사용하여 점수가 >보다 크고 < , 또는 지정된 CVSS와 같은 취약점과 이미지를 일치시키는 데 사용합니다. | All | ✕ | ✕ | ✓ | Build |
수정 기준 | 이미지의 플래그가 지정된 취약점을 수정하는 패키지의 버전 문자열입니다. | All | ✓ | ✓ | ✓ | Build |
CVE | 일반적인 취약점 및 노출: 특정 CVE 번호와 함께 사용합니다. | All | ✓ | ✓ | ✓ | Build |
이미지 구성 요소 | 이미지에 있는 특정 소프트웨어 구성 요소의 이름 및 버전 번호입니다. | All | ✓ | ✕ | ✓ | Build |
이미지 OS | 이미지의 기본 운영 체제의 이름 및 버전 번호입니다. | 3.0.47 이상 | ✓ | ✓ | ✓ | Build |
환경 변수 | 이름 또는 값으로 환경 변수를 확인합니다. | All | 키와 값만 사용할 수 있습니다. | ✕ | ✓ | 배포 |
허용되지 않음 | 지정된 환경의 Kubernetes 리소스에 존재할 수 없는 주석입니다. | All | ✓ | ✕ | ✓ | 배포 |
허용되지 않은 이미지 레이블 |
사용하지 않아야 하는 Docker 이미지 레이블이 있는지 확인합니다. 배포의 이미지에 지정된 레이블이 있는 경우 정책이 트리거됩니다. | 3.0.40 이상 | ✓ | ✕ | ✓ | 배포 |
필수 이미지 레이블 |
필요한 Docker 이미지 레이블이 있는지 확인합니다. 배포의 이미지에 지정된 레이블이 없는 경우 정책이 트리거됩니다. | 3.0.40 이상 | ✓ | ✕ | ✓ | 배포 |
필수 라벨 | Kubernetes에 필수 레이블이 있는지 확인합니다. | All | ✓ | ✕ | ✓ | 배포 |
필수 주석 | Kubernetes에 필수 주석이 있는지 확인합니다. | All | ✓ | ✕ | ✓ | 배포 |
볼륨 이름 | 스토리지의 이름입니다. | All | ✓ | ✓ | ✓ | 배포 |
볼륨 소스 |
볼륨이 프로비저닝되는 양식을 나타냅니다. 예를 들어 | All | ✓ | ✓ | ✓ | 배포 |
볼륨 대상 | 볼륨이 마운트된 경로입니다. | All | ✓ | ✓ | ✓ | 배포 |
볼륨 유형 | 볼륨 유형입니다. | All | ✓ | ✓ | ✓ | 배포 |
쓰기 가능한 볼륨 | 쓰기 가능으로 마운트된 볼륨입니다. | All | ✕ | ✕ | ✕ | 배포 |
프로토콜 | 노출된 포트에서 사용하는 TCP 또는 UDP와 같은 프로토콜입니다. | All | ✓ | ✓ | ✓ | 배포 |
포트 | 배포에서 노출되는 포트 번호입니다. | All | ✕ | ✓ | ✓ | 배포 |
privileged | 실행 중인 권한 있는 배포. | All | ✕ | ✕ | ✕ | 배포 |
읽기 전용 루트 파일 시스템 | 읽기 전용으로 구성된 루트 파일 시스템으로 실행되는 컨테이너입니다. | All | ✕ | ✕ | ✕ | 배포 |
드롭 기능 |
컨테이너에서 삭제해야 하는 Linux 기능. 예: | All | ✕ | ✕ | ✓ | 배포 |
기능 추가 | 예를 들어 원시 패킷을 보내거나 파일 권한을 재정의하는 기능과 같이 컨테이너에 추가해서는 안 되는 Linux 기능입니다. | All | ✕ | ✕ | ✓ | 배포 |
프로세스 이름 | 배포에서 실행되는 프로세스의 이름입니다. | All | ✓ | ✓ | ✓ | 런타임 |
Process Ancestor | 배포에서 실행되는 프로세스의 상위 프로세스 이름입니다. | All | ✓ | ✓ | ✓ | 런타임 |
프로세스 인수 | 배포에서 실행되는 프로세스의 명령 인수입니다. | All | ✓ | ✓ | ✓ | 런타임 |
프로세스 UID | 배포에서 실행되는 프로세스의 UNIX 사용자 ID입니다. | All | ✕ | ✓ | ✓ | 런타임 |
포트 노출 | 서비스 노출 방법(예: 로드 밸런서 또는 노드 포트) | All | ✕ | ✓ | ✓ | 배포 |
서비스 계정 | 서비스 계정의 이름입니다. | All | ✓ | ✓ | ✓ | 배포 |
쓰기 가능한 호스트 마운트 | resource가 쓰기 권한이 있는 호스트에 경로를 마운트했습니다. | All | ✕ | ✕ | ✕ | 배포 |
예기치 않은 프로세스 실행 | 배포의 잠금 프로세스 기준선에 없는 프로세스 실행이 나열되지 않은 배포를 확인합니다. | All | ✕ | ✕ | ✕ | 런타임 |
최소 RBAC 권한 |
배포의 Kubernetes 서비스 계정에 Kubernetes RBAC 권한 수준이 | All | ✕ | ✓ | ✕ | 배포 |
컨테이너 이름 | 컨테이너의 이름입니다. | 3.0.52 이상 | ✓ | ✓ | ✓ | 배포 |
컨테이너 CPU 요청 | 지정된 리소스에 예약된 코어 수를 확인합니다. | All | ✕ | ✕ | ✓ | 배포 |
컨테이너 CPU 제한 | 리소스가 사용할 수 있는 최대 코어 수를 확인합니다. | All | ✕ | ✕ | ✓ | 배포 |
컨테이너 메모리 요청 | 지정된 리소스에 예약된 메모리 양을 확인합니다. | All | ✕ | ✕ | ✓ | 배포 |
컨테이너 메모리 제한 | 리소스가 사용할 수 있는 최대 메모리 양을 확인합니다. | All | ✕ | ✕ | ✓ | 배포 |
Kubernetes 작업 |
| 3.0.55 이상 | ✕ | ✕ |
! | 런타임 |
Kubernetes 리소스 |
| 3.63 이상 | ✕ | ✕ |
! | 런타임 |
Kubernetes 리소스 이름 | 액세스한 Kubernetes 리소스의 이름입니다. | 3.63 이상 | ✓ | ✓ |
! | 런타임 |
Kubernetes API Verb |
| 3.63 이상 | ✕ | ✕ |
! | 런타임 |
Kubernetes 사용자 이름 | 리소스에 액세스한 사용자의 이름입니다. | 3.63 이상 | ✓ | ✓ |
! | 런타임 |
Kubernetes 사용자 그룹 | 리소스에 액세스한 사용자가 속한 그룹의 이름입니다. | 3.63 이상 | ✓ | ✕ |
! | 런타임 |
사용자 에이전트 |
사용자가 리소스에 액세스하는 데 사용한 사용자 에이전트입니다. 예를 들어 | 3.63 이상 | ✓ | ✓ |
! | 런타임 |
소스 IP 주소 | 사용자가 리소스에 액세스한 IP 주소입니다. | 3.63 이상 | ✓ | ✓ |
! | 런타임 |
Impersonated 사용자 | 서비스 계정 또는 기타 계정에서 가장하는 사용자가 요청이 수행되었는지 확인합니다. | 3.63 이상 | ✕ | ✕ | ✕ | 런타임 |
런타임 클래스 | 배포의 RuntimeClass입니다. | 3.67 이상 | ✓ | ✓ | ✓ | 배포 |
서비스 계정 토큰 | 배포 구성이 서비스 계정 토큰을 자동으로 마운트하는지 확인합니다. | 3.68 이상 | ✕ | ✕ | ✕ | 배포 |
활성 프로브 | 컨테이너가 활성 프로브를 정의하는지 여부입니다. | 3.69 이상 | ✕ | ✕ | ✕ | 배포 |
준비 프로브 | 컨테이너가 준비 상태 프로브를 정의하는지 여부입니다. | 3.69 이상 | ✕ | ✕ | ✕ | 배포 |
replicas | 배포 복제본 수입니다. | 3.69 이상 | ✕ | ✓ | ✓ | 배포 |
권한 에스컬레이션 | 컨테이너 프로세스에서 상위 프로세스보다 더 많은 권한을 얻을 수 있도록 개발이 구성된 경우 경고를 제공합니다. | 3.70 이상 | ✕ | ✕ | ✕ | 배포 |
인그레스 네트워크 정책 | 수신 Kubernetes 네트워크 정책이 있는지 확인합니다. | 3.70 이상 | ✕ | ✕ | ✓ | 배포 |
송신 네트워크 정책 | 송신 Kubernetes 네트워크 정책이 있는지 확인합니다. | 3.70 이상 | ✕ | ✕ | ✓ | 배포 |
신뢰할 수 있는 이미지 서명자가 확인하지 않음 | 이미지 서명을 확인하는 데 사용할 수 있는 서명 통합 목록입니다. 제공된 서명 통합 중 하나 이상에서 서명을 확인할 수 없거나 서명이 없는 이미지에 대한 경고를 만듭니다. | 3.70 이상 | ✕ | ✕ |
! | 배포 |
Kubernetes 버전 3.0.44 이상용 Red Hat Advanced Cluster Security를 사용하는 경우 정책 기준 섹션에서 지정하는 정책 기준이 "AND"됩니다. 지정된 정책 기준이 모두 일치하는 경우에만 위반이 트리거됩니다.
6.4.3.1. 정책 기준에 대한 논리 조건 추가
드래그 앤 드롭 정책 필드 패널을 사용하여 정책 기준에 대한 논리 조건을 지정할 수 있습니다.
사전 요구 사항
- Kubernetes 버전 3.0.45 이상용 Red Hat Advanced Cluster Security를 사용해야 합니다.
절차
Policy criteria 섹션에서 Add a new condition to add a new policy 섹션을 선택합니다.
- 편집 아이콘을 클릭하여 정책 섹션의 이름을 변경할 수 있습니다.
- Drag out a policy 필드 섹션에는 여러 카테고리에 사용 가능한 정책 기준이 나열되어 있습니다. 이러한 카테고리를 확장하고 축소하여 정책 기준 특성을 확인할 수 있습니다.
- 정책 섹션의 Drop a policy 필드로 속성을 끕니다.
선택한 속성 유형에 따라 선택한 속성에 대한 조건을 구성하는 다양한 옵션이 제공됩니다. 예를 들면 다음과 같습니다.
-
부울 값이
읽기 전용 루트 파일 시스템으로 특성을 선택하는 경우
및 WRI>-<READ-ONLY
; 옵션이
표시됩니다. 복합 값
Environment 변수
가 있는 특성을 선택하면Key
, Value ,
필드에 대한 값을 입력하는 옵션과 사용 가능한 옵션에 대해 더 많은 값을 추가하는 아이콘이 표시됩니다.Value
From- 속성에 대해 여러 값을 결합하려면 추가 아이콘을 클릭합니다.
-
정책 섹션에 논리 연산자
AND
OR
목록을 클릭하여 AND와OR
연산자 간에 전환할 수도 있습니다. Operator 간 집계는 정책 섹션 내에서만 작동하며 두 개의 다른 정책 섹션 간에는 작동하지 않습니다.
-
부울 값이
-
이러한 단계를 반복하여 둘 이상의
AND
및OR
조건을 지정할 수 있습니다. 추가된 속성에 대한 조건을 구성한 후 다음을 클릭하여 정책 생성을 계속합니다.