crl.tf 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. resource "aws_s3_bucket" "crl" {
  2. bucket = "xdr-root-crl"
  3. tags = merge(var.standard_tags, var.tags)
  4. }
  5. # CRLs are small, but regenerated every expiration/2 days, (every 3.5 days by default), so there will be a good number of versions
  6. resource "aws_s3_bucket_versioning" "s3_version_crl" {
  7. bucket = aws_s3_bucket.crl.id
  8. versioning_configuration {
  9. status = "Enabled"
  10. }
  11. }
  12. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  13. #resource "aws_s3_bucket_logging" "log_bucket_audit_reports" {
  14. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  15. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  16. #}
  17. resource "aws_s3_bucket_lifecycle_configuration" "s3_lifecyle_crl" {
  18. bucket = aws_s3_bucket.crl.id
  19. rule {
  20. id = "CleanUp"
  21. status = "Enabled"
  22. abort_incomplete_multipart_upload {
  23. days_after_initiation = 7
  24. }
  25. noncurrent_version_expiration {
  26. noncurrent_days = 365
  27. }
  28. }
  29. }
  30. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_crl" {
  31. bucket = aws_s3_bucket.crl.id
  32. rule {
  33. apply_server_side_encryption_by_default {
  34. sse_algorithm = "AES256" # Default keys are fine. We don't really need encryption here.
  35. }
  36. }
  37. }
  38. data "aws_iam_policy_document" "acmpca_bucket_access" {
  39. statement {
  40. actions = [
  41. "s3:GetBucketAcl",
  42. "s3:GetBucketLocation",
  43. "s3:PutObject",
  44. "s3:PutObjectAcl",
  45. ]
  46. resources = [
  47. aws_s3_bucket.crl.arn,
  48. "${aws_s3_bucket.crl.arn}/*",
  49. ]
  50. principals {
  51. identifiers = ["acm-pca.amazonaws.com"]
  52. type = "Service"
  53. }
  54. # TODO: Consider restricting this to the account, but may need to add Get permissions?
  55. # "Condition":{
  56. # "StringEquals":{
  57. # "aws:SourceAccount":"account",
  58. # "aws:SourceArn":"arn:partition:acm-pca:region:account:certificate-authority/CA-ID"
  59. # }
  60. # }
  61. }
  62. }
  63. resource "aws_s3_bucket_policy" "crl" {
  64. bucket = aws_s3_bucket.crl.id
  65. policy = data.aws_iam_policy_document.acmpca_bucket_access.json
  66. }
  67. # We want the CRL publicly accessible for zero trust websites and such.
  68. #resource "aws_s3_bucket_public_access_block" "crl_bucket_block_public_access" {
  69. # bucket = aws_s3_bucket.crl.id
  70. # block_public_acls = false # Not supported for CRLs, see https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-error-crl-acm-ca/
  71. # block_public_policy = true
  72. # ignore_public_acls = true
  73. # restrict_public_buckets = true
  74. # depends_on = [ aws_s3_bucket.crl ]
  75. #}
  76. //AWS Provider outdated arguments <4.4.0
  77. /*resource "aws_s3_bucket" "crl" {
  78. bucket = "xdr-root-crl"
  79. # CRLs are small, but regenerated every expiration/2 days, (every 3.5 days by default), so there will be a good number of versions
  80. versioning {
  81. enabled = true
  82. }
  83. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  84. #logging {
  85. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  86. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  87. #}
  88. lifecycle_rule {
  89. id = "CleanUp"
  90. enabled = true
  91. abort_incomplete_multipart_upload_days = 7
  92. # Clean up old versions after a year
  93. noncurrent_version_expiration {
  94. days = 365
  95. }
  96. }
  97. server_side_encryption_configuration {
  98. rule {
  99. apply_server_side_encryption_by_default {
  100. sse_algorithm = "AES256" # Default keys are fine. We don't really need encryption here.
  101. }
  102. }
  103. }
  104. tags = merge(var.standard_tags, var.tags)
  105. }
  106. */