설명
파드의 serviceAccountName이 없거나 빈 문자열이면 Kubernetes는 같은 네임스페이스의 기본 ServiceAccount를 사용합니다. 기본 계정에 연결된 권한에 따라 개발자가 의도하지 않은 API 접근이 허용될 수 있습니다. 이름을 명시하는 것만으로 권한이 줄어들지는 않습니다.
서비스 계정은 워크로드의 API 접근 범위를 정하는 핵심 요소입니다. 워크로드의 용도에 맞는 ServiceAccount와 최소 권한을 함께 관리하세요.
잠재적 영향
- 기본 ServiceAccount 권한을 예상치 못하게 상속할 수 있습니다.
- 워크로드별 권한 분리가 어려워질 수 있습니다.
- 서로 다른 워크로드가 같은 기본 계정으로 요청하면 구분이 어려워질 수 있습니다.
해결 방법
- 모든 파드에
serviceAccountName을 명시적으로 설정하세요. - 빈 값이나 누락 상태가 남지 않도록 템플릿과 매니페스트를 점검하세요.
- 애플리케이션별 전용 ServiceAccount를 만들어 필요한 권한만 연결하세요.
예시
이미지는 예시이므로 실제 사용할 이미지로 바꾸세요. build-robot ServiceAccount는 파드와 같은 네임스페이스에 별도로 생성하고 필요한 권한만 부여해야 합니다.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx3
spec:
containers:
- image: nginx3
name: nginx3
serviceAccountName: ""
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
serviceAccountName: build-robot
설명:
- 변경 전: ServiceAccount 이름이 비어 있어 기본 ServiceAccount가 사용될 수 있습니다.
- 변경 후: 명시적인 ServiceAccount를 지정해 권한 출처를 분명히 합니다.