설명
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 생성 권한은 여전히 남아 있으므로 필요성을 별도로 검토하세요.