20 essential security best practices every DevOps team should start with
Wiz Experts Team
7 min read
In its early stages, DevOps focused primarily on integrating development and operations teams to improve the software development process. Over time, the scope of DevOps expanded to include security (especially when it comes to cloud platforms like AWS, Azure, and Google Cloud), giving rise to the term "DevSecOps." The integration of security signifies a major shift, emphasizing a comprehensive approach where security measures are a key part of the entire development process instead of an afterthought right before deployment.
AWS DevOps security best practices, Azure DevOps security best practices, and Google Cloud DevOps security best practices all emphasize the importance of proactive security measures. But proactively addressing security is just the first step. Let’s take a closer look at two equally important DevSecOps concepts:
In security, ”shifting left” refers to integrating security measures earlier in the development lifecycle, ideally during the development phase. This approach emphasizes fast detection and resolution of vulnerabilities, which can significantly reduce the risks associated with security breaches in the later stages. Simply put, by shifting left, teams can promptly identify and address security issues, fostering a culture where security is everyone’s responsibility from the inception of a project.
Democratizing security refers to the collaborative approach discussed above where every team member—not just the security experts—is responsible for maintaining security standards. By democratizing security, it becomes a shared mission where everyone has a stake in ensuring the safety and integrity of the system, breaking down traditional barriers and creating a culture of collective vigilance.
Cloud environments, while offering scalability and flexibility, have unique security challenges. These include data breaches, misconfigurations, and inadequate access controls. It's essential to understand the shared responsibility model when working with cloud providers and ensure that both parties are clear about their respective security responsibilities.
Implement cloud security posture management (CSPM) tools: Platforms such as Microsoft Defender for Cloud visibility into cloud environments and help detect misconfigurations, ensuring compliance with security policies.
Adopt a zero-trust security model: Ensure every access request, regardless of origin, undergoes strict identity verification and validation, minimizing the chances of unauthorized access.
Regularly review and refine cloud configurations:Misconfigurations are a leading cause of data breaches in cloud environments. Regular audits can help identify and rectify these vulnerabilities promptly.
Secrets management is crucial for securely handling sensitive information like API keys, database credentials, and other secrets. Mismanagement or exposure of these secrets can lead to serious security incidents, compromising systems and data.
Adopt a centralized secrets management solution: Platforms like HashiCorp's Vault or AWS Secrets Manager allow for secure storage, access, and rotation of secrets, ensuring they're not exposed or mishandled.
Rotate secrets regularly: By changing secrets at regular intervals, you can reduce the window of opportunity for an attacker to use a compromised secret.
Avoid hardcoding secrets in code: Always use environment variables or secrets management platforms to inject secrets into applications, ensuring they are not exposed in the codebase or version control systems.
Version control systems are a pivotal means of tracking changes to code over time, allowing for collaboration and rollback functionalities. They are the backbone of modern software development processes, maintaining code integrity and facilitating teamwork. Beyond these core functions, implementing version control also acts as a protective layer, minimizing the risk of inadvertently exposing sensitive data and providing strong defensive measures against potential security threats to the application.
Use platforms like GitHub or Bitbucket: These platforms offer robust version control systems that help teams track and manage changes efficiently.
Regularly audit commit history for sensitive data: Periodic audits can help identify and rectify instances where sensitive data might have been inadvertently exposed.
Use .gitignore to exclude sensitive files: To specify the files and directories that should be excluded from version control, take advantage of .gitignore. By excluding particular files, you can prevent the accidental upload of sensitive information:
# .gitignore filesecret_config.yaml
Utilize pre-commit hooks: Set up a pre-commit hook to further ensure that secrets are not inadvertently committed to your VCS repository. Navigate to the .git/hooks directory in your repository and create or edit the pre-commit file. Here's an example that checks for the presence of the word "SECRET" in your files:
#!/bin/shif git diff --cached | grep 'SECRET'; thenecho"Error: Found secrets in your changes. Please remove them before committing."exit 1
Leveraging scripts and tools to perform tests automatically helps identify vulnerabilities at an early development stage. Automated testing not only accelerates the feedback loop but also ensures consistent and repeatable validation of code changes, enhancing the overall quality and reliability of the software.
In the broader context of software development and delivery, automated testing serves as a cornerstone for continuous integration and continuous deployment (CI/CD) practices. By automating tests, development teams can seamlessly integrate new code into the main branch without the fear of introducing defects. This continuous testing, combined with automated build and deployment processes, paves the way for faster release cycles and ensures that the end users always have access to the latest, well-tested features. As businesses strive for agility in the rapidly evolving tech landscape, the significance of automated testing in achieving quicker time to market cannot be overstated.
Integrate tools like OWASP into CI/CD pipelines: OWASP, which stands for the Open Worldwide Application Security Project, offers a comprehensive set of resources and tools designed to identify and address web application security risks. By integrating OWASP into your CI/CD pipelines, you can proactively detect security vulnerabilities in the application and ensure you're in line with DevOps security monitoring best practices.
Regularly update and refine test cases: Outdated test cases lead to missed vulnerabilities. That’s why it’s a good idea to schedule time to review and refine your parameters.
In software development, dependency management is the disciplined approach to identifying, documenting, and maintaining a list of the software dependencies a project relies on. Vulnerable dependencies can compromise an entire application, making it susceptible to security breaches. Take these steps to ensure that all dependencies are up to date and secure:
Use tools like Dependabot: These tools automatically identify and update vulnerable dependencies.
Regularly review and update dependencies: Establish a routine to review and update dependencies to the latest secure versions.
Containers are a technology that package an application and its dependencies together, facilitating consistency across various environments. The downside is they can harbor vulnerabilities, making container security an important focus of DevOps. Implementing container security practices ensures the containers are secure and resilient against potential attacks.
Regularly scan container images: Tools such as Clair can help identify vulnerabilities in container images:
# Example of Clair analysis report $ clairctl report ubuntu:focal
ubuntu:focal found bash 5.0-6ubuntu1.1 CVE-2019-18276ubuntu:focal found libpcre32:8.39-12build1 CVE-2017-11164ubuntu:focal found libpcre32:8.39-12build1 CVE-2019-20838ubuntu:focal found libpcre32:8.39-12build1 CVE-2020-14155ubuntu:focal found libsystemd0245.4-4ubuntu3.2 CVE-2018-20839ubuntu:focal found libsystemd0245.4-4ubuntu3.2 CVE-2020-13776ubuntu:focal found libtasn1-64.16.0-2 CVE-2018-1000654...
Use minimal base images and remove unnecessary components: This practice reduces the attack surface by limiting the elements that can be exploited.
Infrastructure-as-code (IaC) security
Infrastructure as code (IaC) is a modern practice that allows for the automated setup, configuration, and management of servers and other infrastructure components using code templates. This code can be versioned and reviewed just like any other codebase. However, it can sometimes introduce misconfigurations, which may expose applications to threats. Follow these recommendations to integrate security checks into IaC processes and maintain a robust security posture:
Use tools to scan IaC templates: Checkov and Terrascan can help identify potential security issues in your IaC templates.
Regularly review and refine IaC templates: IaC templates define the desired state of infrastructure components, making them blueprints for your environment's setup. By reviewing these templates periodically, you can catch and fix any misconfigurations or outdated practices.
Access control defines who can access which resources in a system, ensuring that only authorized individuals have permissions for critical resources. Implement stringent access control measures to safeguard sensitive data and prevent potential data breaches:
Implement role-based access control (RBAC): Role-based access control (RBAC) provides a structured method for assigning permissions based on an individual's role within an organization. By utilizing RBAC, administrators can ensure that users only access the resources and perform the tasks that align with their specific roles. This method minimizes the potential for security breaches by limiting unnecessary access.
# Example Kubernetes RBAC policy to access pods read-only in database namespaceapiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:
namespace: databasename: pod-viewerrules:
- apiGroups: [""]
verbs: ["get", "watch", "list"]
Regularly review and update access permissions: As organizations grow and evolve, roles and responsibilities can shift, leading to changes in who should have access to specific resources. Periodic reviews of access permissions ensure that only the appropriate individuals retain access rights, thereby reducing potential security risks. You can prevent unauthorized access due to outdated or overly permissive settings by staying vigilant and updating permissions in line with organizational changes.
Going beyond the basics
When it comes to DevOps security, the landscape is always evolving. New challenges and solutions emerge continually, and it’s a good idea to go beyond fundamental best practices.
Want to level up even more? Schedule a Wiz demo, and see for yourself how we’ve consolidated our industry-leading DevOps security solutions into a single platform.
Security Built for Devs and DevOps
Learn why Wiz is one of the few cloud security platforms loved by both security and DevOps teams.