ServiceAccount 이름 미지정

파드의 serviceAccountName이 없거나 비어 있으면 기본 ServiceAccount를 사용해 예상하지 못한 권한을 상속할 수 있습니다.

설명

파드의 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를 지정해 권한 출처를 분명히 합니다.

참조