Infrastructure as Code
Microservices architectures typically require more frequent provisioning of compute resources. Having more nodes in a system increases the attack surface that an attacker could scan for possible vulnerabilities. One of the easiest ways to leave a system vulnerable is to lose track of the inventory and leave multiple, heterogeneous configurations active. Before configuration-management systems, such as, Puppet or Ansible were popular, it was common to have a set of custom shell scripts that would bootstrap new servers in a system. This worked well enough, but as the needs of the system grew, and the shell scripts were modified, it became unwieldy to bring older parts of the system up to date with the changing standards. This type of configuration drift would often leave legacy parts of a system vulnerable to attack. Configuration-management solved many of these problems by allowing teams to use code, usually with a declarative syntax, to describe how nodes in a system...