main.tf 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. locals {
  2. action_runner_distribution_object_key = "actions-runner-${var.runner_os}.${var.runner_os == "linux" ? "tar.gz" : "zip"}"
  3. }
  4. resource "aws_s3_bucket" "action_dist" {
  5. bucket = var.distribution_bucket_name
  6. force_destroy = true
  7. tags = var.tags
  8. }
  9. resource "aws_s3_bucket_acl" "action_dist_acl" {
  10. bucket = aws_s3_bucket.action_dist.id
  11. acl = "private"
  12. }
  13. resource "aws_s3_bucket_lifecycle_configuration" "bucket-config" {
  14. bucket = aws_s3_bucket.action_dist.id
  15. rule {
  16. id = "lifecycle_config"
  17. status = "Enabled"
  18. abort_incomplete_multipart_upload {
  19. days_after_initiation = 7
  20. }
  21. transition {
  22. days = 35
  23. storage_class = "INTELLIGENT_TIERING"
  24. }
  25. }
  26. }
  27. resource "aws_s3_bucket_server_side_encryption_configuration" "action_dist" {
  28. bucket = aws_s3_bucket.action_dist.id
  29. count = try(var.server_side_encryption_configuration, null) != null ? 1 : 0
  30. dynamic "rule" {
  31. for_each = [lookup(var.server_side_encryption_configuration, "rule", {})]
  32. content {
  33. bucket_key_enabled = lookup(rule.value, "bucket_key_enabled", null)
  34. dynamic "apply_server_side_encryption_by_default" {
  35. for_each = length(keys(lookup(rule.value, "apply_server_side_encryption_by_default", {}))) == 0 ? [] : [
  36. lookup(rule.value, "apply_server_side_encryption_by_default", {})]
  37. content {
  38. sse_algorithm = apply_server_side_encryption_by_default.value.sse_algorithm
  39. kms_master_key_id = lookup(apply_server_side_encryption_by_default.value, "kms_master_key_id", null)
  40. }
  41. }
  42. }
  43. }
  44. }
  45. resource "aws_s3_bucket_public_access_block" "action_dist" {
  46. bucket = aws_s3_bucket.action_dist.id
  47. block_public_acls = true
  48. block_public_policy = true
  49. ignore_public_acls = true
  50. restrict_public_buckets = true
  51. }
  52. data "aws_iam_policy_document" "action_dist_sse_policy" {
  53. count = try(var.server_side_encryption_configuration.rule.apply_server_side_encryption_by_default, null) != null ? 1 : 0
  54. statement {
  55. effect = "Deny"
  56. principals {
  57. type = "AWS"
  58. identifiers = [
  59. "*",
  60. ]
  61. }
  62. actions = [
  63. "s3:PutObject",
  64. ]
  65. resources = [
  66. "${aws_s3_bucket.action_dist.arn}/*",
  67. ]
  68. condition {
  69. test = "StringNotEquals"
  70. variable = "s3:x-amz-server-side-encryption"
  71. values = [var.server_side_encryption_configuration.rule.apply_server_side_encryption_by_default.sse_algorithm]
  72. }
  73. }
  74. }
  75. resource "aws_s3_bucket_policy" "action_dist_sse_policy" {
  76. count = try(var.server_side_encryption_configuration.rule.apply_server_side_encryption_by_default, null) != null ? 1 : 0
  77. bucket = aws_s3_bucket.action_dist.id
  78. policy = data.aws_iam_policy_document.action_dist_sse_policy[0].json
  79. }