설명
Cloud Storage IAM 바인딩은 지정한 역할을 members에 부여합니다. allUsers는 Google 계정 유무와 관계없이 누구나 포함하며, allAuthenticatedUsers도 자신의 프로젝트 사용자로 제한되지 않습니다. 이러한 주체에 적용되는 역할이 필요한 범위보다 넓으면 의도하지 않은 데이터 접근을 허용할 수 있습니다.
빈 멤버 목록은 그 자체로 익명 사용자에게 권한을 부여하지 않습니다. 바인딩이 필요한지와 의도한 사용자가 빠져 있는지를 확인하세요. 실제 접근은 역할, 상속된 권한, IAM 정책·ACL과 공개 접근 방지 설정을 함께 검토해야 합니다.
잠재적 영향
- 공개 주체에 읽기 권한이 적용되면 파일, 백업이나 로그가 의도보다 넓게 공개될 수 있습니다.
- 쓰기나 관리 권한까지 허용하면 불필요한 객체 변경·삭제나 버킷 설정 변경으로 이어질 수 있습니다.
해결 방법
- 공개 접근이 필요하지 않으면
allUsers와allAuthenticatedUsers를 제거하고 필요한 사용자, 그룹과 서비스 계정에 최소 역할만 부여하세요. 빈 목록을 채우기 위해 임의의 주체를 추가하지 말고 불필요한 바인딩은 제거하세요. google_storage_bucket_iam_binding은 해당 역할의 멤버 목록을 관리하므로 필요한 기존 멤버를 보존하고 Terraform 계획을 확인하세요.- 공개 접근 방지와 다른 IAM 정책·ACL을 함께 점검하고 필요한 접근과 거부할 접근을 시험하세요. 균일한 버킷 수준 액세스만 활성화해도 공개 IAM 권한이 제거되는 것은 아닙니다.
예시
google_storage_bucket.default를 별도로 정의하고 예시 계정 jane@example.com을 필요한 실제 계정으로 바꿔 사용하세요. 기존 구성에 적용할 때는 리소스 이름 변경을 포함한 Terraform 계획을 확인하세요.
변경 전
hcl
resource "google_storage_bucket_iam_binding" "public_binding" {
bucket = google_storage_bucket.default.name
role = "roles/storage.admin"
members = ["user:jane@example.com", "allUsers"]
}
allUsers에 버킷과 객체를 관리할 수 있는 roles/storage.admin을 부여합니다. 공개 접근 방지 등 다른 제어가 접근을 차단하지 않으면 필요한 범위를 크게 넘는 공개 권한이 될 수 있습니다.
변경 후
hcl
resource "google_storage_bucket_iam_binding" "restricted_binding" {
bucket = google_storage_bucket.default.name
role = "roles/storage.admin"
members = [
"user:jane@example.com",
]
}
공개 주체를 제거하고 특정 사용자만 남깁니다. 이 사용자에게도 roles/storage.admin이 계속 부여되므로 업무에 필요한 역할인지 확인하고 가능하면 더 좁은 역할을 사용하세요.