# Универсальный модуль для создания S3 бакетов locals { buckets_map = { for bucket in var.buckets : bucket.name => bucket } } # Создание сервисного аккаунта для каждого бакета resource "yandex_iam_service_account" "sa" { for_each = local.buckets_map name = "${each.key}-sa" description = "Service account for ${each.key} bucket" } # Назначение роли storage.editor сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "storage_editor" { for_each = local.buckets_map folder_id = var.folder_id role = "storage.editor" member = "serviceAccount:${yandex_iam_service_account.sa[each.key].id}" } # Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa_key" { for_each = local.buckets_map service_account_id = yandex_iam_service_account.sa[each.key].id description = "Static access key for ${each.key} bucket" } # Создание S3 бакета resource "yandex_storage_bucket" "this" { for_each = local.buckets_map bucket = each.key acl = each.value.acl # Версионирование объектов dynamic "versioning" { for_each = try(each.value.versioning.enabled, false) ? [1] : [] content { enabled = true } } # Настройка CORS dynamic "cors_rule" { for_each = try(each.value.cors.enabled, false) ? [1] : [] content { allowed_headers = try(each.value.cors.allowed_headers, []) allowed_methods = try(each.value.cors.allowed_methods, []) allowed_origins = try(each.value.cors.allowed_origins, []) expose_headers = try(each.value.cors.expose_headers, []) max_age_seconds = try(each.value.cors.max_age_seconds, 3600) } } }