s3.tf 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. tags = merge(local.standard_tags, var.tags)
  11. }
  12. resource "aws_s3_bucket_acl" "s3_acl_bucket" {
  13. bucket = aws_s3_bucket.bucket.id
  14. acl = "private"
  15. }
  16. resource "aws_s3_bucket_versioning" "s3_version_bucket" {
  17. bucket = aws_s3_bucket.bucket.id
  18. versioning_configuration {
  19. status = "Suspended"
  20. }
  21. }
  22. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_bucket" {
  23. bucket = aws_s3_bucket.bucket.id
  24. rule {
  25. apply_server_side_encryption_by_default {
  26. kms_master_key_id = aws_kms_key.s3_codebuild.arn
  27. sse_algorithm = "aws:kms"
  28. }
  29. }
  30. }
  31. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  32. bucket = aws_s3_bucket.bucket.id
  33. block_public_acls = true
  34. block_public_policy = true
  35. ignore_public_acls = true
  36. restrict_public_buckets = true
  37. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  38. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  39. depends_on = [aws_s3_bucket_policy.artifacts]
  40. }
  41. resource "aws_s3_bucket_policy" "artifacts" {
  42. bucket = aws_s3_bucket.bucket.id
  43. policy = data.aws_iam_policy_document.artifacts.json
  44. }
  45. data "aws_iam_policy_document" "artifacts" {
  46. statement {
  47. sid = "AllowS3Access"
  48. actions = ["s3:GetObject", "s3:GetObjectVersion"]
  49. effect = "Allow"
  50. resources = ["${aws_s3_bucket.bucket.arn}/*"]
  51. principals {
  52. type = "AWS"
  53. identifiers = local.account_arns
  54. }
  55. }
  56. }