Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Check-in the cfn template #1363

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
256 changes: 256 additions & 0 deletions cfn/ESDK-Javascript.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
AWSTemplateFormatVersion: "2010-09-09"
Description: "Template to build a CodeBuild Project, assumes that GitHub credentials are already set up."
Parameters:
ProjectName:
Type: String
Description: The name of the CodeBuild Project
ProjectDescription:
Type: String
Description: The description for the CodeBuild Project
SourceLocation:
Type: String
Description: The https GitHub URL for the project
NumberOfBuildsInBatch:
Type: Number
MaxValue: 100
MinValue: 1
Default: 4
Description: The number of builds you expect to run in a batch

Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Label:
default: "Crypto Tools CodeBuild Project Template"
Parameters:
- ProjectName
- ProjectDescription
- SourceLocation

Resources:
CodeBuildProject:
Type: "AWS::CodeBuild::Project"
DeletionPolicy: Retain
Properties:
Name: !Ref ProjectName
Description: !Ref ProjectDescription
Source:
Location: !Ref SourceLocation
GitCloneDepth: 50
GitSubmodulesConfig:
FetchSubmodules: true
InsecureSsl: false
ReportBuildStatus: false
Type: "GITHUB"
Artifacts:
Type: "NO_ARTIFACTS"
Cache:
Type: "NO_CACHE"
Environment:
ComputeType: "BUILD_GENERAL1_LARGE"
Image: "aws/codebuild/standard:4.0"
ImagePullCredentialsType: "CODEBUILD"
PrivilegedMode: false
Type: "LINUX_CONTAINER"
ServiceRole: !GetAtt CodeBuildServiceRole.Arn
TimeoutInMinutes: 60
QueuedTimeoutInMinutes: 480
EncryptionKey: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3"
BadgeEnabled: false
BuildBatchConfig:
ServiceRole: !GetAtt CodeBuildServiceRole.Arn
Restrictions:
MaximumBuildsAllowed: !Ref NumberOfBuildsInBatch
ComputeTypesAllowed:
- BUILD_GENERAL1_LARGE
TimeoutInMins: 480
LogsConfig:
CloudWatchLogs:
Status: "ENABLED"
S3Logs:
Status: "DISABLED"
EncryptionDisabled: false

CodeBuildProjectProdRelease:
Type: "AWS::CodeBuild::Project"
Properties:
Name: !Sub "${ProjectName}-prod-release"
Description: !Sub "CodeBuild project for ${ProjectName} to release to prod NPM."
Source:
Location: !Ref SourceLocation
BuildSpec: "codebuild/release/prod-release.yml"
GitCloneDepth: 50
GitSubmodulesConfig:
FetchSubmodules: true
InsecureSsl: false
ReportBuildStatus: false
Type: "GITHUB"
Artifacts:
Type: "NO_ARTIFACTS"
Cache:
Type: "NO_CACHE"
Environment:
ComputeType: "BUILD_GENERAL1_LARGE"
Image: "aws/codebuild/standard:4.0"
ImagePullCredentialsType: "CODEBUILD"
PrivilegedMode: false
Type: "LINUX_CONTAINER"
ServiceRole: !GetAtt CodeBuildServiceRole.Arn
TimeoutInMinutes: 60
QueuedTimeoutInMinutes: 480
EncryptionKey: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3"
BadgeEnabled: false
BuildBatchConfig:
ServiceRole: !GetAtt CodeBuildServiceRole.Arn
Restrictions:
MaximumBuildsAllowed: !Ref NumberOfBuildsInBatch
ComputeTypesAllowed:
- BUILD_GENERAL1_LARGE
TimeoutInMins: 480
LogsConfig:
CloudWatchLogs:
Status: "ENABLED"
S3Logs:
Status: "DISABLED"
EncryptionDisabled: false



CodeBuildServiceRole:
Type: "AWS::IAM::Role"
Properties:
Path: "/service-role/"
RoleName: !Sub "codebuild-${ProjectName}-service-role"
AssumeRolePolicyDocument: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"codebuild.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
MaxSessionDuration: 3600
ManagedPolicyArns:
- !Ref CryptoToolsKMS
- !Ref CodeBuildBatchPolicy
- !Ref CodeBuildBasePolicy
- !Ref SecretsManagerPolicy

CodeBuildBatchPolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub "CodeBuildBuildBatchPolicy-${ProjectName}-${AWS::Region}-codebuild-${ProjectName}-service-role"
Path: "/service-role/"
PolicyDocument: !Sub |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${ProjectName}",
"arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${ProjectName}-test-release",
"arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${ProjectName}-prod-release"
],
"Action": [
"codebuild:StartBuild",
"codebuild:StopBuild",
"codebuild:RetryBuild"
]
}
]
}

CodeBuildBasePolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub "CodeBuildBasePolicy-${ProjectName}-${AWS::Region}"
Path: "/service-role/"
PolicyDocument: !Sub |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}",
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}:*",
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}-test-release",
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}-test-release:*",
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}-prod-release",
"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${ProjectName}-prod-release:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-${AWS::Region}-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
]
},
{
"Effect": "Allow",
"Action": [
"codebuild:CreateReportGroup",
"codebuild:CreateReport",
"codebuild:UpdateReport",
"codebuild:BatchPutTestCases",
"codebuild:BatchPutCodeCoverages"
],
"Resource": [
"arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:report-group/${ProjectName}-*"
]
}
]
}

SecretsManagerPolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub "CryptoTools-SecretsManager-${ProjectName}-release"
Path: "/service-role/"
PolicyDocument: !Sub |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:secretsmanager:us-west-2:587316601012:secret:npm/aws-crypto-tools-ci-bot/2FA-1CnXMl"
],
"Action": "secretsmanager:GetSecretValue"
}
]
}

# There exist public AWS KMS CMKs that are used for testing
# Take care with these CMKs they are **ONLY** for testing!!!
CryptoToolsKMS:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub "CrypotToolsKMSPolicy-${ProjectName}-${AWS::Region}-codebuild-${ProjectName}-service-role"
Path: "/service-role/"
PolicyDocument: !Sub |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:kms:*:658956600833:key/*",
"arn:aws:kms:*:658956600833:alias/*"
],
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
]
}
]
}

Loading