RBAC의 Attach 권한 허용

pods/attach 권한은 실행 중인 컨테이너 세션에 연결할 수 있어 민감한 접근 경로가 될 수 있습니다.

설명

pods/attach 접근 권한이 있으면 실행 중인 컨테이너의 출력에 연결하고, 표준 입력이 활성화된 경우 입력을 보낼 수 있습니다. 새 명령을 실행하는 exec와는 다르지만, 실행 중인 프로세스와 직접 상호작용할 수 있어 민감합니다.

특히 권한이 높은 컨테이너에 attach가 가능하면 운영 중인 워크로드를 통해 추가 정보 수집이나 오용이 발생할 수 있습니다. 운영 환경에서는 꼭 필요한 경우가 아니라면 제한하는 편이 좋습니다.

잠재적 영향

  • 사용자가 실행 중인 컨테이너 세션에 직접 연결할 수 있습니다.
  • 민감한 출력 정보나 내부 동작을 실시간으로 관찰할 수 있습니다.
  • 권한이 높은 컨테이너에 연결해 추가 오용이 발생할 수 있습니다.

해결 방법

  • RBAC에서 불필요한 pods/attach 리소스 권한을 제거하세요.
  • 디버깅용 접근은 별도 승인 절차와 제한된 계정으로 운영하세요.
  • 운영 클러스터에서 세션형 권한은 최소 인원에게만 허용하세요.

예시

역할을 사용자에게 연결하는 RoleBinding은 생략했습니다. 다른 역할을 통해 부여된 권한도 함께 확인하세요.

변경 전

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

변경 후

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

설명:

  • 변경 전: pods/attach 권한으로 실행 중 컨테이너 세션에 직접 붙을 수 있습니다.
  • 변경 후: 이 역할에서 attach 권한을 제거합니다. Pod 생성 권한은 여전히 남아 있으므로 필요성을 별도로 검토하세요.

참조