iam.tf 3.5 KB

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