main.tf 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. resource "aws_iam_role" "this" {
  2. name = var.name
  3. path = "/service/"
  4. force_detach_policies = true # causes "DeleteConflict" if not present
  5. tags = merge(var.standard_tags, var.tags)
  6. assume_role_policy = <<EOF
  7. {
  8. "Version": "2012-10-17",
  9. "Statement": [
  10. {
  11. "Effect": "Allow",
  12. "Principal": {
  13. "AWS": ${jsonencode(var.trusted_arns)}
  14. },
  15. "Action": "sts:AssumeRole"
  16. }
  17. ]
  18. }
  19. EOF
  20. }
  21. resource "aws_iam_role_policy_attachment" "this" {
  22. role = aws_iam_role.this.name
  23. policy_arn = aws_iam_policy.this.arn
  24. }
  25. resource "aws_iam_policy" "this" {
  26. name = var.name
  27. path = "/service/"
  28. description = var.description
  29. policy = length(var.kms_key_ids) == 0 ? data.aws_iam_policy_document.base_policy.json : data.aws_iam_policy_document.kms_policy.json
  30. tags = merge(var.standard_tags, var.tags)
  31. }
  32. data "aws_iam_policy_document" "base_policy" {
  33. statement {
  34. sid = "ReadTheBucket"
  35. effect = "Allow"
  36. resources = [
  37. var.bucket
  38. ]
  39. actions = [
  40. "s3:ListBucket",
  41. "s3:GetBucketLocation",
  42. "s3:ListBucketMultipartUploads",
  43. "s3:ListBucketVersions",
  44. ]
  45. }
  46. statement {
  47. sid = "ModifyBucketObjects"
  48. effect = "Allow"
  49. resources = [
  50. "${var.bucket}/*"
  51. ]
  52. actions = [
  53. "s3:GetObject",
  54. "s3:DeleteObject",
  55. "s3:AbortMultipartUpload",
  56. "s3:ListMultipartUploadParts",
  57. ]
  58. }
  59. statement {
  60. sid = "RequireWritesToGiveBucketOwnerControl"
  61. effect = "Allow"
  62. resources = [
  63. "${var.bucket}/*"
  64. ]
  65. actions = [
  66. "s3:PutObject"
  67. ]
  68. condition {
  69. test = "StringEquals"
  70. variable = "s3:x-amz-acl"
  71. values = ["bucket-owner-full-control"]
  72. }
  73. }
  74. }
  75. data "aws_iam_policy_document" "kms_policy" {
  76. source_json = data.aws_iam_policy_document.base_policy.json
  77. statement {
  78. sid = "UseTheKMSKey"
  79. effect = "Allow"
  80. resources = var.kms_key_ids
  81. actions = [
  82. "kms:GenerateDataKey",
  83. "kms:Encrypt",
  84. "kms:Decrypt",
  85. "kms:DescribeKey"
  86. ]
  87. }
  88. }