RBAC의 Secret 읽기 권한 허용

Secret 읽기 권한이 있는 Role은 비밀번호, 토큰, 키 같은 민감 정보를 노출할 수 있습니다.

설명

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와 로그 조회를 허용합니다. 로그에도 비밀정보가 포함될 수 있으므로 필요한 주체에게만 허용하세요.

참조