Files
prowler/util/org-multi-account/serverless_codebuild/templates/ProwlerCodeBuildStack.yaml
2021-08-30 10:59:08 +09:00

211 lines
7.5 KiB
YAML

---
AWSTemplateFormatVersion: 2010-09-09
Description: Creates a CodeBuild project to audit an AWS account with Prowler and stores the html report in a S3 bucket.
Parameters:
AwsOrgId:
Type: String
Description: Enter AWS Organizations ID
AllowedPattern: ^o-[a-z0-9]{10,32}$
ConstraintDescription: The Org Id must be a 12 character string starting with o- and followed by 10 lower case alphanumeric characters.
Default: o-itdezkbz6h
CodeBuildRole:
Description: Enter Name for CodeBuild Role to create
Type: String
AllowedPattern: ^[\w+=,.@-]{1,64}$
ConstraintDescription: Max 64 alphanumeric characters. Also special characters supported [+, =, ., @, -]
Default: ProwlerCodeBuild-Role
CodeBuildSourceS3:
Type: String
Description: Enter like <bucket-name>/<path>/<object-name>.zip
ConstraintDescription: Max 63 characters. Can't start or end with dash. Can use numbers and lowercase letters.
Default: prowler-util-411267690458-ap-northeast-2/run-prowler-reports.sh.zip
ProwlerReportS3:
Type: String
Description: Enter S3 Bucket for Prowler Reports. prefix-awsaccount-awsregion
AllowedPattern: ^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$
ConstraintDescription: Max 63 characters. Can't start or end with dash. Can use numbers and lowercase letters.
Default: prowler-954896828174-ap-northeast-2
ProwlerReportS3Account:
Type: String
Description: Enter AWS Account Number where Prowler S3 Bucket resides.
AllowedPattern: ^\d{12}$
ConstraintDescription: An AWS Account Number must be a 12 digit numeric string.
Default: 954896828174
CrossAccountRole:
Type: String
Description: Enter CrossAccount Role Prowler will be using to assess AWS Accounts in the AWS Organization. (ProwlerCrossAccountRole)
AllowedPattern: ^[\w+=,.@-]{1,64}$
ConstraintDescription: Max 64 alphanumeric characters. Also special characters [+, =, ., @, -]
Default: ProwlerXA-CBRole
ProwlerReportFormat:
Type: String
Description: Enter Prowler Option like html, csv, json
Default: html
Resources:
ProwlerCodeBuildRole:
Type: AWS::IAM::Role
Properties:
Description: Prowler CodeBuild Role
RoleName: !Ref CodeBuildRole
Tags:
- Key: App
Value: Prowler
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- codebuild.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: Prowler-S3
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: AllowGetPutListObject
Effect: Allow
Resource:
- !Sub arn:${AWS::Partition}:s3:::${ProwlerReportS3}
- !Sub arn:${AWS::Partition}:s3:::${ProwlerReportS3}/*
Action:
- s3:GetObject
- s3:PutObject
- s3:ListBucket
- s3:PutObjectAcl
- Sid: AllowReadOnlyS3Access
Effect: Allow
Resource: "*"
Action:
- "s3:Get*"
- "s3:List*"
- PolicyName: Prowler-CrossAccount-AssumeRole
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: AllowStsAssumeRole
Effect: Allow
Resource: !Sub arn:${AWS::Partition}:iam::*:role/${CrossAccountRole}
Action: sts:AssumeRole
Condition:
StringEquals:
aws:PrincipalOrgId: !Ref AwsOrgId
- PolicyName: Prowler-CloudWatch
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: AllowCreateLogs
Effect: Allow
Resource: !Sub arn:${AWS::Partition}:logs:*:*:log-group:*
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- Sid: AllowPutevent
Effect: Allow
Resource: !Sub arn:${AWS::Partition}:logs:*:*:log-group:*:log-stream:*
Action:
- logs:PutLogEvents
ProwlerCodeBuild:
Type: AWS::CodeBuild::Project
Properties:
Artifacts:
Type: NO_ARTIFACTS
Source:
Type: S3
Location: !Ref CodeBuildSourceS3
BuildSpec: |
version: 0.2
phases:
install:
runtime-versions:
python: 3.8
commands:
- echo "Updating yum..."
- yum -y update
build:
commands:
- echo "Running Prowler with script"
- chmod +x run-prowler-reports.sh
- ./run-prowler-reports.sh
post_build:
commands:
- echo "Done!"
Environment:
# AWS CodeBuild free tier includes 100 build minutes of BUILD_GENERAL1_SMALL per month.
# BUILD_GENERAL1_SMALL: Use up to 3 GB memory and 2 vCPUs for builds. $0.005/minute.
# BUILD_GENERAL1_MEDIUM: Use up to 7 GB memory and 4 vCPUs for builds. $0.01/minute.
# BUILD_GENERAL1_LARGE: Use up to 15 GB memory and 8 vCPUs for builds. $0.02/minute.
# BUILD_GENERAL1_2XLARGE: Use up to 144 GB memory and 72 vCPUs for builds. $0.20/minute.
ComputeType: "BUILD_GENERAL1_SMALL"
Image: "aws/codebuild/amazonlinux2-x86_64-standard:3.0"
Type: "LINUX_CONTAINER"
EnvironmentVariables:
- Name: "S3"
Value: !Sub s3://${ProwlerReportS3}
Type: PLAINTEXT
- Name: "S3ACCOUNT"
Value: !Ref ProwlerReportS3Account
Type: PLAINTEXT
- Name: "ROLE"
Value: !Ref CrossAccountRole
Type: PLAINTEXT
- Name: "FORMAT"
Value: !Ref ProwlerReportFormat
Type: PLAINTEXT
Description: Run Prowler assessment
ServiceRole: !GetAtt ProwlerCodeBuildRole.Arn
TimeoutInMinutes: 300
ProwlerCWRuleRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- events.amazonaws.com
Action:
- sts:AssumeRole
Description: ProwlerCWRuleRole
RoleName: ProwlerCWRule-Role
Policies:
- PolicyName: Rule-Events
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: AWSEventInvokeCodeBuild
Effect: Allow
Resource: "*"
Action:
- codebuild:StartBuild
ProwlerRule:
Type: AWS::Events::Rule
Properties:
Description: This rule will trigger CodeBuild to audit AWS Accounts in my Organization with Prowler
ScheduleExpression: cron(0 21 * * ? *)
RoleArn: !GetAtt ProwlerCWRuleRole.Arn
Name: ProwlerExecuteRule
State: ENABLED
Targets:
- Arn: !Sub ${ProwlerCodeBuild.Arn}
Id: Prowler-CodeBuild-Target
RoleArn: !GetAtt ProwlerCWRuleRole.Arn
Outputs:
ProwlerEc2Account:
Description: AWS Account Number where Prowler EC2 Instance resides.
Value: !Ref AWS::AccountId
ProwlerCodeBuildRole:
Description: Instance Role given to the Prowler EC2 Instance (needed to grant sts:AssumeRole rights).
Value: !Ref ProwlerCodeBuildRole
ProwlerReportS3:
Description: S3 Bucket for Prowler Reports
Value: !Ref ProwlerReportS3