RBAC의 Port-Forward 권한 허용

pods/portforward 권한은 네트워크 제한을 우회해 컨테이너와 직접 통신할 수 있는 경로가 될 수 있습니다.

설명

pods/portforward 권한이 있으면 사용자가 클러스터 내부 파드와 직접 통신 채널을 열 수 있습니다. 이 방식은 일반 서비스 노출 정책이나 일부 네트워크 제어를 우회하는 통로가 될 수 있습니다. 서비스 자체의 인증을 대신하지는 않습니다.

운영 환경에서는 포트 포워딩이 단순 편의 기능이 아니라 민감한 접근 권한이라는 점을 고려해야 합니다. 꼭 필요한 경우에만 제한적으로 허용하는 편이 좋습니다.

잠재적 영향

  • 사용자가 파드 내부 서비스와 직접 통신할 수 있습니다.
  • 네트워크 격리 정책이나 공개 경로 제한을 우회할 수 있습니다.
  • 민감한 내부 서비스 접근 경로가 늘어날 수 있습니다.

해결 방법

  • RBAC에서 pods/portforward 권한을 제거하거나 최소화하세요.
  • 운영 디버깅용 포트 포워딩은 별도 승인 절차로만 허용하세요.
  • 내부 서비스 접근은 표준 네트워크 경로와 인증 정책을 우선 사용하세요.

예시

역할을 부여하는 RoleBinding은 생략했습니다. 다른 역할을 통해 같은 권한이 부여되는지도 확인하세요.

변경 전

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-namespace
  name: allow-port-forward
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/portforward"]
    verbs: ["get", "list", "create"]

변경 후

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-namespace
  name: allow-port-forward-neg
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "create"]

설명:

  • 변경 전: pods/portforward 권한으로 내부 파드와 직접 통신 경로를 열 수 있습니다.
  • 변경 후: 이 역할에서 포트 포워딩 권한을 제거합니다. Pod 생성 권한은 남아 있으므로 필요한지 별도로 검토하세요.

참조