Skip to content

Commit 124bb9f

Browse files
committed
CUMULUS-4707: Refactored iceberg iam role.
1 parent f4c1692 commit 124bb9f

File tree

5 files changed

+68
-18
lines changed

5 files changed

+68
-18
lines changed

packages/api/app/env.local.example

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,3 @@ NODE_ENV=development
66
api_config_secret_id=<Secret manager api config arn>
77
dynamoTableNameString={"AccessTokensTable":<Access token table name>}
88
ICEBERG_GLUE_SCHEMA=<Iceberg glue schema>
9-

tf-modules/cumulus/iceberg_api.tf

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ module "iceberg_api" {
1818

1919
ecs_execution_role_arn = aws_iam_role.ecs_execution_role.arn
2020

21-
ecs_task_role_arn = aws_iam_role.ecs_task_role.arn
22-
2321
ecs_cluster_arn = aws_ecs_cluster.default.arn
2422
ecs_cluster_name = aws_ecs_cluster.default.name
2523
ecs_cluster_instance_subnet_ids = var.ecs_cluster_instance_subnet_ids

tf-modules/iceberg_api/iam.tf

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,83 @@
1-
data "aws_iam_policy_document" "iceberg_ecs_task_policy" {
1+
# --- Iceberg ECS Task Role ---
2+
3+
data "aws_iam_policy_document" "iceberg_task_assume_role_policy" {
4+
statement {
5+
principals {
6+
type = "Service"
7+
identifiers = ["ecs-tasks.amazonaws.com"]
8+
}
9+
actions = ["sts:AssumeRole"]
10+
}
11+
}
12+
13+
resource "aws_iam_role" "iceberg_task_role" {
14+
name = "${var.prefix}-iceberg-task-role"
15+
assume_role_policy = data.aws_iam_policy_document.iceberg_task_assume_role_policy.json
16+
permissions_boundary = var.permissions_boundary_arn
17+
}
18+
19+
data "aws_iam_policy_document" "iceberg_task_role_policy" {
20+
221
statement {
322
actions = [
4-
"s3:GetObject",
5-
"s3:ListBucket",
6-
"s3:PutObject",
7-
"s3:DeleteObject",
23+
"s3:GetBucket*",
24+
"s3:ListBucket*",
825
]
926
resources = [
1027
"arn:aws:s3:::${var.iceberg_s3_bucket}",
28+
]
29+
}
30+
31+
statement {
32+
actions = [
33+
"s3:GetObject*",
34+
"s3:ListMultipartUploadParts",
35+
]
36+
resources = [
1137
"arn:aws:s3:::${var.iceberg_s3_bucket}/*",
1238
]
1339
}
1440

41+
statement {
42+
actions = [
43+
"dynamodb:GetItem",
44+
"dynamodb:Scan",
45+
"dynamodb:Query",
46+
]
47+
resources = ["arn:aws:dynamodb:*:*:table/*"]
48+
}
49+
50+
statement {
51+
actions = ["dynamodb:Query"]
52+
resources = ["arn:aws:dynamodb:*:*:table/*/index/*"]
53+
}
54+
55+
statement {
56+
actions = [
57+
"states:DescribeActivity",
58+
"states:DescribeExecution",
59+
"states:GetActivityTask",
60+
"states:GetExecutionHistory",
61+
"states:SendTaskFailure",
62+
"states:SendTaskSuccess",
63+
]
64+
resources = ["arn:aws:states:*:*:*"]
65+
}
66+
67+
statement {
68+
actions = ["secretsmanager:GetSecretValue"]
69+
resources = [var.api_config_secret_arn]
70+
}
71+
72+
# Iceberg-specific: Glue catalog access
1573
statement {
1674
actions = ["glue:*"]
1775
resources = ["*"]
1876
}
1977
}
2078

21-
resource "aws_iam_role_policy" "iceberg_ecs_task_policy" {
22-
name = "${var.prefix}-iceberg-ecs-task-policy"
23-
role = split("/", var.ecs_task_role_arn)[1]
24-
policy = data.aws_iam_policy_document.iceberg_ecs_task_policy.json
79+
resource "aws_iam_role_policy" "iceberg_task_role_policy" {
80+
name = "${var.prefix}-iceberg-task-role-policy"
81+
role = aws_iam_role.iceberg_task_role.name
82+
policy = data.aws_iam_policy_document.iceberg_task_role_policy.json
2583
}

tf-modules/iceberg_api/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ resource "aws_ecs_task_definition" "iceberg_api" {
2727
cpu = var.iceberg_api_cpu
2828
memory = var.iceberg_api_memory
2929
execution_role_arn = var.ecs_execution_role_arn
30-
task_role_arn = var.ecs_task_role_arn
30+
task_role_arn = aws_iam_role.iceberg_task_role.arn
3131

3232
runtime_platform {
3333
operating_system_family = "LINUX"

tf-modules/iceberg_api/variables.tf

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,3 @@ variable "default_log_retention_days" {
121121
default = 30
122122
description = "default value that user chooses for their log retention periods"
123123
}
124-
125-
variable "ecs_task_role_arn" {
126-
description = "ARN of the ECS task role"
127-
type = string
128-
}

0 commit comments

Comments
 (0)