CloudFormation templates are essential for building AWS infrastructure, but they can sometimes harbor security issues. Enter cfn-nag, a powerful tool that helps identify potential security vulnerabilities in your CloudFormation files. In this article, we will guide you through the installation, usage, and troubleshooting of cfn-nag so you can confidently secure your cloud infrastructure.
What is cfn-nag?
cfn-nag scans CloudFormation templates for patterns that may indicate insecure infrastructure setups, such as:
- Too permissive IAM rules (wildcards)
- Dangerous security group rules (wildcards)
- Missing access logs
- Lack of encryption
- Presence of password literals
For further reading on how it helps identify issues early in the development process, check out this post on Stelligent’s blog.
Installation
Gem Installation
If you have Ruby 2.5.x installed, you can install cfn-nag by running the following command:
gem install cfn-nag
Homebrew Installation
For MacOS or Linux users, cfn-nag can also be installed via Homebrew:
brew install ruby
brew gem install cfn-nag
How to Use cfn-nag
To scan your CloudFormation templates using cfn-nag, you can execute the following command:
cfn_nag_scan --input-path path/to/cloudformation.json
Here, path/to/cloudformation.json can be a specific template file or a directory containing multiple templates. cfn-nag will automatically process all supported file types.
The output format defaults to free-form text, but you can opt for JSON by adding the –output-format json flag. For debugging purposes, include –debug for verbose output.
Understanding the Output
Upon execution, cfn-nag will display the results in the console:
- A failing violation will return a non-zero exit code.
- A warning will return a zero success exit code.
- A fatal violation halts the analysis due to severe template issues.
Running cfn-nag in Different Environments
Docker
You can run cfn-nag inside a Docker container. This is useful when you want to avoid installing Ruby and its dependencies directly on your machine. To use Docker, you can pull the image:
docker pull stelligent/cfn_nag
Then, mount your template directory and execute cfn-nag inside the container:
docker run -v "$(pwd)/test_templates":/templates -t stelligent/cfn_nag /templates/test_template.json
Using cfn-nag as a GitHub Action
If you want to incorporate cfn-nag into your CI/CD pipeline, you can add it as a step in your GitHub Workflow file:
- name: Simple test
uses: stelligent/cfn_nag@master
with:
input_path: tests
Troubleshooting cfn-nag
- Ensure you are using a compatible version of Ruby (2.5.x).
- If the scan fails, double-check the file paths and formats of your CloudFormation templates.
- For issues related to Docker, ensure that your paths are correctly mounted and accessible.
- If you continue to face problems, consider exploring the issue tracker on the cfn-nag GitHub repository.
- For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.
At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.
Conclusion
cfn-nag is an essential tool for maintaining security in your AWS infrastructure as code practice. By effectively scanning for vulnerabilities, it equips developers with the knowledge needed to build secure applications. Follow the steps outlined in this article to seamlessly integrate cfn-nag into your development workflow.

