instance_profile.tf 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. module "instance_profile" {
  2. source = "../../submodules/iam/base_instance_profile"
  3. prefix = "vault"
  4. aws_partition = var.aws_partition
  5. aws_account_id = var.aws_account_id
  6. }
  7. #resource "aws_iam_instance_profile" "vault_instance_profile" {
  8. # name = "vault-instance-profile"
  9. # role = aws_iam_role.vault.name
  10. #}
  11. #
  12. #resource "aws_iam_role" "vault" {
  13. # name = "vault-instance-role"
  14. #
  15. # assume_role_policy = <<EOF
  16. #{
  17. # "Version": "2012-10-17",
  18. # "Statement": [
  19. # {
  20. # "Sid": "",
  21. # "Effect": "Allow",
  22. # "Principal": {
  23. # "Service": [
  24. # "ec2.amazonaws.com",
  25. # "ssm.amazonaws.com"
  26. # ]
  27. # },
  28. # "Action": "sts:AssumeRole"
  29. # }
  30. # ]
  31. # }
  32. #EOF
  33. #}
  34. #-------------------------------
  35. # KMS Policy
  36. #-------------------------------
  37. data "aws_iam_policy_document" "vault_kms_key_policy" {
  38. statement {
  39. sid = "KMSAutoUnseal"
  40. effect = "Allow"
  41. actions = [
  42. "kms:Encrypt",
  43. "kms:Decrypt",
  44. "kms:DescribeKey",
  45. ]
  46. resources = [
  47. aws_kms_key.vault.arn,
  48. ]
  49. }
  50. statement {
  51. sid = "Tags"
  52. effect = "Allow"
  53. actions = [
  54. "ec2:DescribeTags",
  55. "ec2:DescribeInstances"
  56. ]
  57. resources = [
  58. "*"
  59. ]
  60. }
  61. }
  62. resource "aws_iam_policy" "vault_kms_key_policy" {
  63. name = "vault_kms"
  64. path = "/"
  65. policy = data.aws_iam_policy_document.vault_kms_key_policy.json
  66. }
  67. resource "aws_iam_role_policy_attachment" "vault_kms" {
  68. role = module.instance_profile.role_id
  69. policy_arn = aws_iam_policy.vault_kms_key_policy.arn
  70. }
  71. #------------------------------
  72. # DynamoDB
  73. #------------------------------
  74. data "aws_iam_policy_document" "vault_dynamodb_policy" {
  75. statement {
  76. sid = "AllowVaultCommunicationtoDynamoDB"
  77. effect = "Allow"
  78. actions = [
  79. "dynamodb:DescribeLimits",
  80. "dynamodb:DescribeTimeToLive",
  81. "dynamodb:ListTagsOfResource",
  82. "dynamodb:DescribeReservedCapacityOfferings",
  83. "dynamodb:DescribeReservedCapacity",
  84. "dynamodb:ListTables",
  85. "dynamodb:BatchGetItem",
  86. "dynamodb:BatchWriteItem",
  87. "dynamodb:CreateTable",
  88. "dynamodb:DeleteItem",
  89. "dynamodb:GetItem",
  90. "dynamodb:GetRecords",
  91. "dynamodb:PutItem",
  92. "dynamodb:Query",
  93. "dynamodb:UpdateItem",
  94. "dynamodb:Scan",
  95. "dynamodb:DescribeTable",
  96. ]
  97. resources = [aws_dynamodb_table.vault.arn]
  98. }
  99. }
  100. resource "aws_iam_policy" "vault_dynamodb_policy" {
  101. name = "vault_dynamodb"
  102. path = "/"
  103. policy = data.aws_iam_policy_document.vault_dynamodb_policy.json
  104. }
  105. resource "aws_iam_role_policy_attachment" "vault_dynamodb" {
  106. role = module.instance_profile.role_id
  107. policy_arn = aws_iam_policy.vault_dynamodb_policy.arn
  108. }
  109. # ---------------------------------------------------------------------------------------------------------------------
  110. # IAM Policy for EC2 AppRole Authentication
  111. # ---------------------------------------------------------------------------------------------------------------------
  112. data "aws_iam_policy_document" "vault_approle" {
  113. statement {
  114. sid = "AllowVaultIAMMetaData"
  115. effect = "Allow"
  116. actions = [
  117. "iam:GetInstanceProfile",
  118. "iam:GetRole"
  119. ]
  120. # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
  121. resources = ["*"]
  122. }
  123. }
  124. resource "aws_iam_policy" "vault_approle_policy" {
  125. name = "vault_approle"
  126. path = "/"
  127. policy = data.aws_iam_policy_document.vault_approle.json
  128. }
  129. resource "aws_iam_role_policy_attachment" "vault_approle" {
  130. role = module.instance_profile.role_id
  131. policy_arn = aws_iam_policy.vault_approle_policy.arn
  132. }