27.18.4. fsGroup
보조 그룹을 사용하기 전에 SCC, 기본값, 허용된 범위를 읽습니다.
fsGroup
은 Pod의 "파일 시스템 그룹" ID를 정의하며, 이는 컨테이너의 보조 그룹에 추가됩니다. supplementalGroups
ID는 공유 스토리지에 적용되지만 fsGroup
ID는 블록 스토리지에 사용됩니다.
Ceph RBD, iSCSI 및 다양한 클라우드 스토리지와 같은 블록 스토리지는 일반적으로 직접 또는 PVC를 사용하여 블록 스토리지 볼륨을 요청한 단일 포드 전용입니다. 공유 스토리지와 달리 블록 스토리지는 포드에서 인계받습니다. 즉 포드 정의 또는 이미지에 제공된 사용자 및 그룹 ID가 실제 물리적 블록 장치에 적용됩니다. 일반적으로 블록 스토리지는 공유되지 않습니다.
fsGroup
정의는 다음 Pod 정의 내용에서 아래에 표시됩니다.
kind: Pod ... spec: containers: - name: ... securityContext: 1 fsGroup: 5555 2 ...
supplementalGroups
와 마찬가지로, 위의 포드의 모든 컨테이너(동일한 SCC 또는 프로젝트가 5555그룹이 허용된다고 가정)는 5555 그룹의 멤버이며 컨테이너의 사용자 ID에 관계없이 블록 볼륨에 액세스할 수 있습니다. 포드가 fsGroup
전략이 MustRunAs 인 restricted SCC와 일치하면 포드가 실행되지 않습니다. 그러나 SCC에 fsGroup
전략이 RunAsAny 로 설정된 경우 모든 fsGroup
ID(5555 포함)가 허용됩니다. SCC에 fsGroup
전략이 RunAsAny 로 설정되어 있고 fsGroup
ID가 지정되지 않은 경우 블록 스토리지의 "계산"이 발생하지 않고 Pod에 대한 사용 권한이 거부될 수 있습니다.
fsGroups 및 사용자 지정 SCC
이전 예제의 상황을 해결하기 위해 다음과 같이 사용자 정의 SCC를 생성할 수 있습니다.
- 최소 및 최대 그룹 ID가 정의됩니다.
- ID 범위 검사가 강제 적용됨
- 5555 의 그룹 ID가 허용됩니다.
사전 정의된 SCC를 수정하거나 사전 정의된 프로젝트에서 허용되는 ID 범위를 변경하는 대신 새 SCC를 생성하는 것이 좋습니다.
새 SCC 정의의 다음 내용을 고려하십시오.
# oc get -o yaml --export scc new-scc ... kind: SecurityContextConstraints ... fsGroup: type: MustRunAs 1 ranges: 2 - max: 6000 min: 5000 3 ...
- 1
- MustRunAs 는 그룹 ID 범위 검사를 트리거하지만 RunAsAny 는 범위 검사가 필요하지 않습니다.
- 2
- 허용되는 그룹 ID의 범위는 5000 ~ 5999를 포함합니다. 여러 범위가 지원되지만 사용되지 않습니다. 여기서 허용되는 그룹 ID 범위는 5000 ~ 5999이며 기본
fsGroup
은 5000입니다. - 3
- 최소 값(또는 전체 범위)은 SCC에서 생략할 수 있으므로 기본값을 검사하고 생성하는 범위가 프로젝트의
openshift.io/sa.scc.supplemental-groups
범위로 지연됩니다.fsGroup
및supplementalGroups
는 프로젝트에서 동일한 그룹 필드를 사용합니다.fsGroup
에는 별도의 범위가 없습니다.
위에 표시된 포드가 이 새 SCC에 대해 실행되는 경우(물론 포드는 새 SCC와 일치), 포드 정의에 제공된 5555 그룹이 사용자 지정 SCC에서 허용되므로 시작됩니다. 또한 포드는 블록 장치를 "수수"하므로 Pod 외부의 프로세스에서 블록 스토리지를 볼 때 실제로 5555 가 그룹 ID로 지정됩니다.
블록 소유권을 지원하는 볼륨 목록은 다음과 같습니다.
- AWS Elastic Block Store
- OpenStack Cinder
- Ceph RBD
- GCE 영구 디스크
- iSCSI
- emptyDir
이 목록은 잠재적으로 불완전합니다.