s3.tf 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. locals {
  2. bucket_name = "xdr-${var.environment}-codebuild-portal-data-sync"
  3. accounts = [var.aws_account_id]
  4. account_arns = [for a in local.accounts : "arn:${var.aws_partition}:iam::${a}:root"]
  5. }
  6. #S3 bucket for codebuild output
  7. resource "aws_s3_bucket" "bucket" {
  8. bucket = local.bucket_name
  9. force_destroy = true
  10. acl = "private"
  11. tags = merge(var.standard_tags, var.tags)
  12. versioning {
  13. enabled = false
  14. }
  15. server_side_encryption_configuration {
  16. rule {
  17. apply_server_side_encryption_by_default {
  18. kms_master_key_id = aws_kms_key.s3_codebuild.arn
  19. sse_algorithm = "aws:kms"
  20. }
  21. }
  22. }
  23. }
  24. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  25. bucket = aws_s3_bucket.bucket.id
  26. block_public_acls = true
  27. block_public_policy = true
  28. ignore_public_acls = true
  29. restrict_public_buckets = true
  30. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  31. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  32. depends_on = [aws_s3_bucket_policy.artifacts]
  33. }
  34. resource "aws_s3_bucket_policy" "artifacts" {
  35. bucket = aws_s3_bucket.bucket.id
  36. policy = data.aws_iam_policy_document.artifacts.json
  37. }
  38. data "aws_iam_policy_document" "artifacts" {
  39. statement {
  40. sid = "AllowS3Access"
  41. actions = [ "s3:GetObject", "s3:GetObjectVersion" ]
  42. effect = "Allow"
  43. resources = [ "${aws_s3_bucket.bucket.arn}/*" ]
  44. principals {
  45. type = "AWS"
  46. identifiers = local.account_arns
  47. }
  48. }
  49. }