1+ # ==============================
2+ # Task Execution Role
3+ # ==============================
4+
5+ # Will create or edit the *task execution role*
6+ # only if the user provides a Datadog API key secret ARN
7+ # in order to provide permissions to access the secret
8+
19locals {
2- edit_execution_role = var. execution_role_arn != null
3- create_execution_role = ! local. edit_execution_role
410 create_dd_secret_perms = var. dd_api_key_secret_arn != null
11+ edit_execution_role = var. execution_role_arn != null && local. create_dd_secret_perms
12+ create_execution_role = var. execution_role_arn == null && local. create_dd_secret_perms
513}
614
715# ==============================
@@ -23,6 +31,63 @@ resource "aws_iam_policy" "dd_secret_access" {
2331 policy = data. aws_iam_policy_document . dd_secret_access [0 ]. json
2432}
2533
34+ # ==============================
35+ # Case 1: User provides existing Task Execution Role
36+ # ==============================
37+ data "aws_iam_role" "ecs_task_exec_role" {
38+ count = local. edit_execution_role ? 1 : 0
39+ name = element (split (" /" , var. execution_role_arn ), 1 )
40+ }
41+
42+ resource "aws_iam_role_policy_attachment" "existing_role_dd_secret" {
43+ count = local. edit_execution_role ? 1 : 0
44+ role = data. aws_iam_role . ecs_task_exec_role [0 ]. name
45+ policy_arn = aws_iam_policy. dd_secret_access [0 ]. arn
46+ }
47+
48+ # ==============================
49+ # Case 2: Create a Task Execution Role
50+ # ==============================
51+ resource "aws_iam_role" "new_ecs_task_execution_role" {
52+ count = local. create_execution_role ? 1 : 0
53+ name = " ${ var . family } -ecs-task-exec-role"
54+
55+ assume_role_policy = jsonencode ({
56+ Version = " 2012-10-17"
57+ Statement = [{
58+ Effect = " Allow"
59+ Principal = {
60+ Service = " ecs-tasks.amazonaws.com"
61+ }
62+ Action = " sts:AssumeRole"
63+ }]
64+ })
65+ }
66+
67+ resource "aws_iam_role_policy_attachment" "new_ecs_task_execution_role_policy" {
68+ count = local. create_execution_role ? 1 : 0
69+ role = aws_iam_role. new_ecs_task_execution_role [0 ]. name
70+ policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
71+ }
72+
73+ resource "aws_iam_role_policy_attachment" "new_role_dd_secret" {
74+ count = local. create_execution_role ? 1 : 0
75+ role = aws_iam_role. new_ecs_task_execution_role [0 ]. name
76+ policy_arn = aws_iam_policy. dd_secret_access [0 ]. arn
77+ }
78+
79+ # ==============================
80+ # Task Role
81+ # ==============================
82+
83+ # Will create or edit the *task role* always
84+ # in order to add permissions for the ecs_fargate check
85+
86+ locals {
87+ edit_task_role = var. task_role_arn != null
88+ create_task_role = var. task_role_arn == null
89+ }
90+
2691# ==============================
2792# ECS Task Permissions Policy
2893# ==============================
@@ -44,11 +109,12 @@ resource "aws_iam_policy" "dd_ecs_task_permissions" {
44109}
45110
46111# ==============================
47- # Case 1: User provides existing Task Execution Role
112+ # Case 1: User provides existing Task Role
48113# ==============================
114+
49115data "aws_iam_role" "ecs_task_role" {
50- count = local. edit_execution_role ? 1 : 0
51- name = element (split (" /" , var. execution_role_arn ), 1 )
116+ count = local. edit_task_role ? 1 : 0
117+ name = element (split (" /" , var. task_role_arn ), 1 )
52118}
53119
54120# Always attach `dd_ecs_task_permissions`
@@ -58,19 +124,14 @@ resource "aws_iam_role_policy_attachment" "existing_role_ecs_task_permissions" {
58124 policy_arn = aws_iam_policy. dd_ecs_task_permissions . arn
59125}
60126
61- # Conditionally attach `dd_secret_access` only if required
62- resource "aws_iam_role_policy_attachment" "existing_role_dd_secret" {
63- count = local. edit_execution_role && local. create_dd_secret_perms ? 1 : 0
64- role = data. aws_iam_role . ecs_task_role [0 ]. name
65- policy_arn = aws_iam_policy. dd_secret_access [0 ]. arn
66- }
67127
68128# ==============================
69- # Case 2: Create a Task Execution Role
129+ # Case 2: Create a Task Role
70130# ==============================
71- resource "aws_iam_role" "ecs_task_execution" {
72- count = local. create_execution_role ? 1 : 0
73- name = " ${ var . family } -ecs-task-exec-role"
131+
132+ resource "aws_iam_role" "new_ecs_task_role" {
133+ count = local. create_task_role ? 1 : 0
134+ name = " ${ var . family } -ecs-task-role"
74135
75136 assume_role_policy = jsonencode ({
76137 Version = " 2012-10-17"
@@ -84,22 +145,9 @@ resource "aws_iam_role" "ecs_task_execution" {
84145 })
85146}
86147
87- resource "aws_iam_role_policy_attachment" "ecs_task_execution_policy" {
88- count = local. create_execution_role ? 1 : 0
89- role = aws_iam_role. ecs_task_execution [0 ]. name
90- policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
91- }
92-
93148# Always attach `dd_ecs_task_permissions`
94149resource "aws_iam_role_policy_attachment" "new_role_ecs_task_permissions" {
95- count = local. create_execution_role ? 1 : 0
96- role = aws_iam_role. ecs_task_execution [0 ]. name
150+ count = local. create_task_role ? 1 : 0
151+ role = aws_iam_role. new_ecs_task_role [0 ]. name
97152 policy_arn = aws_iam_policy. dd_ecs_task_permissions . arn
98- }
99-
100- # Conditionally attach `dd_secret_access` only if required
101- resource "aws_iam_role_policy_attachment" "new_role_dd_secret" {
102- count = local. create_execution_role && local. create_dd_secret_perms ? 1 : 0
103- role = aws_iam_role. ecs_task_execution [0 ]. name
104- policy_arn = aws_iam_policy. dd_secret_access [0 ]. arn
105- }
153+ }
0 commit comments