Coder Social home page Coder Social logo

isabella232 / pulumi-policy-aws Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pulumi/pulumi-policy-aws

0.0 0.0 0.0 294 KB

A policy pack of rules to enforce AWS best practices for security, reliability, cost, and more!

Home Page: https://www.pulumi.com

License: Apache License 2.0

Shell 1.70% JavaScript 1.29% Go 11.87% TypeScript 79.06% Makefile 6.08%

pulumi-policy-aws's Introduction

Build Status

Pulumi CrossGuard policies for AWS (Preview)

NOTE: This library is part of Pulumi's Policy as Code offering. It is currently being previewed and is subject to breaking changes. We've included an initial set of policies for AWS and are in the process of adding many more.


Overview

AWSGuard codifies best practices for AWS. This is a configurable library that you can use to enforce these best practices for your own Pulumi stacks or organization.

For more information on Pulumi's Policy as Code solution, visit our docs.

Trying AWSGuard

In this guide, we'll show you how to create a Policy Pack that configures and uses the policies available in AWSGuard.

Prerequisites

Verify your version of the Pulumi CLI

pulumi version # should be v2.0.0 or later

Authoring a Policy Pack that uses AWSGuard policies

To use AWSGuard policies, you must create a Policy Pack that references the @pulumi/awsguard npm package and in the implementation of the Policy Pack, create a new instance of the AwsGuard class.

  1. Create a directory for your new Policy Pack, and change into it.

    mkdir awsguard && cd awsguard
  2. Run the pulumi policy new command.

    pulumi policy new awsguard-typescript
  3. Tweak the code in the index.ts file as desired. The default implementation provided by the awsguard-typescript template simply creates a new instance of AwsGuard with all policies set to have an enforcement level of advisory.

    new AwsGuard({ all: "advisory" });

    From here, you can change the enforcement level for all policies or configure individual policies.

    For example:

    To make all policies mandatory rather than advisory:

    new AwsGuard({ all: "mandatory" });

    To make all policies mandatory, but change certain policies to be advisory:

    new AwsGuard({
        all: "mandatory",
        ec2InstanceNoPublicIP: "advisory",
        elbAccessLoggingEnabled: "advisory",
    });

    To disable a particular policy:

    new AwsGuard({
        ec2InstanceNoPublicIP: "disabled",
    });

    To disable all policies except ones explicitly enabled:

    new AwsGuard({
        all: "disabled",
        ec2InstanceNoPublicIP: "mandatory",
        elbAccessLoggingEnabled: "mandatory",
    });

    To specify additional configuration for policies that support it:

    new AwsGuard({
        ec2VolumeInUse: { checkDeletion: false },
        encryptedVolumes: { enforcementLevel: "mandatory", kmsId: "id" },
        redshiftClusterMaintenanceSettings: { preferredMaintenanceWindow: "Mon:09:30-Mon:10:00" },
        acmCertificateExpiration: { maxDaysUntilExpiration: 10 },
    });

Test the new Policy Pack

Policy Packs can be tested on a user's local workstation to facilitate rapid development and testing of policies.

  1. Run npm install in the Policy Pack directory.

  2. Use the --policy-pack flag with pulumi preview or pulumi up to specify the path to the directory containing your Policy Pack when previewing/updating a Pulumi program.

    If you don’t have a Pulumi program readily available, you can create a new project for testing by running pulumi new aws-typescript in an empty directory. This AWS example will create an S3 bucket, which is perfect for testing our Policy.

    In the Pulumi project's directory run:

    pulumi preview --policy-pack <path-to-policy-pack-directory>

    If the stack is not in compliance, the policy violation will be displayed. Since the enforcement level for all policies are set to advisory, a warning is shown for any resources that are not in compliance with the AWSGuard policies. In this case, logging must be defined for S3 buckets.

    Previewing update (dev):
    
        Type                 Name           Plan       Info
    +   pulumi:pulumi:Stack  test-dev       create
    +   └─ aws:s3:Bucket     my-bucket      create     1 warning
    
    Policy Violations:
        [advisory]  pulumi-awsguard v0.0.1  s3-bucket-logging-enabled (my-bucket: aws:s3/bucket:Bucket)
        Checks whether logging is enabled for your S3 buckets.
        Bucket logging must be defined.
    
  3. If you had wanted the preview to fail for any policy violations, the Policy Pack can be modified to configure all policies to be mandatory.

    new AwsGuard({ all: "mandatory" });
  4. Running the pulumi preview command again will now fail the preview operation.

    Previewing update (dev):
    
        Type                 Name           Plan       Info
    +   pulumi:pulumi:Stack  test-dev       create     1 error
    +   └─ aws:s3:Bucket     my-bucket      create     1 error
    
    Diagnostics:
      pulumi:pulumi:Stack (test-dev):
        error: preview failed
    
    Policy Violations:
        [mandatory]  pulumi-awsguard v0.0.1  s3-bucket-logging-enabled (my-bucket: aws:s3/bucket:Bucket)
        Checks whether logging is enabled for your S3 buckets.
        Bucket logging must be defined.
    
  5. If you do not want to enforce this particular policy, you can modify the Policy Pack to disable it.

    new AwsGuard({
        all: "mandatory",
        s3BucketLoggingEnabled: "disabled",
    });

pulumi-policy-aws's People

Contributors

justinvp avatar tusharshahrs avatar chrsmith avatar ekrengel avatar stack72 avatar jaxxstorm avatar andrewpurdin avatar jkisk avatar rsclarke-vgw avatar phillipedwards avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.