Kubernetes v1.35: kubeconfigs에서 exec 플러그인 allowList를 통해 호출되는 실행 파일 제한, kuberc에 추가
Source: Kubernetes Blog
Overview
Kubernetes v1.35는 자격 증명 플러그인 정책과 허용 목록을 도입하여 kubectl이 kubeconfig의 exec 플러그인에 정의된 실행 파일을 제한적으로 실행할 수 있게 합니다. 이를 통해 손상된 kubeconfig이 클라이언트 머신에서 임의의 코드를 실행하는 공급망 공격을 완화할 수 있습니다.
How it works
이 기능은 공식 kuberc 레퍼런스에 문서화되어 있습니다. Kubernetes 1.35에서는 기능 플래그 없이 베타 기능으로 제공됩니다.
Default behavior
새 필드를 추가하지 않으면 kubectl은 이전과 동일하게 동작하며 모든 자격 증명 플러그인이 허용됩니다.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
Explicit allow‑all
정책을 AllowAll로 설정하여 기본 동작을 명시적으로 지정할 수 있습니다.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: AllowAll
Deny all (debugging)
kubeconfig이 exec 자격 증명 플러그인을 사용하는지 확실하지 않은 경우 정책을 DenyAll로 설정합니다. kubectl은 모든 플러그인 실행을 거부하고, 실행하려 했던 플러그인을 표시합니다.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: DenyAll
이 정책으로 명령을 실행하면 다음과 같은 오류가 발생합니다:
Unable to connect to the server: getting credentials: plugin "cloudco-login" not allowed: policy set to "DenyAll"
자세한 정보를 보려면 kubectl의 상세 로그 레벨을 높이세요:
kubectl get pods --v=5
Selectively allowing plugins
특정 플러그인만 허용하려면 Allowlist 정책을 사용하고 허용할 실행 파일을 나열합니다.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: Allowlist
credentialPluginAllowlist:
- name: /usr/local/bin/cloudco-login # full path
- name: get-identity # basename, resolved via exec.LookPath
- Full path 항목은 허용되는 바이너리 범위를 좁히므로 권장됩니다.
- Basename 항목은
exec.LookPath를 통해 해석되며, 와일드카드나 글로빙은 지원되지 않습니다.
Future enhancements
현재 허용 목록 항목은 name 필드만 포함합니다. 향후 개선 사항은 다음과 같습니다:
-
Checksum verification – 바이너리의 SHA‑256 해시가 알려진 값과 일치할 경우에만 허용, 예시:
sha256: b9a3fad00d848ff31960c44ebb5f8b92032dc085020f857c98e32a5d5900ff9c path: /usr/bin/cloudco-login -
Signed binaries – 신뢰할 수 있는 키로 서명된 바이너리만 실행하도록 제한.
Get involved
자격 증명 플러그인 정책은 아직 발전 중이며, SIGs (SIG‑CLI, SIG‑AUTH)에서 피드백과 기여를 환영합니다. Kubernetes Slack 채널에서 토론에 참여하세요:
#sig-cli#sig-auth