설명
파드에 ServiceAccount 이름을 지정하지 않으면 해당 네임스페이스의 default ServiceAccount를 사용합니다. 이 계정에 별도로 부여된 권한이 있다면 의도하지 않은 워크로드도 같은 권한을 사용할 수 있습니다. 기본 계정이 항상 관리자 권한을 갖는 것은 아닙니다.
워크로드마다 사용할 계정과 필요한 권한을 명확히 하면 권한 분리와 운영에 도움이 됩니다. 이름을 지정하는 것만으로 해당 계정의 권한이 줄어들지는 않습니다.
잠재적 영향
- 기본 ServiceAccount에 부여된 불필요한 권한을 사용할 수 있습니다.
- 업무가 다른 워크로드 사이의 권한 분리와 감사가 어려워질 수 있습니다.
해결 방법
- 파드와 파드 템플릿의
service_account_name에 승인된 ServiceAccount를 지정하세요. 같은 네임스페이스에 계정을 준비하고 변수·템플릿의 실제 적용 값을 확인하세요. - 계정에는 필요한 권한만 연결하세요. Kubernetes API 토큰이 필요하지 않으면 자동 마운트도 비활성화하세요.
예시
service-name 계정은 파드와 같은 네임스페이스에 별도로 준비해야 합니다. 기존 이미지 버전은 계정 설정 비교용이며 실제 배포에는 유지보수되는 이미지를 선택하세요.
변경 전
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
service_account_name = ""
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
변경 후
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
service_account_name = "service-name"
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
설명:
- 변경 전: 이름이 비어 있어 default ServiceAccount를 사용합니다.
- 변경 후: 사용할 ServiceAccount를 명시합니다. 해당 계정의 권한은 별도 검토가 필요합니다.