설명
secrets 리소스에 대한 get, list, watch 중 어느 읽기 권한이든 허용되면 해당 범위의 Secret에 담긴 정보를 읽을 수 있습니다. Secret에는 토큰, 비밀번호, 인증서, API 키가 들어갈 수 있기 때문에 매우 주의해야 합니다.
이 권한은 단순 조회처럼 보이지만 실제로는 자격 증명 접근 권한입니다. 꼭 필요한 워크로드와 관리자에게만 최소 범위로 부여해야 합니다.
잠재적 영향
- 사용자가 비밀번호, 토큰, 키 등 민감한 정보를 읽을 수 있습니다.
- 침해된 계정이 다른 시스템으로 추가 이동할 수 있습니다.
- Secret 접근 주체가 많아질수록 사고 원인 추적이 어려워집니다.
해결 방법
secrets에 대한get,list,watch권한을 최소화하세요.- Secret 읽기가 꼭 필요한 워크로드에만 제한적으로 부여하세요.
- RBAC 점검 시 Secret 권한을 별도 고위험 항목으로 관리하세요.
예시
RoleBinding은 생략했습니다. 역할은 필요한 주체에게만 연결하고, 다른 역할에서 부여한 Secret 접근도 함께 확인하세요.
변경 전
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: role-secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
변경 후
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: role-pod-and-logs-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "watch", "list"]
설명:
- 변경 전: Secret 읽기 권한으로 민감한 자격 증명에 직접 접근할 수 있습니다.
- 변경 후: 이 역할은 Secret 대신 Pod와 로그 조회를 허용합니다. 로그에도 비밀정보가 포함될 수 있으므로 필요한 주체에게만 허용하세요.