handlers/zuora-sar/cfn.yaml (207 lines of code) (raw):

AWSTemplateFormatVersion: "2010-09-09" Description: Performs Subject Access Requests against Zuora Parameters: Stage: Description: Stage name Type: String AllowedValues: - PROD - CODE Default: CODE SarResultsBucket: Description: Bucket where sar results are uploaded to Type: String Default: gu-baton-results VpcId: Description: Vpc where the lambda is being created Type: String VpcSubnets: Description: Subnets to use in VPC Type: CommaDelimitedList BatonAccountId: Description: Account Id for Baton AWS account Type: String Resources: BatonInvokeRole: Type: AWS::IAM::Role Properties: RoleName: !Sub "baton-zuora-lambda-role-${Stage}" AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: AWS: !Sub "arn:aws:iam::${BatonAccountId}:root" Action: - sts:AssumeRole Path: / Policies: - PolicyName: LambdaPolicy PolicyDocument: Statement: - Effect: Allow Action: - lambda:InvokeFunction Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:zuora-baton-*-lambda-${Stage}" ZuoraBatonSarLambdaRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: EC2Policy PolicyDocument: Statement: - Effect: Allow Action: - ec2:CreateNetworkInterface - ec2:DescribeNetworkInterfaces - ec2:DeleteNetworkInterface Resource: "*" - PolicyName: LogPolicy PolicyDocument: Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/zuora-baton-sar-lambda-${Stage}:log-stream:*" - PolicyName: InvokeLambdaPolicy PolicyDocument: Statement: - Effect: Allow Action: - lambda:InvokeFunction Resource: !GetAtt PerformZuoraSarLambda.Arn - PolicyName: S3ListPolicy PolicyDocument: Statement: - Effect: Allow Action: - s3:ListBucket Resource: !Sub arn:aws:s3:::${SarResultsBucket} - PolicyName: ReadPrivateCredentials PolicyDocument: Statement: - Effect: Allow Action: s3:GetObject Resource: - !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraRest-${Stage}.*.json - !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraSar-${Stage}.*.json PerformZuoraSarLambdaRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: EC2Policy PolicyDocument: Statement: - Effect: Allow Action: - ec2:CreateNetworkInterface - ec2:DescribeNetworkInterfaces - ec2:DeleteNetworkInterface Resource: "*" - PolicyName: LogPolicy PolicyDocument: Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/zuora-baton-perform-sar-lambda-${Stage}:log-stream:*" - PolicyName: S3ListPolicy PolicyDocument: Statement: - Effect: Allow Action: - s3:ListBucket Resource: !Sub arn:aws:s3:::${SarResultsBucket} - PolicyName: S3PutPolicy PolicyDocument: Statement: - Effect: Allow Action: - s3:PutObject - s3:PutObjectAcl - s3:GetObject Resource: !Sub arn:aws:s3:::${SarResultsBucket}/zuora-results/${Stage}/* - PolicyName: ReadPrivateCredentials PolicyDocument: Statement: - Effect: Allow Action: s3:GetObject Resource: - !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraRest-${Stage}.*.json - !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraSar-${Stage}.*.json LambdaSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: !Sub Security group for the zuora-sar-${Stage} lambdas VpcId: !Ref VpcId ZuoraBatonSarLambda: Type: AWS::Lambda::Function Properties: Description: Initiates the PerformZuoraSarLambda and checks the status of Zuora SARs via S3 FunctionName: !Sub zuora-baton-sar-lambda-${Stage} Code: S3Bucket: support-service-lambdas-dist S3Key: !Sub membership/${Stage}/zuora-sar/zuora-sar.jar Handler: com.gu.zuora.sar.Handler::handleSar Environment: Variables: Stage: !Ref Stage MemorySize: 1024 Runtime: java21 Timeout: 120 VpcConfig: SecurityGroupIds: - !Ref LambdaSecurityGroup SubnetIds: !Ref VpcSubnets Role: !GetAtt ZuoraBatonSarLambdaRole.Arn Architectures: - arm64 PerformZuoraSarLambda: Type: AWS::Lambda::Function Properties: Description: Performs SAR to Zuora, writing results to S3 FunctionName: !Sub zuora-baton-perform-sar-lambda-${Stage} Code: S3Bucket: support-service-lambdas-dist S3Key: !Sub membership/${Stage}/zuora-sar/zuora-sar.jar Handler: com.gu.zuora.sar.Handler::handlePerformSar Environment: Variables: Stage: !Ref Stage MemorySize: 1024 Runtime: java21 Timeout: 900 VpcConfig: SecurityGroupIds: - !Ref LambdaSecurityGroup SubnetIds: !Ref VpcSubnets Role: !GetAtt PerformZuoraSarLambdaRole.Arn Architectures: - arm64 DependsOn: - PerformZuoraSarLambdaRole