87 lines
3.1 KiB
HCL
87 lines
3.1 KiB
HCL
resource "scaleway_object_bucket" "s3_buckets" {
|
|
for_each = (var.buckets_list == null) ? {} : { for b in var.buckets_list : b.bucket_name => b }
|
|
|
|
name = each.value.bucket_name
|
|
tags = each.value.bucket_tags
|
|
region = each.value.bucket_region
|
|
project_id = var.project_id
|
|
versioning {
|
|
enabled = each.value.bucket_versioning
|
|
}
|
|
|
|
/* Dans cette section, on ajoute un bloc lifecycle_rule pour chaque
|
|
élément présent dans la liste lifecycle_rules de l'objet buckets.
|
|
*/
|
|
dynamic "lifecycle_rule" {
|
|
for_each = each.value.bucket_lifecycle_rules
|
|
content {
|
|
id = lifecycle_rule.value["id"]
|
|
prefix = lifecycle_rule.value["prefix"]
|
|
enabled = lifecycle_rule.value["enabled"]
|
|
tags = lifecycle_rule.value["tags"]
|
|
/* On ajoute les blocs expiration ou transition en fonction
|
|
de la présence ou non des variables expiration_days,
|
|
transition_days et transition_sc. Au moins l'un de ces blocs
|
|
est obligatoire pour que la règle soit valide.
|
|
*/
|
|
dynamic "expiration" {
|
|
for_each = lifecycle_rule.value["expiration_days"] == null ? [] : [1]
|
|
content {
|
|
days = lifecycle_rule.value["expiration_days"]
|
|
}
|
|
}
|
|
dynamic "transition" {
|
|
for_each = (lifecycle_rule.value["transition_days"] == null) && (lifecycle_rule.value["transition_sc"] == null) ? [] : [1]
|
|
content {
|
|
days = lifecycle_rule.value["transition_days"]
|
|
storage_class = lifecycle_rule.value["transition_sc"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
depends_on = [
|
|
scaleway_iam_api_key.keys
|
|
]
|
|
}
|
|
|
|
resource "scaleway_object_bucket_policy" "s3_policies" {
|
|
for_each = (var.buckets_list == null) ? {} : { for b in var.buckets_list : b.bucket_name => b }
|
|
|
|
bucket = each.value.bucket_name
|
|
policy = jsonencode({
|
|
Version = "2023-04-17",
|
|
Id = "${each.value.bucket_name}",
|
|
Statement = [
|
|
{
|
|
Sid = "RW-${each.value.bucket_name}",
|
|
Effect = "Allow",
|
|
Principal = {
|
|
SCW = "application_id:${scaleway_iam_application.apps.id}"
|
|
},
|
|
Action = "${each.value.bucket_policy_actions}",
|
|
Resource = [
|
|
"${each.value.bucket_name}",
|
|
"${each.value.bucket_name}/*"
|
|
],
|
|
},
|
|
{
|
|
Sid = "Admin-${each.value.bucket_name}",
|
|
Effect = "Allow",
|
|
Principal = {
|
|
SCW = var.admins_user_id
|
|
},
|
|
Action = "s3:*",
|
|
Resource = [
|
|
"${each.value.bucket_name}",
|
|
"${each.value.bucket_name}/*"
|
|
],
|
|
}
|
|
]
|
|
})
|
|
|
|
depends_on = [
|
|
scaleway_object_bucket.s3_buckets
|
|
]
|
|
}
|