설명
Kubernetes RBAC에서 Role 또는 ClusterRole의 apiGroups, resources, verbs에 지정한 *는 해당 필드의 모든 값을 의미합니다. 이러한 와일드카드는 나머지 필드와 바인딩에 따라 필요한 범위보다 넓은 권한을 부여할 수 있습니다.
하나의 필드에 *가 있다고 해서 모든 리소스와 작업에 대한 클러스터 전체 권한이 생기는 것은 아닙니다. 실제 부여되는 권한은 규칙의 다른 필드, RoleBinding 또는 ClusterRoleBinding, 적용 네임스페이스에 따라 달라집니다. 리소스나 작업에 와일드카드를 사용하면 나중에 추가되는 대상까지 허용 범위에 포함될 수 있습니다.
잠재적 영향
- 바인딩된 사용자나 서비스 계정에 불필요한 조회·변경·삭제 권한이 생길 수 있습니다.
- 계정이나 워크로드가 침해되면 해당 바인딩 범위에서 권한이 악용될 수 있습니다.
- 새로운 리소스나 작업이 추가될 때 역할을 수정하지 않아도 권한 범위가 의도치 않게 넓어질 수 있습니다.
해결 방법
- 불필요한
*를 제거하고 필요한 API 그룹, 리소스, 작업을 명시하세요. - 역할의 사용 목적을 확인하고
RoleBinding과ClusterRoleBinding의 대상 및 범위를 함께 점검하세요. - 서비스 계정으로 필요한 작업이 유지되는지, 불필요한 작업은 거부되는지 확인하세요.
예시
두 예시는 와일드카드 권한과 작업을 명시한 권한을 비교합니다. 역할 종류와 네임스페이스도 다르므로 첫 번째 구성을 두 번째 구성으로 그대로 교체해서는 안 됩니다. 실제 ClusterRole 정의에서는 metadata.namespace를 생략하고 바인딩에서 적용 범위를 결정하세요.
와일드카드를 사용한 Role
yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: rbac2
name: configmap-modifier
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
작업을 명시한 ClusterRole
yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: opa
name: configmap-modifier
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["update", "patch"]
설명:
- 와일드카드를 사용한 Role:
apiGroups,resources,verbs가 모두*입니다. 실제 권한 부여 범위는 이Role에 대한 바인딩의 네임스페이스에도 제한됩니다. - 작업을 명시한 ClusterRole: 핵심 API 그룹의
configmaps에 대한update와patch만 명시합니다. 필요한 권한인지는 별도로 확인해야 하며,ClusterRoleBinding으로 연결하면 여러 네임스페이스에 걸친 권한이 될 수 있습니다.