Skip to content

Commit d076846

Browse files
committed
codebuild vpc (#19)
Added optional support for CodeBuild VPC deployment
1 parent 19b163b commit d076846

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,69 @@ module "pipeline" {
109109
}
110110
```
111111

112+
<<<<<<< HEAD
112113
See [optional inputs](./docs/optional_inputs.md) for descriptions.
114+
=======
115+
`branch` is the branch to source. It defaults to `main`.
116+
117+
`mode` is [pipeline execution mode](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works.html#concepts-how-it-works-executions). It defaults to `SUPERSEDED`.`detect_changes` is used with third-party services, like GitHub. It enables AWS CodeConnections to invoke the pipeline when there is a commit to the repo. It defaults to `false`.
118+
119+
`kms_key` is the arn of an *existing* AWS KMS key. This input will encrypt the Amazon S3 bucket with a AWS KMS key of your choice. Otherwise the bucket will be encrypted using SSE-S3. Your AWS KMS key policy will need to allow codebuild and codepipeline to `kms:GenerateDataKey*` and `kms:Decrypt`.
120+
121+
`access_logging_bucket` S3 server access logs bucket ARN, enables server access logging on the S3 artifact bucket.
122+
123+
`artifact_retention` controls the S3 artifact bucket retention period. It defaults to 90 (days).
124+
125+
`workspace_directory` enables the use of workspace variable files (eg ./workspaces/<workspace>.tfvars. The input is the directory name that you wish to use. This input is recommended for advanced variable management, where complex and/or signficant amounts of different variables are applied to different AWS accounts.
126+
127+
`codebuild_policy` replaces the [AWSAdministratorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html) IAM policy. This can be used if you want to scope the permissions of the pipeline.
128+
129+
`build_timeout` is the CodeBuild project build timeout. It defaults to 10 (minutes).
130+
131+
`terraform_version` controls the terraform version. It defaults to 1.5.7.
132+
133+
`checkov_version` controls the [Checkov](https://www.checkov.io/) version. It defaults to latest.
134+
135+
`tflint_version` controls the [tflint](https://github.com/terraform-linters/tflint) version. It defaults to 0.48.0.
136+
137+
`vpc` configures the CodeBuild projects to [run in a VPC](https://docs.aws.amazon.com/codebuild/latest/userguide/vpc-support.html).
138+
139+
`tags` enables tag validation with [tag-nag](https://github.com/jakebark/tag-nag). Input a list of tag keys and/or tag keys and values to enforce. Input must be passed as a string, see [commands](https://github.com/jakebark/tag-nag?tab=readme-ov-file#commands).
140+
141+
`tagnag_version` controls the [tag-nag](https://github.com/jakebark/tag-nag) version. It defaults to 0.5.8.
142+
143+
`checkov_skip` defines [Checkov](https://www.checkov.io/) skips for the pipeline. This is useful for organization-wide policies, removing the need to add individual resource skips.
144+
145+
## Architecture
146+
147+
![image info](./img/architecture.png)
148+
149+
1. **(1a)** User commits to a third-party repository, this invokes the AWS Codepipeline pipeline; *or* **(1b)** User commits to a CodeCommit repository, this invokes an Amazon EventBridge rule, which runs the pipeline.
150+
2. The pipeline validates the code and then runs a terraform plan against all of the target AWS accounts. Manual approval is then required to run the terraform apply.
151+
3. Resources are deployed to the target AWS accounts using [Terraform Workspaces](https://developer.hashicorp.com/terraform/language/state/workspaces). Each AWS account is assigned their own Workspace using their AWS Account ID.
152+
4. Artifacts and logs are exported to Amazon S3 and CloudWatch logs.
153+
154+
## Troubleshooting
155+
156+
| Issue | Fix |
157+
|---|---|
158+
| Failed lint or validate | Read the report or logs to discover why the code has failed, then make a new commit. |
159+
| Failed fmt | This means your code is not formatted. Run `terraform fmt --recursive` on your code, then make a new commit. |
160+
| Failed SAST | Read the Checkov logs (Details > Reports) and either make the correction in code or add a skip to the module inputs. |
161+
| Failed plan or apply stage | Read the report or logs to discover error in terraform code, then make a new commit. |
162+
| Pipeline fails on apply with `the action failed because no branch named main was found ...` | Either nothing has been committed to the repo or the branch is incorrect (Eg using `Master` not `Main`). Either commit to the Main branch or change the module input to fix this. |
163+
| `Invalid count argument` for `aws_s3_bucket_server_side_encryption_configuration` | The AWS KMS key must exist before the pipeline is created. If you create both at the same time, there is a dependency issue. |
164+
| Unable to find state file | Check state storage :env > AWS Account ID > backend key |
165+
166+
## Best Practices
167+
168+
Permissions to your CodeCommit repository, CodeBuild projects, and CodePipeline pipeline should be tightly controlled. Here are some ideas:
169+
- [Specify approval permission for specific pipelines and approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-iam-permissions.html#approvals-iam-permissions-limited)
170+
- [Using identity-based policies for AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html)
171+
- [Limit pushes and merges to branches in AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html)
172+
173+
Checkov skips can be used where Checkov policies conflict with your organization's practices or design decisions. The `checkov_skip` module input allows you to set skips for all resources in your repository. For example, if your organization operates in a single region you may want to add `CKV_AWS_144` (Ensure that S3 bucket has cross-region replication enabled). For individual resource skips, you can still use [inline code comments](https://www.checkov.io/2.Basics/Suppressing%20and%20Skipping%20Policies.html).
174+
>>>>>>> 50d0801 (codebuild vpc (#19))
113175
114176
## Related Resources
115177

codebuild.tf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ data "aws_iam_policy_document" "codebuild" {
155155
]
156156
}
157157

158-
159158
// https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html#customer-managed-policies-example-create-vpc-network-interface
160159
dynamic "statement" {
161160
for_each = var.vpc == null ? [] : [var.vpc]

0 commit comments

Comments
 (0)