5
5
6
6
valid_domains = [for p in local . projects_need_email : split (" @" , p. from_email )[1 ]]
7
7
domain_identities = toset (distinct (local. valid_domains ))
8
+
9
+ valid_domains_to_verify = [for p in local . projects_need_domain_verification : split (" @" , p. from_email )[1 ]]
10
+ domains_to_verify = toset (distinct (local. valid_domains_to_verify ))
8
11
}
9
12
10
13
# create all Domain identities
@@ -14,56 +17,38 @@ resource "aws_ses_domain_identity" "domain" {
14
17
domain = each. value
15
18
}
16
19
17
- # policy for Domain identities
18
- data "aws_iam_policy_document" "domain" {
19
- for_each = aws_ses_domain_identity. domain
20
-
21
- statement {
22
- actions = [" ses:*" ]
23
- resources = [aws_ses_domain_identity . domain [each . key ]. arn ]
24
-
25
- principals {
26
- type = " Service"
27
- identifiers = [" pinpoint.amazonaws.com" ]
28
- }
29
-
30
- condition {
31
- test = " StringEquals"
32
- values = [data . aws_caller_identity . current . account_id ]
33
- variable = " aws:SourceAccount"
34
- }
20
+ # retrieve Hosted Zone using Domain Name
21
+ data "aws_route53_zone" "by_name" {
22
+ for_each = local. domains_to_verify
35
23
36
- condition {
37
- test = " StringLike"
38
- values = [" arn:aws:mobiletargeting:${ data . aws_region . current . name } :${ data . aws_caller_identity . current . account_id } :apps/*" ]
39
- variable = " aws:SourceArn"
40
- }
41
- }
24
+ name = each. key
42
25
}
43
26
44
- resource "aws_ses_identity_policy " "domain " {
45
- for_each = aws_ses_domain_identity . domain
27
+ resource "aws_route53_record " "verification " {
28
+ for_each = data . aws_route53_zone . by_name
46
29
47
- identity = each. value . arn
48
- name = " ${ replace (replace (each. value . id , " @" , " _" ), " ." , " _" )} -identity-policy"
49
- policy = data. aws_iam_policy_document . domain [each . key ]. json
30
+ zone_id = each. value . zone_id
31
+ name = " _amazonses.${ each . value . id } "
32
+ type = " TXT"
33
+ ttl = " 600"
34
+ # records = [each.value.verification_token]
35
+ records = [aws_ses_domain_identity . domain [each . key ]. verification_token ]
50
36
}
51
37
52
- # create all Email identities
53
- resource "aws_ses_email_identity" "email" {
54
- for_each = local. email_identities
38
+ resource "aws_ses_domain_identity_verification" "example_verification" {
39
+ for_each = data. aws_route53_zone . by_name
55
40
56
- email = each. value
41
+ domain = aws_ses_domain_identity. domain [each . key ]. id
42
+ depends_on = [aws_route53_record . verification ]
57
43
}
58
44
59
- # policy for Email identities
60
- data "aws_iam_policy_document" "email " {
61
- for_each = aws_ses_email_identity . email
45
+ # policy for Domain identities
46
+ data "aws_iam_policy_document" "domain " {
47
+ for_each = aws_ses_domain_identity . domain
62
48
63
49
statement {
64
50
actions = [" ses:*" ]
65
- resources = [aws_ses_email_identity . email [each . key ]. arn ]
66
-
51
+ resources = [aws_ses_domain_identity . domain [each . key ]. arn ]
67
52
68
53
principals {
69
54
type = " Service"
@@ -84,10 +69,10 @@ data "aws_iam_policy_document" "email" {
84
69
}
85
70
}
86
71
87
- resource "aws_ses_identity_policy" "email " {
88
- for_each = aws_ses_email_identity . email
72
+ resource "aws_ses_identity_policy" "domain " {
73
+ for_each = aws_ses_domain_identity . domain
89
74
90
75
identity = each. value . arn
91
76
name = " ${ replace (replace (each. value . id , " @" , " _" ), " ." , " _" )} -identity-policy"
92
- policy = data. aws_iam_policy_document . email [each . key ]. json
77
+ policy = data. aws_iam_policy_document . domain [each . key ]. json
93
78
}
0 commit comments