crl.tf 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. # tfsec:ignore:aws-s3-block-public-acls
  2. # tfsec:ignore:aws-s3-specify-public-access-block
  3. # tfsec:ignore:aws-s3-block-public-policy
  4. # tfsec:ignore:aws-s3-ignore-public-acls
  5. # tfsec:ignore:aws-s3-no-public-buckets Certificate CRLs need to be publicly accessible
  6. # tfsec:ignore:aws-s3-enable-bucket-logging TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  7. resource "aws_s3_bucket" "crl" {
  8. # checkov:skip=CKV_AWS_145: Risk is low for AES-256 encryption
  9. # checkov:skip=CKV2_AWS_6: see tfsec S3 block policy
  10. # checkov:skip=CKV_AWS_18: see tfsec S3 logging above
  11. provider = aws.common # COMMON SERVICES
  12. bucket = "xdr-subordinate-crl"
  13. tags = merge(local.standard_tags, var.tags)
  14. }
  15. # CRLs are small, but regenerated every expiration/2 days, (every 3.5 days by default), so there will be a good number of versions
  16. resource "aws_s3_bucket_versioning" "s3_version_subordinate_crl" {
  17. provider = aws.common
  18. bucket = aws_s3_bucket.crl.id
  19. versioning_configuration {
  20. status = "Enabled"
  21. }
  22. }
  23. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  24. # resource "aws_s3_bucket_logging" "log_bucket_audit_reports" {
  25. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  26. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  27. #}
  28. resource "aws_s3_bucket_lifecycle_configuration" "s3_lifecyle_subordinate_crl" {
  29. provider = aws.common
  30. bucket = aws_s3_bucket.crl.id
  31. rule {
  32. id = "CleanUp"
  33. status = "Enabled"
  34. abort_incomplete_multipart_upload {
  35. days_after_initiation = 7
  36. }
  37. # Clean up old versions after a year
  38. noncurrent_version_expiration {
  39. noncurrent_days = 365
  40. }
  41. }
  42. }
  43. # tfsec:ignore:aws-s3-encryption-customer-key Risk is low for AES-256 encryption
  44. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_subordinate_crl" {
  45. provider = aws.common
  46. bucket = aws_s3_bucket.crl.id
  47. rule {
  48. apply_server_side_encryption_by_default {
  49. sse_algorithm = "AES256"
  50. }
  51. }
  52. }
  53. data "aws_iam_policy_document" "acmpca_bucket_access" {
  54. statement {
  55. actions = [
  56. "s3:GetBucketAcl",
  57. "s3:GetBucketLocation",
  58. "s3:PutObject",
  59. "s3:PutObjectAcl",
  60. ]
  61. resources = [
  62. aws_s3_bucket.crl.arn,
  63. "${aws_s3_bucket.crl.arn}/*",
  64. ]
  65. principals {
  66. identifiers = ["acm-pca.amazonaws.com"]
  67. type = "Service"
  68. }
  69. }
  70. }
  71. resource "aws_s3_bucket_policy" "crl" {
  72. provider = aws.common # COMMON SERVICES
  73. bucket = aws_s3_bucket.crl.id
  74. policy = data.aws_iam_policy_document.acmpca_bucket_access.json
  75. }
  76. # Publicly available CRL so clients can validate
  77. # resource "aws_s3_bucket_public_access_block" "crl_bucket_block_public_access" {
  78. # provider = aws.common # COMMON SERVICES
  79. # bucket = aws_s3_bucket.crl.id
  80. # block_public_acls = false # Not supported for CRLs, see https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-error-crl-acm-ca/
  81. # block_public_policy = true
  82. # ignore_public_acls = true
  83. # restrict_public_buckets = true
  84. # depends_on = [ aws_s3_bucket.crl ]
  85. #}
  86. //AWS Provider outdated arguments <4.4.0
  87. /*resource "aws_s3_bucket" "crl" {
  88. provider = aws.common # COMMON SERVICES
  89. bucket = "xdr-subordinate-crl"
  90. # CRLs are small, but regenerated every expiration/2 days, (every 3.5 days by default), so there will be a good number of versions
  91. versioning {
  92. enabled = true
  93. }
  94. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  95. #logging {
  96. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  97. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  98. #}
  99. lifecycle_rule {
  100. id = "CleanUp"
  101. enabled = true
  102. abort_incomplete_multipart_upload_days = 7
  103. # Clean up old versions after a year
  104. noncurrent_version_expiration {
  105. days = 365
  106. }
  107. }
  108. server_side_encryption_configuration {
  109. rule {
  110. apply_server_side_encryption_by_default {
  111. sse_algorithm = "AES256" # Default keys are fine. We don't really need encryption here.
  112. }
  113. }
  114. }
  115. tags = merge(local.standard_tags, var.tags)
  116. }
  117. */