PodSecurityPolicy는 포드 생성 및 업데이트에 대한 권한 부여에 사용한다.
하지만 Kubernetes v1.21부터 deprecated 되었으며, v1.25에서는 제거된다.
포드 명령어 실행 사용자 설정
포드 정의 yaml 파일에서 spec.securityContext.runAsUser 필드에 uid를 지정한다.
edit 명령으로 수정할 수 없기 때문에 yaml 파일 수정 및 포드 재생성이 필요하다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2021-11-16T09:59:05Z"
name: ubuntu-sleeper
namespace: default
resourceVersion: "743"
uid: 646a92a3-cd08-4543-acd6-960ab0f67114
spec:
securityContext:
runAsUser: 1010
containers:
- command:
- sleep
- "4800"
포드 삭제 및 재생성은 아래 명령으로도 할 수 있다.
kubectl delete pod <POD_NAME>; kubectl apply -f <FILE_NAME>
참고로 포드 명령어 실행 사용자과 포드 내 컨테이너의 명령어 실행 사용자는 서로 다르게 설정할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: multi-pod
spec:
securityContext:
runAsUser: 1001
containers:
- image: ubuntu
name: web
command: ["sleep", "5000"]
securityContext:
runAsUser: 1002
- image: ubuntu
name: sidecar
command: ["sleep", "5000"]
컨테이너에 capabilites 설정
루트 사용자의 권한을 부여하지 않고 특정 권한을 사용할 수 있도록 한다.
포드 정의 yaml 파일의 spec.containers.securityContext.capabilites 필드 아래에 add 필드와 배열을 이용해 추가할 capabilites를 나열한다.
기존 포드에 capabilites를 추가하는 경우, 삭제 후 재생성이 필요하다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2021-11-16T10:13:54Z"
name: ubuntu-sleeper
namespace: default
resourceVersion: "768"
uid: 47c01a68-9a0b-4bb3-8ac5-b0f755b1de2d
spec:
containers:
- command:
- sleep
- "4800"
securityContext:
capabilities:
add: ["SYS_TIME", "NET_ADMIN"]