프로젝트에 붙어 있는 서비스 계정들이 “Editor” 같은 원시(primitive) 역할을 갖고 있기 때문에, 사실상 수천 개에 달하는 세부 IAM 권한을 한꺼번에 부여받고 있는 상태입니다. 콘솔의 “초과 권한 10227/10260개” 라벨은
-
(분자) 실제 이 서비스 계정이 보유 중인,
-
(분모) Editor 역할이 기본으로 제공하는
IAM 권한의 개수를 보여주는 것이고,
“보안 통계 → 권장 사항” 기능에서 이 중 얼마나 많은 권한이 불필요한지(초과 권한)도 계산해 주는 겁니다.
1. 원인 분석
-
원시 역할(Owner/Editor/Viewer)의 광범위함
-
Editor 역할은 거의 모든 리소스의 읽기·쓰기 권한을 포함하고 있어, 실제로는 몇 가지 기능만 쓰더라도 수천 개 권한이 함께 따라 붙습니다.
-
-
자동화 도구가 기본으로 붙여 주는 권한
-
App Engine 기본 서비스 계정, Cloud Build 서비스 계정 등은 배포·빌드 편의를 위해 편집자 권한을 할당하는데, 이 또한 불필요한 권한까지 포함합니다.
-
-
최소 권한 원칙 미적용
-
“일단 동작하는 편이 빠르니까” 하는 이유로 broad role을 쓰다 보니 실제 업무에 필요한 권한을 훨씬 초과하게 된 것입니다.
-
2. 해결 방안
-
최소 권한 원칙(Principle of Least Privilege) 적용
-
프리디파인드(predefined) 역할 또는 커스텀 역할로 전환
-
예) Cloud Build에는
roles/cloudbuild.builds.builder+roles/storage.objectViewer -
예) Cloud Run 배포에는
roles/run.serviceAgent,roles/iam.serviceAccountUser -
예) App Engine에는
roles/appengine.deployer+roles/logging.logWriter
-
-
불필요한 원시(Editor/Owner) 역할 제거
-
-
IAM Recommender 활용
-
GCP 콘솔의 보안 → 권장사항(Recommendations) → IAM 권한 조정 메뉴에서
“제거 권장” 목록을 확인하고, 버튼 한 번으로 불필요 권한을 뺄 수 있습니다.
-
-
서비스 계정 역할 재검토 & 정리
-
사용하지 않는 서비스 계정 비활성화 혹은 삭제
-
남은 서비스 계정도 “이 프로젝트의 ○○기능만 담당” 하도록 역할을 쪼개서 부여
-
-
조직 정책(org policy)으로 원시 역할 제한
-
Primitive Role 사용 자체를 금지하거나,
-
특정 폴더·프로젝트 단위로만 원시 역할을 허용하도록 제약을 걸어둘 수 있습니다.
-
요약
지금 보이는 ‘초과 권한’ 숫자는 Editor 같은 광범위한 역할이 주는 불필요한 권한 개수입니다.
→ 원시 역할 대신 최소 권한의 세부 역할·커스텀 역할로 바꿔 주시면 초과 권한 경고가 사라집니다.