Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disable encryption on AWS CodeBuild artifacts?

I'm using AWS CodeBuild to build an application, it is configured to push the build artifacts to an AWS S3 bucket. On inspecting the artifcats/objects in the S3 bucket I realised that the objects has been encrypted.

Is it possible to disable to encryption on the artifcats/objects?

like image 773
altus Avatar asked Jun 15 '18 08:06

altus


People also ask

How do I encrypt build artifacts by CodeBuild?

Q: Can I encrypt the build artifacts stored by CodeBuild? Yes. You can specify a key stored in the AWS Key Management Service (AWS KMS) to encrypt your artifacts.

What encryption options are supported by AWS?

AES-256 is the technology we use to encrypt data in AWS, including Amazon Simple Storage Service (S3) server-side encryption.

What are the two types of encryptions configurable on Amazon S3?

Within Amazon S3, Server Side Encryption (SSE) is the simplest data encryption option available. SSE encryption manages the heavy lifting of encryption on the AWS side, and falls into two types: SSE-S3 and SSE-C.


2 Answers

There is now a checkbox named "Disable artifacts encryption" under the artifacts section which allows you to disable encryption when pushing artifacts to S3.

https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html

like image 102
epak96 Avatar answered Nov 06 '22 14:11

epak96


I know this is an old post but I'd like to add my experience in this regard.

My requirement was to get front end assets from a code commit repository, build them and put them in s3 bucket. s3 bucket is further connected with cloudfront for serving the static front end content (written in react in my case).

I found that cloudfront is unable to serve KMS encrypted content as I found KMS.UnrecognizedClientException when I hit the cloudfront Url. I tried to fix that and disabling encryption on aws codebuild artifacts seemed to be the easiest solution when I found this

However, I wanted to manage this using aws-cdk. This code snippet in TypeScript may come handy if you're trying to solve the same issue using aws-cdk

Firstly, get your necessary imports. For this answer it'd be the following:

import * as codecommit from '@aws-cdk/aws-codecommit';
import * as codebuild from '@aws-cdk/aws-codebuild';

Then, I used the following snippet in a class that extends to cdk Stack Note: The same should work if your class extends to a cdk Construct


// replace these according to your requirement
const frontEndRepo = codecommit.Repository
      .fromRepositoryName(this, 'ImportedRepo', 'FrontEnd'); 

const frontendCodeBuild = new codebuild.Project(this, 'FrontEndCodeBuild', {
      source: codebuild.Source.codeCommit({ repository: frontEndRepo }),
      buildSpec: codebuild.BuildSpec.fromObject({
        version: '0.2',
        phases: {
          build: {
            commands: [
              'npm install && npm run build',
            ],
          },
        },
        artifacts: {
          files: 'build/**/*'
        }
      }),
      artifacts: codebuild.Artifacts.s3({
        bucket: this.bucket, // replace with s3 bucket object
        includeBuildId: false,
        packageZip: false,
        identifier: 'frontEndAssetArtifact',
        name: 'artifacts',
        encryption: false // added this to disable the encryption on codebuild
      }),
    });

Also to ensure that everytime I push a code in the repository, a build is triggered, I added the following snippet in the same class.

// add the following line in your imports if you're using this snippet
// import * as targets from '@aws-cdk/aws-events-targets';

frontEndRepo.onCommit('OnCommit', {
  target: new targets.CodeBuildProject(frontendCodeBuild),
});

Note: This may not be a perfect solution, but it's working well for me till now. I'll update this answer if I find a better solution using aws-cdk

like image 45
kots_14 Avatar answered Nov 06 '22 12:11

kots_14