This is a continuation of articles on
Infrastructure-as-code aka IaC for short. There’s no denying that IaC can help
to create and manage infrastructure and that they can be versioned, reused, and
shared – all of which helps to provision resources quickly and consistently and
manage them consistently throughout their lifecycle. Unlike software product
code that must be general purpose and provide a strong foundation for system
architecture and aspiring to be a platform for many use cases, IaC often varies
a lot and must be manifested in different combinations depending on
environment, purpose and scale and encompass complete development process. It
can even include CI/CD platform, DevOps, and testing tools. The DevOps based
approach is critical to rapid software development cycles. This makes IaC
spread over in a variety of forms. The more articulated the IaC the more
predictable and cleaner the deployments.
One of the greatest advantages of using IaC is its elaborate
description of the customizations to a resource type for widespread use within
an organization. Among the reasons for customization, company policy
enforcement, security and consistency can be called out as the main ones. For
example, an Azure ML workspace might require some features to be allowed and
others to be disallowed before other members of the organization can start
making use of it.
There are several ways to do this. Both ARM Templates and azure cli
commands come with directives to turn off features. In fact, the ‘az feature’
command line options are available on a provider-by-provider basis to register
or unregister specific features. This ability is helpful separate out the
experimental from the production feature set and allows them to be made
available independently. Plenty of documentation around the commands and the
listing of all such features makes it easy to work on one or more of them
directly.
Another option is to display all the configuration corresponding to a
resource once it has been selectively turned on from the portal. Since each
resource type comes with its own ARM templates as well as command set, it is
easy to leverage the built-in ‘show’ command to list all properties of the
resource type and then edit some of those properties for a different deployment
by virtue of the ‘update’ command. Even if all the properties are not listed
for a resource, it is possible to find them in the documentation or by querying
many instances of the same resource type.
A third option is to list the operations available on the resource and
then set up role-based access control limiting some of those. This approach is
favored because users can be switched between roles without affecting the
resource or its deployment. It also works for groups and users can be added or
removed from both groups and roles. Listing the operations enumerates the
associated permissions all of which begin with the provider as the prefix. This
listing is thorough and covers all aspect of working with the resources. The
custom-role is described in terms of permitted ‘actions’, ‘data-actions’ and
‘not-actions’ where the first two correspond to control and data plane
associated actions and the last one corresponds to deny set that takes
precedence over control and data plane actions. By appropriately selecting the
necessary action privileges and listing them under a specific category without
the categories overlapping, we create the custom role with just the minimum number
of privileges needed to complete a set of selected tasks.
Last but not the least approach, is to supply an init script with the
associated resource, so that as other users start using it, the init script
will set the predecided configuration that they must work with. This allows for
some degree of control on sub resources and associated containers necessary for
an action to complete so that by virtue of removing those resources, an action
even if permitted by a role on a resource type, may not be permitted on a
specific resource.
IaC is not an immutable asset once it is properly
authored. It must be maintained just as any other source code asset. Part of
the improvements come from fixes to defects, design changes but in the case of
IaC specifically, there are other changes coming from drift detection and cloud
security posture management aka CSPM.
Reference: Earlier articles on IaC shortcomings
and resolutions: IacResolutionsPart35.docx
No comments:
Post a Comment