27.18.5. 사용자 ID
보조 그룹을 사용하기 전에 SCC, 기본값, 허용된 범위를 읽습니다.
사용자 ID는 컨테이너 이미지 또는 포드 정의에 정의할 수 있습니다. 포드 정의에서 단일 사용자 ID는 모든 컨테이너에 전역적으로 정의되거나 개별 컨테이너(또는 둘 다)에 따라 정의할 수 있습니다. 사용자 ID는 아래 Pod 정의 조각에 표시된 대로 제공됩니다.
spec: containers: - name: ... securityContext: runAsUser: 1000100001
위의 ID 1000100001은 컨테이너에 따라 다르며 내보내기의 소유자 ID와 일치합니다. NFS 내보내기의 소유자 ID가 54321 인 경우 해당 번호가 포드 정의에 사용됩니다. 컨테이너 정의 외부의 securityContext
를 지정하면 포드의 모든 컨테이너에 ID가 전역적으로 지정됩니다.
그룹 ID와 유사하게 SCC 및/또는 프로젝트에 설정된 정책에 따라 사용자 ID를 검증할 수 있습니다. SCC의 runAsUser
전략이 RunAsAny 로 설정된 경우 포드 정의 또는 이미지에 정의된 모든 사용자 ID가 허용됩니다.
이는 UID 0(루트 )도 허용됩니다.
대신 runAsUser
전략이 MustRunAsRange 로 설정된 경우 제공된 사용자 ID가 허용되는 ID 범위에 대해 검증됩니다. 포드에 사용자 ID가 제공되지 않으면 기본 ID가 허용되는 사용자 ID 범위의 최소 값으로 설정됩니다.
이전 NFS 예제 로 돌아가서 컨테이너에는 위의 포드 조각에 표시되는 1000100001 으로 설정된 UID가 필요합니다. 기본 프로젝트 및 restricted SCC를 가정하면 Pod의 요청된 사용자 ID 1000100001이 허용되지 않으므로 Pod가 실패합니다. 다음과 같은 이유로 Pod가 실패합니다.
- 사용자 ID로 1000100001 을 요청합니다.
-
사용 가능한 모든 SCC는
runAsUser
전략에 MustRunAsRange 를 사용하므로 UID 범위 검사가 필요하고 - 1000100001 은 SCC 또는 프로젝트의 사용자 ID 범위에 포함되지 않습니다.
이 상황을 해결하기 위해 적절한 사용자 ID 범위를 사용하여 새 SCC를 만들 수 있습니다. 새 프로젝트는 적절한 사용자 ID 범위를 정의하여 만들 수도 있습니다. 더 적은 우선 순위의 다른 옵션도 있습니다.
- 제한된 SCC는 최소 및 최대 사용자 ID 범위 내에 1000100001 을 포함하도록 수정할 수 있습니다. 가능한 경우 사전 정의된 SCC를 수정하지 않도록 해야 하므로 이 방법은 권장되지 않습니다.
-
runAsUser
값에 RunAsAny 를 사용하도록 restricted SCC를 수정하여 ID 범위 확인을 제거할 수 있습니다. 컨테이너를 root로 실행할 수 있으므로 이 방법은 권장되지 않습니다. - 기본 프로젝트의 UID 범위는 1000100001 의 사용자 ID를 허용하도록 변경할 수 있습니다. 단일 사용자 ID 범위만 지정할 수 있고 범위가 변경되면 다른 Pod가 실행되지 않을 수 있으므로 일반적으로 이 방법은 권장되지 않습니다.
사용자 ID 및 사용자 지정 SCC
가능한 경우 사전 정의된 SCC를 수정하지 않는 것이 좋습니다. 기본 방법은 조직의 보안 요구 사항에 더 적합한 사용자 지정 SCC 를 생성하거나 원하는 사용자 ID를 지원하는 새 프로젝트를 생성하는 것입니다.
이전 예제의 상황을 해결하기 위해 다음과 같이 사용자 정의 SCC를 생성할 수 있습니다.
- 최소 및 최대 사용자 ID가 정의됩니다.
- UID 범위 검사는 계속 적용되며
- 1000100001 의 UID가 허용됩니다.
예를 들면 다음과 같습니다.
$ oc get -o yaml --export scc nfs-scc allowHostDirVolumePlugin: false 1 ... kind: SecurityContextConstraints metadata: ... name: nfs-scc 2 priority: 9 3 requiredDropCapabilities: null runAsUser: type: MustRunAsRange 4 uidRangeMax: 1000100001 5 uidRangeMin: 1000100001 ...
이제 runAsUser를 사용합니다. 이전 포드 정의 조각에 표시된 1000100001
의 Pod는 새 nfs-scc 와 일치하며 UID 1000100001으로 실행할 수 있습니다.