왜 이런 초과권한이 발생하는지 원인과 해결책 분석해줘




프로젝트에 붙어 있는 서비스 계정들이 “Editor” 같은 원시(primitive) 역할을 갖고 있기 때문에, 사실상 수천 개에 달하는 세부 IAM 권한을 한꺼번에 부여받고 있는 상태입니다. 콘솔의 “초과 권한 10227/10260개” 라벨은

  • (분자) 실제 이 서비스 계정이 보유 중인,

  • (분모) Editor 역할이 기본으로 제공하는

    IAM 권한의 개수를 보여주는 것이고,

    “보안 통계 → 권장 사항” 기능에서 이 중 얼마나 많은 권한이 불필요한지(초과 권한)도 계산해 주는 겁니다.


1. 원인 분석

  1. 원시 역할(Owner/Editor/Viewer)의 광범위함

    • Editor 역할은 거의 모든 리소스의 읽기·쓰기 권한을 포함하고 있어, 실제로는 몇 가지 기능만 쓰더라도 수천 개 권한이 함께 따라 붙습니다.

  2. 자동화 도구가 기본으로 붙여 주는 권한

    • App Engine 기본 서비스 계정, Cloud Build 서비스 계정 등은 배포·빌드 편의를 위해 편집자 권한을 할당하는데, 이 또한 불필요한 권한까지 포함합니다.

  3. 최소 권한 원칙 미적용

    • “일단 동작하는 편이 빠르니까” 하는 이유로 broad role을 쓰다 보니 실제 업무에 필요한 권한을 훨씬 초과하게 된 것입니다.


2. 해결 방안

  1. 최소 권한 원칙(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) 역할 제거

  2. IAM Recommender 활용

    • GCP 콘솔의 보안 → 권장사항(Recommendations) → IAM 권한 조정 메뉴에서

      “제거 권장” 목록을 확인하고, 버튼 한 번으로 불필요 권한을 뺄 수 있습니다.

  3. 서비스 계정 역할 재검토 & 정리

    • 사용하지 않는 서비스 계정 비활성화 혹은 삭제

    • 남은 서비스 계정도 “이 프로젝트의 ○○기능만 담당” 하도록 역할을 쪼개서 부여

  4. 조직 정책(org policy)으로 원시 역할 제한

    • Primitive Role 사용 자체를 금지하거나,

    • 특정 폴더·프로젝트 단위로만 원시 역할을 허용하도록 제약을 걸어둘 수 있습니다.


요약

지금 보이는 ‘초과 권한’ 숫자는 Editor 같은 광범위한 역할이 주는 불필요한 권한 개수입니다.

원시 역할 대신 최소 권한의 세부 역할·커스텀 역할로 바꿔 주시면 초과 권한 경고가 사라집니다.

댓글 남기기