4.2.5. 보안 컨텍스트 제약 조건


사용자가 수행할 수 있는 작업을 제어하는 RBAC 리소스 외에도 OpenShift Container Platform은 Pod 에서 수행할 수 있는 작업과 액세스할 수 있는 작업을 제어하는 SCC( 보안 컨텍스트 제약 조건)를 제공합니다. 관리자는 CLI 를 사용하여 SCC를 관리할 수 있습니다.

SCC는 영구 스토리지에 대한 액세스를 관리하는 데도 매우 유용합니다.

SCC는 시스템에 적용하기 위해 Pod를 실행해야 하는 조건 집합을 정의하는 오브젝트입니다. 이를 통해 관리자는 다음을 제어할 수 있습니다.

  1. 권한 있는 컨테이너 실행.
  2. 컨테이너가 추가하도록 요청할 수 있는 기능.
  3. 호스트 디렉터리를 볼륨으로 사용.
  4. 컨테이너의 SELinux 컨텍스트
  5. 사용자 ID입니다.
  6. 호스트 네임스페이스 및 네트워킹 사용
  7. Pod의 볼륨을 보유한 FSGroup 할당
  8. 허용 가능한 추가 그룹 구성
  9. 읽기 전용 루트 파일 시스템 사용 필요
  10. 볼륨 유형의 사용 제어
  11. 허용 가능한 seccomp 프로필 구성

기본적으로 7개의 SCC가 클러스터에 추가되며 CLI를 사용하여 클러스터 관리자가 볼 수 있습니다.

$ oc get scc

출력 예

NAME               PRIV      CAPS      SELINUX     RUNASUSER          FSGROUP     SUPGROUP    PRIORITY   READONLYROOTFS   VOLUMES
anyuid             false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    10         false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
hostaccess         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath persistentVolumeClaim secret]
hostmount-anyuid   false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath nfs persistentVolumeClaim secret]
hostnetwork        false     []        MustRunAs   MustRunAsRange     MustRunAs   MustRunAs   <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
nonroot            false     []        MustRunAs   MustRunAsNonRoot   RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
privileged         true      [*]       RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
restricted         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]

중요

기본 SCC를 수정하지 마십시오. OpenShift Container Platform을 업그레이드할 때 기본 SCC를 사용자 정의하면 문제가 발생할 수 있습니다. 대신 새 SCC를 만듭니다.

CLI를 사용하여 클러스터 관리자가 각 SCC에 대한 정의도 볼 수 있습니다. 예를 들어 권한 있는 SCC의 경우 다음을 수행합니다.

$ oc get -o yaml --export scc/privileged

출력 예

allowHostDirVolumePlugin: true
allowHostIPC: true
allowHostNetwork: true
allowHostPID: true
allowHostPorts: true
allowPrivilegedContainer: true
allowedCapabilities: 1
- '*'
apiVersion: v1
defaultAddCapabilities: [] 2
fsGroup: 3
  type: RunAsAny
groups: 4
- system:cluster-admins
- system:nodes
kind: SecurityContextConstraints
metadata:
  annotations:
    kubernetes.io/description: 'privileged allows access to all privileged and host
      features and the ability to run as any user, any group, any fsGroup, and with
      any SELinux context.  WARNING: this is the most relaxed SCC and should be used
      only for cluster administration. Grant with caution.'
  creationTimestamp: null
  name: privileged
priority: null
readOnlyRootFilesystem: false
requiredDropCapabilities: [] 5
runAsUser: 6
  type: RunAsAny
seLinuxContext: 7
  type: RunAsAny
seccompProfiles:
- '*'
supplementalGroups: 8
  type: RunAsAny
users: 9
- system:serviceaccount:default:registry
- system:serviceaccount:default:router
- system:serviceaccount:openshift-infra:build-controller
volumes:
- '*'

1
Pod에서 요청할 수 있는 기능 목록입니다. 빈 목록은 기능을 요청할 수 없음을 나타내고, 특수 기호 *는 모든 기능을 요청할 수 있음을 나타냅니다.
2
모든 포드에 추가할 추가 기능 목록입니다.
3
보안 컨텍스트에 허용되는 값을 지시하는 FSGroup 전략입니다.
4
이 SCC에 액세스할 수 있는 그룹입니다.
5
Pod에서 삭제될 기능 목록입니다.
6
보안 컨텍스트에 허용되는 값을 지시하는 사용자 전략 유형으로 실행합니다.
7
보안 컨텍스트에 허용되는 값을 지정하는 SELinux 컨텍스트 전략 유형입니다.
8
보안 컨텍스트에 허용되는 추가 그룹을 지시하는 보충 그룹 전략입니다.
9
이 SCC에 액세스할 수 있는 사용자입니다.

SCC의 usersgroups 필드는 사용할 수 있는 SCC를 제어합니다. 기본적으로 클러스터 관리자, 노드 및 빌드 컨트롤러에는 권한 있는 SCC에 대한 액세스 권한이 부여됩니다. 인증된 모든 사용자에게는 제한된 SCC에 대한 액세스 권한이 부여됩니다.

Docker에는 포드의 각 컨테이너에 허용되는 기본 기능 목록이 있습니다. 컨테이너에서는 이 기본 목록의 기능을 사용하지만 Pod 매니페스트 작성자는 추가 기능을 요청하거나 일부 기본값을 삭제하여 이를 변경할 수 있습니다. allowedCapabilities,defaultAddCapabilitiesrequiredDropCapabilities 필드는 Pod에서 이러한 요청을 제어하고 요청 가능한 기능, 각 컨테이너에 추가해야 하는 기능 및 금지해야 하는 기능을 지정하는 데 사용됩니다.

권한 있는 SCC:

  • 권한 있는 Pod를 허용합니다.
  • 호스트 디렉터리를 볼륨으로 마운트할 수 있습니다.
  • 포드가 모든 사용자로 실행되도록 허용합니다.
  • Pod가 모든 MCS 레이블로 실행되도록 허용합니다.
  • 포드에서 호스트의 IPC 네임스페이스를 사용하도록 허용합니다.
  • 포드에서 호스트의 PID 네임스페이스를 사용하도록 허용합니다.
  • Pod에서 FSGroup을 사용하도록 허용합니다.
  • 포드에서 추가 그룹을 사용하도록 허용합니다.
  • 포드에서 seccomp 프로필을 사용할 수 있습니다.
  • 포드에서 기능을 요청할 수 있습니다.

restricted SCC:

  • Pod가 권한에 따라 실행되지 않도록 합니다.
  • Pod에서 호스트 디렉터리 볼륨을 사용할 수 없는지 확인합니다.
  • Pod를 미리 할당된 UID 범위에서 사용자로 실행해야 합니다.
  • Pod를 사전 할당된 MCS 라벨로 실행해야 합니다.
  • Pod에서 FSGroup을 사용하도록 허용합니다.
  • 포드에서 추가 그룹을 사용하도록 허용합니다.
참고

각 SCC에 대한 자세한 내용은 SCC에 제공되는 kubernetes.io/description 주석을 참조하십시오.

SCC는 포드에서 액세스할 수 있는 보안 기능을 제어하는 설정 및 전략으로 구성됩니다. 이 설정은 세 가지 범주로 분류됩니다.

부울로 제어

이 유형의 필드는 기본적으로 가장 제한적인 값으로 설정됩니다. 예를 들어, AllowPrivilegedContainer는 값이 지정되지 않은 경우 항상 false로 설정됩니다.

허용 가능한 설정으로 제어

이 유형의 필드는 해당 값이 허용되는지 확인하기 위해 설정과 대조됩니다.

전략으로 제어

가치를 생성하는 전략이 있는 항목에서는 다음을 제공합니다.

  • 가치를 생성하는 메커니즘
  • 지정된 값이 허용된 값 집합에 속하도록 하는 메커니즘

4.2.5.1. SCC 전략

4.2.5.1.1. RunAsUser
  1. MustRunAs - runAsUser를 구성해야 합니다. 구성된 runAsUser를 기본값으로 사용합니다. 구성된 runAsUser에 대해 검증합니다.
  2. MustRunAsRange - 사전 할당된 값을 사용하지 않는 경우 최솟값과 최댓값을 정의해야 합니다. 최솟값을 기본값으로 사용합니다. 전체 허용 범위에 대해 검증합니다.
  3. MustRunAsNonRoot - Pod를 0이 아닌 runAsUser를 사용하여 제출하거나 Pod의 이미지에 USER 지시문이 정의되어 있어야 합니다. 기본값이 제공되지 않습니다.
  4. RunAsAny - 기본값이 제공되지 않습니다. 모든 runAsUser를 지정할 수 있습니다.
4.2.5.1.2. SELinuxContext
  1. MustRunAs - 사전 할당된 값을 사용하지 않는 경우 seLinuxOptions를 구성해야 합니다. seLinuxOptions를 기본값으로 사용합니다. seLinuxOptions 에 대해 검증합니다.
  2. RunAsAny - 기본값이 제공되지 않습니다. 모든 seLinuxOptions를 지정할 수 있습니다.
4.2.5.1.3. SupplementalGroups
  1. MustRunAs - 사전 할당된 값을 사용하지 않는 경우 범위를 하나 이상 지정해야 합니다. 첫 번째 범위의 최솟값을 기본값으로 사용합니다. 모든 범위에 대해 검증합니다.
  2. RunAsAny - 기본값이 제공되지 않습니다. 임의의 supplementalGroups을 지정할 수 있습니다.
4.2.5.1.4. FSGroup
  1. MustRunAs - 사전 할당된 값을 사용하지 않는 경우 범위를 하나 이상 지정해야 합니다. 첫 번째 범위의 최솟값을 기본값으로 사용합니다. 첫 번째 범위의 첫 번째 ID에 대해 검증합니다.
  2. RunAsAny - 기본값이 제공되지 않습니다. fsGroup ID를 지정할 수 있습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.