data "aws_iam_policy_document" "ecs_assume" { statement { effect = "Allow" actions = ["sts:AssumeRole"] principals { type = "Service" identifiers = ["ecs-tasks.amazonaws.com"] } } } data "aws_iam_policy_document" "ecs_task" { statement { sid = "ReadProjectParameters" effect = "Allow" actions = ["ssm:GetParameter", "ssm:GetParameters"] resources = ["arn:aws:ssm:${var.aws_region}:${local.account_id}:parameter${local.ssm_prefix}/*"] } statement { sid = "ReadProjectSecrets" effect = "Allow" actions = ["secretsmanager:GetSecretValue"] resources = ["arn:aws:secretsmanager:${var.aws_region}:${local.account_id}:secret:seahaven-ap/*"] } statement { sid = "EcrAuth" effect = "Allow" actions = ["ecr:GetAuthorizationToken"] resources = ["*"] } statement { sid = "EcrPull" effect = "Allow" actions = [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", ] resources = [aws_ecr_repository.api.arn] } statement { sid = "TaskLogs" effect = "Allow" actions = [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", ] resources = [ aws_cloudwatch_log_group.api.arn, "${aws_cloudwatch_log_group.api.arn}:*", ] } statement { sid = "DocumentsBucket" effect = "Allow" actions = [ "s3:ListBucket", "s3:GetBucketLocation", ] resources = [aws_s3_bucket.documents.arn] } statement { sid = "DocumentsObjects" effect = "Allow" actions = [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", ] resources = ["${aws_s3_bucket.documents.arn}/*"] } } resource "aws_iam_role" "ecs_execution" { name = "${local.project}-ecs-exec" path = "/tf-managed/" assume_role_policy = data.aws_iam_policy_document.ecs_assume.json permissions_boundary = data.aws_iam_policy.ecs_task_boundary.arn } resource "aws_iam_role_policy_attachment" "ecs_execution" { role = aws_iam_role.ecs_execution.name policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy" } resource "aws_iam_role" "ecs_task" { name = "${local.project}-ecs-task" path = "/tf-managed/" assume_role_policy = data.aws_iam_policy_document.ecs_assume.json permissions_boundary = data.aws_iam_policy.ecs_task_boundary.arn } resource "aws_iam_role_policy" "ecs_task" { name = "api-runtime" role = aws_iam_role.ecs_task.id policy = data.aws_iam_policy_document.ecs_task.json }