72 lines
1.8 KiB
Terraform
72 lines
1.8 KiB
Terraform
resource "minio_s3_bucket" "this" {
|
|
for_each = var.service.buckets
|
|
bucket = each.key
|
|
acl = "private"
|
|
}
|
|
|
|
resource "minio_s3_bucket_versioning" "this" {
|
|
for_each = { for name, b in var.service.buckets : name => b if b.versioning }
|
|
bucket = minio_s3_bucket.this[each.key].bucket
|
|
|
|
versioning_configuration {
|
|
status = "Enabled"
|
|
}
|
|
}
|
|
|
|
resource "minio_ilm_policy" "this" {
|
|
for_each = var.service.buckets
|
|
bucket = minio_s3_bucket.this[each.key].bucket
|
|
|
|
rule {
|
|
id = "clean-rule-1"
|
|
status = "Enabled"
|
|
dynamic "noncurrent_expiration" {
|
|
for_each = each.value.versioning ? [1] : []
|
|
content {
|
|
days = "${each.value.noncurrent_days}d"
|
|
}
|
|
}
|
|
expired_object_delete_marker = each.value.versioning
|
|
abort_incomplete_multipart_upload {
|
|
days_after_initiation = "3d"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "minio_iam_user" "this" {
|
|
name = var.service.name
|
|
}
|
|
|
|
resource "minio_iam_policy" "get_upd_del_policy" {
|
|
name = var.service.name
|
|
policy = jsonencode({
|
|
Version = "2012-10-17"
|
|
Statement = [{
|
|
Effect = "Allow",
|
|
Action = ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
|
|
Resource = [
|
|
for bucket in minio_s3_bucket.this : "arn:aws:s3:::${bucket.bucket}/*"
|
|
]
|
|
},
|
|
{
|
|
Effect = "Allow",
|
|
Action = ["s3:ListBucket"],
|
|
Resource = [
|
|
for bucket in minio_s3_bucket.this : "arn:aws:s3:::${bucket.bucket}"
|
|
]
|
|
}]
|
|
})
|
|
}
|
|
|
|
resource "minio_iam_user_policy_attachment" "this" {
|
|
user_name = minio_iam_user.this.name
|
|
policy_name = minio_iam_policy.get_upd_del_policy.name
|
|
}
|
|
|
|
resource "minio_iam_service_account" "this" {
|
|
target_user = minio_iam_user.this.name
|
|
description = "keys of ${var.service.name}"
|
|
|
|
depends_on = [minio_iam_user_policy_attachment.this]
|
|
}
|