-
Notifications
You must be signed in to change notification settings - Fork 1
/
codebuild.tf
125 lines (115 loc) · 3.15 KB
/
codebuild.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
provider "aws" {
profile = var.profile
region = var.region
version = ">= 2.23.0"
}
data "aws_caller_identity" "current" {}
# role that CodeBuild will execute Packer container under
resource "aws_iam_role" "codebuild_hardened_ami" {
name = "hardened-ami-codebuild-role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "codebuild.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
# policy for CodeBuild Packer container
# see https://www.packer.io/docs/builders/amazon.html#using-an-iam-instance-profile
resource "aws_iam_role_policy" "codebuild_hardened_ami" {
role = "${aws_iam_role.codebuild_hardened_ami.name}"
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CopyImage",
"ec2:CreateImage",
"ec2:CreateKeypair",
"ec2:CreateSecurityGroup",
"ec2:CreateSnapshot",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteKeyPair",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSnapshot",
"ec2:DeleteVolume",
"ec2:DeregisterImage",
"ec2:DescribeImageAttribute",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSnapshots",
"ec2:DescribeSubnets",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DetachVolume",
"ec2:GetPasswordData",
"ec2:ModifyImageAttribute",
"ec2:ModifyInstanceAttribute",
"ec2:ModifySnapshotAttribute",
"ec2:RegisterImage",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource": "*"
}
]
}
POLICY
}
# CodeBuild project to automate hardened AMI creation
resource "aws_codebuild_project" "codebuild_hardened_ami" {
name = "Hardened-AMI"
description = "Automated build process for CIS hardened Amazon Linux 2 AMI"
build_timeout = "20"
service_role = "${aws_iam_role.codebuild_hardened_ami.arn}"
# this assumes source is in preexisting CodeCommit repo but could easily come from various others
# see https://www.terraform.io/docs/providers/aws/r/codebuild_project.html#source
source {
type = "CODECOMMIT"
location = "https://git-codecommit.${var.region}.amazonaws.com/v1/repos/${var.repo}"
buildspec = "buildspec.yml"
}
environment {
compute_type = "BUILD_GENERAL1_SMALL"
image = "aws/codebuild/standard:1.0"
type = "LINUX_CONTAINER"
image_pull_credentials_type = "CODEBUILD"
}
artifacts {
type = "NO_ARTIFACTS"
}
logs_config {
cloudwatch_logs {
group_name = "hardened-ami"
stream_name = "build"
}
}
}