98 lines
2.7 KiB
HCL
98 lines
2.7 KiB
HCL
data "scaleway_account_project" "project" {
|
|
project_id = "${var.scaleway_project_id}"
|
|
}
|
|
|
|
resource "scaleway_account_ssh_key" "default" {
|
|
name = var.default_ssh_key.name
|
|
public_key = var.default_ssh_key.public_key
|
|
}
|
|
|
|
data "scaleway_iam_user" "serguzim" {
|
|
email = "tobias@msrg.cc"
|
|
}
|
|
|
|
locals {
|
|
service_buckets = {for key, val in var.services : key => val if val.bucket}
|
|
}
|
|
|
|
resource "scaleway_iam_application" "service_applications" {
|
|
for_each = local.service_buckets
|
|
name = each.value.name
|
|
}
|
|
|
|
resource "scaleway_iam_policy" "service_storage_policies" {
|
|
for_each = local.service_buckets
|
|
name = "${each.key}_storage_policy"
|
|
application_id = scaleway_iam_application.service_applications[each.key].id
|
|
rule {
|
|
project_ids = [data.scaleway_account_project.project.id]
|
|
permission_set_names = ["ObjectStorageFullAccess"]
|
|
}
|
|
}
|
|
|
|
resource "scaleway_object_bucket" "service_buckets" {
|
|
for_each = local.service_buckets
|
|
name = "${each.value.name}.serguzim.me"
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "scaleway_object_bucket_policy" "service_bucket_policies" {
|
|
for_each = local.service_buckets
|
|
bucket = scaleway_object_bucket.service_buckets[each.key].id
|
|
policy = jsonencode({
|
|
Version = "2023-04-17",
|
|
Id = "${each.key}_bucket_policy",
|
|
Statement = [
|
|
{
|
|
Sid = "Scaleway secure statement"
|
|
Effect = "Allow"
|
|
Action = "*"
|
|
Principal = {
|
|
SCW = "user_id:${data.scaleway_iam_user.serguzim.id}"
|
|
}
|
|
Resource = [
|
|
"${scaleway_object_bucket.service_buckets[each.key].name}",
|
|
"${scaleway_object_bucket.service_buckets[each.key].name}/*",
|
|
]
|
|
},
|
|
{
|
|
Sid = "${each.key} statement"
|
|
Effect = "Allow"
|
|
Action = "*"
|
|
Principal = {
|
|
SCW = "application_id:${scaleway_iam_application.service_applications[each.key].id}"
|
|
}
|
|
Resource = [
|
|
"${scaleway_object_bucket.service_buckets[each.key].name}",
|
|
"${scaleway_object_bucket.service_buckets[each.key].name}/*",
|
|
]
|
|
},
|
|
]
|
|
})
|
|
}
|
|
|
|
resource "time_rotating" "rotate_after_a_year" {
|
|
rotation_years = 1
|
|
}
|
|
|
|
resource "scaleway_iam_api_key" "service_keys" {
|
|
for_each = local.service_buckets
|
|
description = "Service key for ${each.key}"
|
|
application_id = scaleway_iam_application.service_applications[each.key].id
|
|
expires_at = time_rotating.rotate_after_a_year.rotation_rfc3339
|
|
}
|
|
|
|
|
|
resource "scaleway_registry_namespace" "public" {
|
|
name = "public.serguzim.net"
|
|
description = "Public container registry for serguzim.net"
|
|
is_public = true
|
|
}
|
|
|
|
resource "scaleway_registry_namespace" "private" {
|
|
name = "private.serguzim.net"
|
|
description = "Private container registry for serguzim.net"
|
|
is_public = false
|
|
}
|