// Copyright 2022 Amazon.com and its affiliates; all rights reserved. // SPDX-License-Identifier: MIT No Attribution data "aws_caller_identity" "current" {} resource "aws_iam_role" "lambda_role" { name = "${var.APP}-${var.ENV}-lambda-role" #permissions_boundary = "arn:aws:iam::aws:policy/PowerUserAccess" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Action = "sts:AssumeRole" Effect = "Allow" Sid = "" Principal = { Service = "lambda.amazonaws.com" } } ] }) } resource "aws_iam_policy" "lambda_policy" { name = "${var.APP}-${var.ENV}-lambda-policy" path = "/" description = "${var.APP}-${var.ENV}-lambda-policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "cloudwatch:*", "ec2:*", "iam:PassRole", "iam:CreateServiceLinkedRole", "kms:*", "lambda:*", "logs:*", "s3:*", "dynamodb:*", "cognito-idp:*", "secretsmanager:*", "ssm:*" ] Resource = "*" }, { Effect = "Allow" Action = [ "dynamodb:PutItem" ] Resource = [ "arn:aws:dynamodb:*:${data.aws_caller_identity.current.account_id}:table/${var.APP}-${var.ENV}-analytics-execution" ] } ] }) } resource "aws_iam_role_policy_attachment" "lambda_policy_attachment" { role = aws_iam_role.lambda_role.name policy_arn = aws_iam_policy.lambda_policy.arn } resource "aws_iam_role_policy_attachment" "lambda_xray_policy_attachment" { role = aws_iam_role.lambda_role.name policy_arn = "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess" } resource "aws_iam_role" "api_role" { name = "${var.APP}-${var.ENV}-api-role" #permissions_boundary = "arn:aws:iam::aws:policy/PowerUserAccess" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Action = "sts:AssumeRole" Effect = "Allow" Sid = "" Principal = { Service = "apigateway.amazonaws.com" } } ] }) } resource "aws_iam_role_policy_attachment" "api_policy_attachment_1" { role = aws_iam_role.api_role.name policy_arn = "arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess" } resource "aws_iam_role_policy_attachment" "api_policy_attachment_2" { role = aws_iam_role.api_role.name policy_arn = "arn:aws:iam::aws:policy/AWSLambda_FullAccess" } resource "aws_iam_role" "cloudwatch_role" { name = "${var.APP}-${var.ENV}-cloudwatch-role" #permissions_boundary = "arn:aws:iam::aws:policy/PowerUserAccess" assume_role_policy = <