설명
ImagePolicyWebhook은 외부 백엔드가 이미지 사용 허용 여부를 판단하도록 하는 admission 플러그인입니다. 이미지 정책을 적용하는 수단이 없으면 승인되지 않은 이미지가 배포될 수 있습니다. 이 플러그인만 켠다고 이미지 서명이나 취약점이 자동 검증되는 것은 아니며, 다른 admission 제어 수단으로도 조직 정책을 적용할 수 있습니다.
잠재적 영향
- 승인되지 않은 이미지나 신뢰하지 않는 출처의 코드가 실행될 수 있습니다.
- 검증 기준과 예외 처리가 일관되지 않으면 공급망 위험을 통제하기 어려워집니다.
해결 방법
- 조직에 필요한 레지스트리·서명·이미지 승인 정책을 정하고, 실제로 이를 검증하는 admission 제어 수단을 구성하세요.
- ImagePolicyWebhook을 쓴다면 플러그인과 필요한 API 활성화, AdmissionConfiguration, TLS 백엔드 연결을 함께 구성하세요. 백엔드 장애 시 허용 여부와 승인·거부 결과를 시험하세요.
예시
Kubernetes v1.30.0의 인자를 비교하는 과거 부분 예시입니다. 지원되는 버전과 전체 API 서버 구성을 사용하세요. 설정 파일·TLS 백엔드와 필요한 --runtime-config=imagepolicy.k8s.io/v1alpha1=true 설정은 생략되어 있어 별도로 준비해야 합니다.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
spec:
containers:
- name: kube-apiserver
image: registry.k8s.io/kube-apiserver:v1.30.0
command:
- kube-apiserver
args:
- --enable-admission-plugins=AlwaysAdmit
AlwaysAdmit 자체는 이미지 정책을 검증하지 않습니다. 기존 클러스터의 다른 정책 제어도 확인해야 합니다.
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
spec:
containers:
- name: kube-apiserver
image: registry.k8s.io/kube-apiserver:v1.30.0
command:
- kube-apiserver
args:
- --enable-admission-plugins=ImagePolicyWebhook
- --admission-control-config-file=/etc/kubernetes/image-policy-webhook.yaml
웹훅 플러그인과 설정 경로를 지정합니다. 정책 백엔드와 연결 구성이 있어야 실제 허용·거부 판단을 수행합니다.