Google Cloud Storage 버킷 인벤토리

버킷의 용도와 접근 권한을 함께 기록하세요.

설명

Cloud Storage 버킷 목록은 저장 데이터의 용도와 관리 책임을 정리하는 자료입니다. 버킷의 존재 자체는 취약점이 아니며, 저장 데이터는 별도 암호화 블록이 없어도 기본적으로 암호화됩니다.

잠재적 영향

공개 접근이 불필요한 버킷에 넓은 권한을 부여하면 데이터가 노출되거나 변경될 수 있습니다. 불완전한 인벤토리는 이런 설정을 놓치게 할 수 있습니다.

해결 방법

버킷의 책임자를 기록하고 ACL과 IAM에서 allUsers, allAuthenticatedUsers 권한이 필요한지 확인하세요. 암호화 키 관리와 보존 정책도 용도에 맞게 검토하세요.

예시

공개 멤버를 사용한 구성과 지정 그룹에 읽기 권한을 주는 구성의 발췌입니다. 변수와 리소스 참조에는 실제 KMS 키의 전체 식별자를 사용하고 키 권한을 별도로 설정하세요.

변경 전

hcl
resource "google_storage_bucket_access_control" "public_rule" {
  bucket = google_storage_bucket.bucket.name
  role   = "READER"
  entity = "allUsers"
}

resource "google_storage_bucket" "bucket" {
  name     = "static-content-bucket"
  location = "US"
}

resource "google_storage_bucket_iam_binding" "binding" {
  bucket = google_storage_bucket.bucket2.name
  role   = "roles/storage.admin"
  members = [
    "allUsers",
  ]
}

resource "google_storage_bucket" "bucket2" {
  name     = "static-content-bucket-2"
  location = "US"

  encryption {
    default_kms_key_name = var.bucket_kms_key
  }
}

변경 후

hcl
resource "google_storage_bucket" "logs_bucket" {
  name     = "team-app-logs-prod"
  location = "US"

  uniform_bucket_level_access = true

  encryption {
    default_kms_key_name = google_kms_crypto_key.bucket_key.id
  }

  labels = {
    service = "app"
    env     = "prod"
  }
}

resource "google_storage_bucket_iam_member" "ops_reader" {
  bucket = google_storage_bucket.logs_bucket.name
  role   = "roles/storage.objectViewer"
  member = "group:ops@example.com"
}

참조