11AWSTemplateFormatVersion : " 2010-09-09"
22Description : Stack IAM Roles
33Transform : AWS::Serverless-2016-10-31
4+
45Parameters :
56 RunEnvironment :
67 Type : String
@@ -14,8 +15,9 @@ Parameters:
1415 Type : String
1516 SqsQueueArn :
1617 Type : String
18+
1719Resources :
18- ApiLambdaIAMRole :
20+ SqsLambdaIAMRole :
1921 Type : AWS::IAM::Role
2022 Properties :
2123 ManagedPolicyArns :
@@ -30,7 +32,8 @@ Resources:
3032 Service :
3133 - lambda.amazonaws.com
3234 Policies :
33- - PolicyDocument :
35+ - PolicyName : ses-membership
36+ PolicyDocument :
3437 Version : " 2012-10-17"
3538 Statement :
3639 - Action :
@@ -40,20 +43,85 @@ Resources:
4043 Resource : " *"
4144 Condition :
4245 StringEquals :
43- ses:FromAddress : !Sub "membership@${SesEmailDomain}"
46+ ses:FromAddress :
47+ Fn::Sub : " membership@${SesEmailDomain}"
4448 ForAllValues:StringLike :
4549 ses:Recipients :
4650 - " *@illinois.edu"
47- PolicyName : ses-membership
48- - PolicyDocument :
51+
52+ - PolicyName : lambda-logs
53+ PolicyDocument :
54+ Version : " 2012-10-17"
55+ Statement :
56+ - Action :
57+ - logs:CreateLogGroup
58+ - logs:CreateLogStream
59+ - logs:PutLogEvents
60+ Effect : Allow
61+ Resource :
62+ - Fn::Sub : arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${LambdaFunctionName}:*
63+
64+ - PolicyName : lambda-db-secrets
65+ PolicyDocument :
66+ Version : " 2012-10-17"
67+ Statement :
68+ - Action :
69+ - secretsmanager:GetSecretValue
70+ Effect : Allow
71+ Resource :
72+ - Fn::Sub : arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:infra-core-api-config*
73+
74+ - PolicyName : lambda-dynamo
75+ PolicyDocument :
76+ Version : " 2012-10-17"
77+ Statement :
78+ - Sid : DynamoDBTableAccess
79+ Effect : Allow
80+ Action :
81+ - dynamodb:BatchGetItem
82+ - dynamodb:BatchWriteItem
83+ - dynamodb:ConditionCheckItem
84+ - dynamodb:PutItem
85+ - dynamodb:DescribeTable
86+ - dynamodb:DeleteItem
87+ - dynamodb:GetItem
88+ - dynamodb:Scan
89+ - dynamodb:Query
90+ - dynamodb:UpdateItem
91+ Resource :
92+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-cache
93+
94+ - Sid : DynamoDBDescribeLimitsAccess
95+ Effect : Allow
96+ Action :
97+ - dynamodb:DescribeLimits
98+ Resource : " *"
99+
100+ ApiLambdaIAMRole :
101+ Type : AWS::IAM::Role
102+ Properties :
103+ AssumeRolePolicyDocument :
104+ Version : " 2012-10-17"
105+ Statement :
106+ - Action :
107+ - sts:AssumeRole
108+ Effect : Allow
109+ Principal :
110+ Service :
111+ - lambda.amazonaws.com
112+ Policies :
113+ - PolicyName : lambda-sqs
114+ PolicyDocument :
49115 Version : " 2012-10-17"
50116 Statement :
51117 - Action :
52118 - sqs:SendMessage
53119 Effect : Allow
54- Resource : !Ref SqsQueueArn
55- PolicyName : lambda-sqs
56- - PolicyDocument :
120+ Resource :
121+ - Fn::Sub : " ${SqsQueueArn}"
122+
123+ - PolicyName : lambda-logs
124+ PolicyDocument :
57125 Version : " 2012-10-17"
58126 Statement :
59127 - Action :
@@ -63,59 +131,82 @@ Resources:
63131 Effect : Allow
64132 Resource :
65133 - Fn::Sub : arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${LambdaFunctionName}:*
66- - Effect : Allow
67- Action :
68- - ec2:CreateNetworkInterface
69- - ec2:DescribeNetworkInterfaces
70- - ec2:DeleteNetworkInterface
71- - ec2:DescribeSubnets
72- - ec2:DeleteNetworkInterface
73- - ec2:AssignPrivateIpAddresses
74- - ec2:UnassignPrivateIpAddresses
75- Resource : " *"
76- PolicyName : lambda
77- - PolicyDocument :
78- Version : 2012-10-17
134+
135+ - PolicyName : lambda-db-secrets
136+ PolicyDocument :
137+ Version : " 2012-10-17"
79138 Statement :
80139 - Action :
81140 - secretsmanager:GetSecretValue
82141 Effect : Allow
83142 Resource :
84- - !Sub arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:infra-core-api-config*
85- PolicyName : lambda-db-secrets
86- - PolicyDocument :
87- Version : 2012-10-17
143+ - Fn::Sub : arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:infra-core-api-config*
144+
145+ - PolicyName : lambda-dynamo
146+ PolicyDocument :
147+ Version : " 2012-10-17"
88148 Statement :
89- - Action :
90- - dynamodb:*
149+ - Sid : DynamoDBIndexAccess
91150 Effect : Allow
151+ Action :
152+ - dynamodb:Query
153+ Resource :
154+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-stripe-links/index/*
155+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-events/index/*
156+
157+ - Sid : DynamoDBStreamAccess
158+ Effect : Allow
159+ Action :
160+ - dynamodb:GetShardIterator
161+ - dynamodb:DescribeStream
162+ - dynamodb:GetRecords
163+ - dynamodb:ListStreams
164+ Resource :
165+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-stripe-links/stream/*
166+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-events/stream/*
167+
168+ - Sid : DynamoDBTableAccess
169+ Effect : Allow
170+ Action :
171+ - dynamodb:BatchGetItem
172+ - dynamodb:BatchWriteItem
173+ - dynamodb:ConditionCheckItem
174+ - dynamodb:PutItem
175+ - dynamodb:DescribeTable
176+ - dynamodb:DeleteItem
177+ - dynamodb:GetItem
178+ - dynamodb:Scan
179+ - dynamodb:Query
180+ - dynamodb:UpdateItem
92181 Resource :
93- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-events/*
94- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-events
95- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-cache
96- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-cache/*
97- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-purchase-history/*
98- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-purchase-history
99- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-tickets
100- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-tickets/*
101- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-ticketing-metadata/*
102- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-ticketing-metadata
103- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-metadata/*
104- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-metadata
105- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-userroles
106- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-userroles/*
107- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-grouproles
108- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-grouproles/*
109- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-stripe-links
110- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-stripe-links/*
111- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-membership-provisioning
112- - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-membership-provisioning/*
182+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-events
183+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-cache
184+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-purchase-history
185+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-tickets
186+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-events-ticketing-metadata
187+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-merchstore-metadata
188+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-userroles
189+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-iam-grouproles
190+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-stripe-links
191+ - Fn::Sub : arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/infra-core-api-membership-provisioning
192+
193+ - Sid : DynamoDBDescribeLimitsAccess
194+ Effect : Allow
195+ Action :
196+ - dynamodb:DescribeLimits
197+ Resource : " *"
113198
114- PolicyName : lambda-dynamo
115199Outputs :
116200 MainFunctionRoleArn :
117201 Description : Main API IAM role ARN
118202 Value :
119203 Fn::GetAtt :
120204 - ApiLambdaIAMRole
121205 - Arn
206+
207+ SqsFunctionRoleArn :
208+ Description : Sqs IAM role ARN
209+ Value :
210+ Fn::GetAtt :
211+ - SqsLambdaIAMRole
212+ - Arn
0 commit comments