1
-
1
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key
2
2
resource "aws_kms_key" "encryption_secret" {
3
3
enable_key_rotation = true
4
4
description = " Key to encrypt secret"
5
5
deletion_window_in_days = 7
6
-
7
- # Attach the KMS key policy
6
+ tags = {
7
+ Name = " ${ var . name } -encryption-secret"
8
+ }
9
+ }
10
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_alias
11
+ resource "aws_kms_alias" "encryption_secret" {
12
+ name = " alias/${ var . name } -elasticache-in-transit"
13
+ target_key_id = aws_kms_key. encryption_secret . key_id
14
+ }
15
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key_policy
16
+ resource "aws_kms_key_policy" "encryption_secret_policy" {
17
+ key_id = aws_kms_key. encryption_secret . id
8
18
policy = jsonencode ({
9
- Version = " 2012-10-17 "
19
+ Id = " ${ var . name } -encryption-secret "
10
20
Statement = [
11
21
{
12
- Sid = " AllowSecretsManagerUse"
13
- Effect = " Allow"
14
22
Action = [
15
- " kms:Encrypt" ,
16
- " kms:Decrypt" ,
17
- " kms:ReEncrypt*" ,
18
- " kms:GenerateDataKey*"
23
+ " kms:Create*" ,
24
+ " kms:Describe*" ,
25
+ " kms:Enable*" ,
26
+ " kms:List*" ,
27
+ " kms:Put*" ,
28
+ " kms:Update*" ,
29
+ " kms:Revoke*" ,
30
+ " kms:Disable*" ,
31
+ " kms:Get*" ,
32
+ " kms:Delete*" ,
33
+ " kms:ScheduleKeyDeletion" ,
34
+ " kms:CancelKeyDeletion"
19
35
]
20
- Resource = " * "
36
+ Effect = " Allow "
21
37
Principal = {
22
- Service = " secretsmanager.amazonaws.com "
38
+ AWS = " ${ local . principal_root_arn } "
23
39
}
24
- },
25
- {
26
- Sid = " AllowAdminAccessToKMSKey"
27
- Effect = " Allow"
28
- Action = " kms:*"
29
40
Resource = " *"
30
- Principal = {
31
- AWS = " *"
41
+ Sid = " Enable IAM User Permissions"
42
+ Condition = {
43
+ StringEquals = {
44
+ " kms:CallerAccount" = " ${ data . aws_caller_identity . current . account_id } "
45
+ }
32
46
}
33
47
},
34
48
{
35
- Sid = " AllowIAMRolesToUseKey "
49
+ Sid = " AllowSecretsManagerUse "
36
50
Effect = " Allow"
37
51
Action = [
38
52
" kms:Encrypt" ,
@@ -42,26 +56,13 @@ resource "aws_kms_key" "encryption_secret" {
42
56
]
43
57
Resource = " *"
44
58
Principal = {
45
- AWS = " *"
46
- }
47
- Condition = {
48
- StringEquals = {
49
- " kms:CallerAccount" = " ${ data . aws_caller_identity . current . account_id } "
50
- }
59
+ Service = " secretsmanager.amazonaws.com"
51
60
}
52
61
}
53
62
]
54
63
})
55
-
56
- tags = {
57
- Name = " ${ var . name } -encryption-secret"
58
- }
59
- }
60
-
61
- resource "aws_kms_alias" "encryption_secret" {
62
- name = " alias/${ var . name } -elasticache-in-transit"
63
- target_key_id = aws_kms_key. encryption_secret . key_id
64
64
}
65
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key
65
66
resource "aws_kms_key" "encryption_rest" {
66
67
enable_key_rotation = true
67
68
description = " Key to encrypt cache at rest."
@@ -71,23 +72,59 @@ resource "aws_kms_key" "encryption_rest" {
71
72
Name = " ${ var . name } -encryption-rest"
72
73
}
73
74
}
75
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_alias
74
76
resource "aws_kms_alias" "encryption_rest" {
75
77
name = " alias/${ var . name } -elasticache-at-rest"
76
78
target_key_id = aws_kms_key. encryption_rest . key_id
77
79
}
80
+ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key_policy
78
81
resource "aws_kms_key_policy" "encryption_rest_policy" {
79
82
key_id = aws_kms_key. encryption_rest . id
80
83
policy = jsonencode ({
81
84
Id = " ${ var . name } -encryption-rest"
82
85
Statement = [
83
86
{
84
- Action = " kms:*"
87
+ Action = [
88
+ " kms:Create*" ,
89
+ " kms:Describe*" ,
90
+ " kms:Enable*" ,
91
+ " kms:List*" ,
92
+ " kms:Put*" ,
93
+ " kms:Update*" ,
94
+ " kms:Revoke*" ,
95
+ " kms:Disable*" ,
96
+ " kms:Get*" ,
97
+ " kms:Delete*" ,
98
+ " kms:ScheduleKeyDeletion" ,
99
+ " kms:CancelKeyDeletion"
100
+ ]
85
101
Effect = " Allow"
86
102
Principal = {
87
103
AWS = " ${ local . principal_root_arn } "
88
104
}
89
105
Resource = " *"
90
106
Sid = " Enable IAM User Permissions"
107
+ Condition = {
108
+ StringEquals = {
109
+ " kms:CallerAccount" = " ${ data . aws_caller_identity . current . account_id } "
110
+ }
111
+ }
112
+ },
113
+ {
114
+ Sid = " Allow ElastiCache to use the key"
115
+ Effect = " Allow"
116
+ Principal = {
117
+ Service = " elasticache.amazonaws.com"
118
+ }
119
+ Action = [
120
+ " kms:Decrypt" ,
121
+ " kms:Encrypt" ,
122
+ " kms:GenerateDataKey" ,
123
+ " kms:ReEncrypt*" ,
124
+ " kms:CreateGrant" ,
125
+ " kms:DescribeKey"
126
+ ]
127
+ Resource = " *"
91
128
},
92
129
{
93
130
Effect : " Allow" ,
0 commit comments