|
| 1 | +# S3 Bucket |
1 | 2 | resource "aws_s3_bucket" "timeless_bucket" { |
2 | 3 | bucket = var.bucket_assets_name |
| 4 | +} |
| 5 | + |
| 6 | +resource "aws_s3_bucket_acl" "timeless_bucket_acl" { |
| 7 | + bucket = aws_s3_bucket.timeless_bucket.id |
3 | 8 | acl = "private" |
4 | 9 | } |
5 | 10 |
|
6 | | -resource "aws_iam_user" "timeless_assets_writer" { |
7 | | - name = var.timeless_assets_writer_name |
| 11 | +# IAM Users |
| 12 | +resource "aws_iam_user" "timeless_whatsapp_app" { |
| 13 | + name = var.timeless_whatsapp_app_name |
8 | 14 | } |
9 | 15 |
|
10 | | -resource "aws_iam_policy" "bucket_write_policy" { |
11 | | - name = "BucketWriteAccessPolicy" |
12 | | - description = "Allows write access to ${var.bucket_assets_name} bucket" |
| 16 | +resource "aws_iam_user" "timeless_api_app" { |
| 17 | + name = var.timeless_api_app_name |
| 18 | +} |
| 19 | + |
| 20 | +# IAM Policies |
| 21 | + |
| 22 | +resource "aws_iam_policy" "timeless_whatsapp_sqs_policy" { |
| 23 | + name = "AllowSendReceiveMessagePolicy" |
13 | 24 | policy = jsonencode({ |
14 | 25 | Version = "2012-10-17", |
15 | 26 | Statement = [ |
16 | 27 | { |
17 | 28 | Effect = "Allow", |
18 | 29 | Action = [ |
19 | | - "s3:PutObject", |
20 | | - "s3:PutObjectAcl", |
21 | | - "s3:GetObject" |
| 30 | + "sqs:SendMessage", |
| 31 | + "sqs:GetQueueAttributes" |
22 | 32 | ], |
23 | | - Resource = "${aws_s3_bucket.timeless_bucket.arn}/*" |
| 33 | + Resource = ["${aws_sqs_queue.incoming_messages.arn}"] |
24 | 34 | }, |
25 | 35 | { |
26 | 36 | Effect = "Allow", |
27 | 37 | Action = [ |
28 | | - "sqs:SendMessage", |
29 | 38 | "sqs:ReceiveMessage", |
30 | | - "sqs:GetQueueAttributes", |
31 | | - "sqs:DeleteMessage" |
| 39 | + "sqs:DeleteMessage", |
| 40 | + "sqs:GetQueueAttributes" |
32 | 41 | ], |
33 | | - Resource = "${aws_sqs_queue.incoming_messages.arn}" |
| 42 | + Resource = ["${aws_sqs_queue.message_processed.arn}"] |
| 43 | + } |
| 44 | + ] |
| 45 | + }) |
| 46 | +} |
| 47 | + |
| 48 | +resource "aws_iam_policy" "timeless_api_sqs_policy" { |
| 49 | + name = "AllowTimelessAPISendReceiveMessagePolicy" |
| 50 | + policy = jsonencode({ |
| 51 | + Version = "2012-10-17", |
| 52 | + Statement = [ |
| 53 | + { |
| 54 | + Effect = "Allow", |
| 55 | + Action = [ |
| 56 | + "sqs:SendMessage", |
| 57 | + "sqs:GetQueueAttributes" |
| 58 | + ], |
| 59 | + Resource = ["${aws_sqs_queue.message_processed.arn}"] |
34 | 60 | }, |
35 | 61 | { |
36 | | - Effect = "Allow" |
| 62 | + Effect = "Allow", |
37 | 63 | Action = [ |
38 | 64 | "sqs:ReceiveMessage", |
39 | | - "sqs:GetQueueAttributes", |
40 | 65 | "sqs:DeleteMessage", |
41 | | - "sqs:SendMessage", |
| 66 | + "sqs:GetQueueAttributes" |
| 67 | + ], |
| 68 | + Resource = ["${aws_sqs_queue.incoming_messages.arn}"] |
| 69 | + } |
| 70 | + ] |
| 71 | + }) |
| 72 | +} |
| 73 | + |
| 74 | +resource "aws_iam_policy" "bucket_read_policy" { |
| 75 | + name = "TimelessAPIBucketReadAccessPolicy" |
| 76 | + description = "Allows read access to ${var.bucket_assets_name} bucket" |
| 77 | + policy = jsonencode({ |
| 78 | + Version = "2012-10-17", |
| 79 | + Statement = [ |
| 80 | + { |
| 81 | + Effect = "Allow", |
| 82 | + Action = [ |
| 83 | + "s3:GetObject" |
42 | 84 | ], |
43 | | - Resource = "${aws_sqs_queue.message_processed.arn}" |
| 85 | + Resource = "${aws_s3_bucket.timeless_bucket.arn}/*" |
44 | 86 | } |
45 | 87 | ] |
46 | 88 | }) |
47 | 89 | } |
48 | 90 |
|
49 | | -resource "aws_iam_user_policy_attachment" "attach_policy" { |
50 | | - user = aws_iam_user.timeless_assets_writer.name |
| 91 | +resource "aws_iam_policy" "bucket_write_policy" { |
| 92 | + name = "TimelessWhatsappBucketWriteAccessPolicy" |
| 93 | + description = "Allows write access to ${var.bucket_assets_name} bucket" |
| 94 | + policy = jsonencode({ |
| 95 | + Version = "2012-10-17", |
| 96 | + Statement = [ |
| 97 | + { |
| 98 | + Effect = "Allow", |
| 99 | + Action = [ |
| 100 | + "s3:PutObject", |
| 101 | + "s3:PutObjectAcl", |
| 102 | + "s3:DeleteObject" |
| 103 | + ], |
| 104 | + Resource = "${aws_s3_bucket.timeless_bucket.arn}/*" |
| 105 | + } |
| 106 | + ] |
| 107 | + }) |
| 108 | +} |
| 109 | + |
| 110 | +# IAM User Policy Attachments |
| 111 | + |
| 112 | +resource "aws_iam_user_policy_attachment" "attach_bucket_write_policy" { |
| 113 | + user = aws_iam_user.timeless_whatsapp_app.name |
51 | 114 | policy_arn = aws_iam_policy.bucket_write_policy.arn |
52 | 115 | } |
53 | 116 |
|
54 | | -resource "aws_sqs_queue" "incoming_messages" { |
55 | | - name = "incoming-messages.fifo" |
| 117 | +resource "aws_iam_user_policy_attachment" "attach_sqs_policy" { |
| 118 | + user = aws_iam_user.timeless_whatsapp_app.name |
| 119 | + policy_arn = aws_iam_policy.timeless_whatsapp_sqs_policy.arn |
| 120 | +} |
| 121 | + |
| 122 | +resource "aws_iam_user_policy_attachment" "attach_api_bucket_read_policy" { |
| 123 | + user = aws_iam_user.timeless_api_app.name |
| 124 | + policy_arn = aws_iam_policy.bucket_read_policy.arn |
| 125 | +} |
| 126 | + |
| 127 | +resource "aws_iam_user_policy_attachment" "attach_api_sqs_policy" { |
| 128 | + user = aws_iam_user.timeless_api_app.name |
| 129 | + policy_arn = aws_iam_policy.timeless_api_sqs_policy.arn |
| 130 | +} |
| 131 | + |
56 | 132 |
|
| 133 | +# SQS Queues |
| 134 | +resource "aws_sqs_queue" "incoming_messages" { |
57 | 135 | fifo_queue = true |
58 | 136 | content_based_deduplication = true |
59 | 137 | } |
60 | 138 |
|
61 | 139 | resource "aws_sqs_queue" "message_processed" { |
62 | | - name = "messages-processed.fifo" |
63 | | - |
64 | 140 | fifo_queue = true |
65 | 141 | content_based_deduplication = true |
66 | 142 | } |
0 commit comments