<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Research on security as code approach for cloud-native applications based on Kubernetes clusters⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Oleksandr Vakhula</string-name>
          <email>oleksandr.p.vakhula@lpnu.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ivan Opirskyy</string-name>
          <email>ivan.r.opirskyi@lpnu.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>CSDP-2024: Cyber Security and Data Protection</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Lviv Polytechnic National University</institution>
          ,
          <addr-line>12 Stepan Bandera str., 79000 Lviv</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <fpage>58</fpage>
      <lpage>69</lpage>
      <abstract>
        <p>The fast evolution of cloud-native applications and the widespread adoption of Kubernetes clusters have revolutionized how modern software is developed, deployed, and managed. However, this paradigm shift has introduced new security challenges that require innovative solutions. This research explores the “Security as Code” (SaC) approach, which integrates security policies and practices into the development and deployment pipelines of cloud-native applications on Kubernetes clusters. The study begins by outlining the theoretical foundations of the SaC approach, emphasizing the need for automated and consistent security measures across all stages of the software development lifecycle. We then explore the implementation of the policy engine and its gatekeeper component, as core tools for enforcing security policies within Kubernetes environments. The research details the setup process on AWS using a costeffective configuration, augmented with GitOps tool for continuous deployment and container image vulnerability scanner. Our methodology includes configuring OPA Gatekeeper for admission control, defining and applying constraint templates, and integrating FluxCD to automate policy deployment and enforcement. We provide a step-by-step guide for setting up the environment, ensuring that the approach is practical and reproducible. The findings demonstrate that the SaC approach significantly improves security management in cloud-native environments, offering a scalable and flexible framework for integrating security into DevOps workflows. This research contributes to the broader understanding of how security can be codified and automated, paving the way for more secure and resilient cloud-native applications.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;security-as-code</kwd>
        <kwd>cloud-native applications</kwd>
        <kwd>Kubernetes clusters</kwd>
        <kwd>open policy agent</kwd>
        <kwd>gatekeeper</kwd>
        <kwd>GitOps</kwd>
        <kwd>continuous deployment</kwd>
        <kwd>container security</kwd>
        <kwd>DevOps</kwd>
        <kwd>policy-as-code</kwd>
        <kwd>service mesh</kwd>
        <kwd>shift-left security1</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>The introduction of cloud-native applications has marked a
significant shift in the landscape of software development
and deployment. These applications, designed to leverage
the advantages of cloud computing, offer unparalleled
scalability, flexibility, and resilience. At the heart of this
transformation is Kubernetes, an open-source container
orchestration platform that has become the de facto
standard for deploying, scaling, and managing
containerized applications.</p>
      <p>While Kubernetes simplifies many aspects of
application management, it also introduces new security
challenges. Traditional security practices often struggle to
keep pace with the dynamic and ephemeral nature of
cloudnative environments. This gap has led to the emergence of
the “Security as Code” (SaC) paradigm, which aims to
embed security directly into the development and
operational processes through code.</p>
      <p>Security as Code involves defining security policies and
controls as code, allowing them to be versioned, reviewed,
and deployed alongside application code. This approach
ensures that security measures are consistently applied and
automatically enforced across all environments, from
development to production. By integrating security into the
DevOps pipeline, organizations can achieve continuous
security and compliance, reducing the risk of vulnerabilities
and misconfigurations.</p>
      <p>This research focuses on implementing the SaC
approach within Kubernetes clusters, leveraging Open
Policy Agent (OPA) and its Gatekeeper component. OPA is
a general-purpose policy engine that enables the
enforcement of fine-grained, context-aware policies.
Gatekeeper extends OPA's capabilities by integrating with
Kubernetes admission controllers, allowing policies to be
enforced at the time of resource creation and modification.</p>
      <p>Additionally, this study incorporates FluxCD, a
continuous delivery tool for Kubernetes, and Trivy, a
comprehensive vulnerability scanner for container images.
By combining these tools, we aim to create a robust
framework for automating security policy enforcement and
continuous monitoring of container vulnerabilities.</p>
      <p>The goal of this research is to demonstrate the practical
implementation and effectiveness of the Security as Code
approach in Kubernetes environments. Specifically, we aim
to integrate and automate security policies, ensuring
0009-0008-5367-3344 (O. Vakhula); 0000-0002-8461-8996 (I. Opirskyy)
© 2024 Copyright for this paper by its authors. Use permitted under
Creative Commons License Attribution 4.0 International (CC BY 4.0).
continuous security and compliance throughout the
development lifecycle of cloud-native applications.




</p>
      <p>Define Security Policies: Create and codify
security policies that can be enforced within
Kubernetes clusters using OPA Gatekeeper.</p>
      <p>Automate Policy Enforcement: Integrate security
policies into the CI/CD pipeline to ensure
automated and consistent enforcement.</p>
      <p>Implement Continuous Deployment: Use FluxCD
to manage and automate the deployment of
Kubernetes manifests, ensuring the desired state of
the cluster is maintained.</p>
      <p>Vulnerability Scanning: Incorporate Trivy to scan
container images for vulnerabilities, adding a layer
of security.</p>
      <p>Cost-Effective Setup: Establish a cost-effective
environment for testing and deploying the SaC
solutions, particularly in cloud environments like
AWS.</p>
      <p>The swift adoption of Kubernetes as a container
orchestration platform has revolutionized the deployment
and management of cloud-native applications. However,
this shift has also introduced significant security challenges
that traditional security approaches are ill-equipped to
address. The need for dynamic, automated, and scalable
security measures has become crucial.</p>
      <p>The primary problem this research addresses is the
implementation of a “Security as Code” (SaC) approach in
Kubernetes-based cloud environments. Specifically, the
challenges include вynamic and ephemeral nature of
containers, containers are inherently ephemeral and
dynamic; сomplexity of Kubernetes, Kubernetes, while
powerful, introduces significant complexity with its
numerous components (e.g., API server, etcd, scheduler,
controllers); multi-tenancy and Isolation; integration with
existing security tools; continuous security and compliance;
visibility and monitoring.</p>
      <p>Through this research, we aim to explore and address
these challenges by providing a detailed implementation
guide, evaluating the effectiveness of automated security
policies, and offering practical insights into integrating
security as code into Kubernetes-based workflows. By doing
so, we contribute to the broader discourse on enhancing the
security of cloud-native applications through innovative
code-centric approaches.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related works</title>
      <p>The field of container orchestration and security has
evolved significantly over the past decade, with numerous
contributions from both academia and industry. This
section reviews some of the seminal works and current
research related to the “Security as Code” approach in
Kubernetes environments.</p>
      <p>The article “Borg, Omega, and Kubernetes” by Burns et
al. from Google Inc. provides an in-depth look at the
evolution of container management systems within Google,
starting with Borg, moving to Omega, and finally to
Kubernetes. This progression highlights the increasing
sophistication and scalability of container orchestration,
emphasizing key innovations such as Borg, the initial
system developed to manage both long-running services
and batch jobs. Borg introduced resource sharing between
different types of applications, significantly improving
resource utilization. Omega, built to improve the software
engineering of Borg, introduced a more consistent and
principled architecture, using a centralized Paxos-based
transaction-oriented store. Kubernetes was designed for a
broader developer audience, emphasizing ease of use for
deploying and managing distributed systems, leveraging a
shared persistent store accessed through a REST API.
Kubernetes’ architecture is designed to support scalability
and flexibility while enforcing consistent security policies.
This is achieved through a centralized API server that
ensures all state changes are validated, defaulted, and
versioned, providing a robust foundation for enforcing
policies and maintaining system invariants. Reconciliation
controllers improve resiliency by continuously aligning the
desired and observed states, a concept shared with Borg and
Omega [1].</p>
      <p>“Kubernetes Security: Securing Microservices and
Applications in the Cloud” by O’Reilly Media is a
comprehensive guide that explores various security
challenges and best practices for securing Kubernetes
clusters. It covers topics such as securing the Kubernetes
API server, controlling access with RBAC, network security
policies, and monitoring and auditing Kubernetes clusters.
The book emphasizes the importance of integrating security
throughout the development lifecycle and provides
practical examples of implementing security measures [2].</p>
      <p>Practical guides and best practices for Kubernetes
security, such as those by AquaSec and Red Hat, provide
comprehensive overviews of necessary security measures.
These include network policies to control traffic between
pods, secret management to securely manage sensitive
information, and admission controllers to enforce security
policies at the point of deployment, ensuring that only
compliant configurations and container images are
deployed [3–4].</p>
      <p>The concept of Policy as Code, particularly with tools
like Open Policy Agent (OPA), has gained traction for
automating and enforcing security policies within
Kubernetes. Works such as those by O'Reilly and industry
blogs discuss implementing OPA for dynamic policy
enforcement, highlighting its flexibility and power in
managing complex security policies programmatically [5].</p>
      <p>The article “XI Commandments of Kubernetes Security:
A Systematization of Knowledge Related to Kubernetes
Security Practices” provides a systematic approach to
securing Kubernetes environments by identifying eleven
critical security practices. These practices, derived from a
comprehensive analysis of internet artifacts, include
RoleBased Access Control (RBAC), network policies, and regular
security patching. The systematic approach offers a
structured framework for practitioners to enhance the
security posture of their Kubernetes deployments [6].</p>
      <p>The research article “Comprehensive Approach for
Developing an Enterprise Cloud Infrastructure” by Khoma
et al. emphasizes the need for a multilevel security approach
in cloud environments. The article outlines the limitations
of existing “Security as Code” practices and proposes a
comprehensive framework to enhance cloud infrastructure
security. Key aspects include effective access and privilege
management, logical isolation of network resources,
continuous monitoring, and automated response to
anomalies. This comprehensive approach aligns well with
the principles of “Security as Code” by integrating security
into every layer of the cloud infrastructure, thus providing
a robust foundation for secure cloud-native applications [7].</p>
      <p>The paper “Cloud Container Technologies: A
State-ofthe-Art Review” by Pahl et al. provides a systematic
mapping study of container technologies and their
orchestration, particularly in cloud environments. The
study identifies and classifies 46 selected studies on
container technologies, highlighting the key concerns and
trends in the field. It reveals that container technologies
positively impact both development and deployment
aspects, supporting continuous development and
deployment pipelines. However, the study also notes the
lack of tool support to automate and facilitate container
management and orchestration, particularly in clustered
cloud architectures. The findings underscore the need for
advanced orchestration support and the importance of
container-based orchestration techniques in balancing
optimized resource utilization and performance in the cloud
[8].</p>
      <p>The paper “Expanding DevSecOps Practices and
Clarifying the Concepts within Kubernetes Ecosystem” by
Alawneh and Abbadi discusses the integration of
DevSecOps principles within Kubernetes environments.
The authors highlight the importance of incorporating
security by design within organizational processes,
including development, deployment, and operational
management. The paper outlines several real-life examples
that illustrate the integration of security into each practice,
emphasizing how DevSecOps practices can enhance
application delivery, resilience, elasticity, availability, and
reliability. The paper also addresses the challenges of
establishing robust mechanisms for integrating security
within existing DevOps practices and provides insights into
the roles of DevSecOps practices in securing the Kubernetes
ecosystem. This work aligns with the Security as Code
approach by demonstrating how security can be seamlessly
integrated into the Kubernetes lifecycle, thereby enhancing
the overall security posture of cloud-native applications [9].</p>
      <p>The literature review highlights the importance of
adopting a security-as-code approach in modern
cloudnative environments. By automating and codifying security
policies, organizations can achieve continuous security,
maintain compliance, and build more resilient systems. The
articles and studies reviewed provide valuable insights,
practical examples, and best practices that can guide
practitioners in enhancing the security of their Kubernetes
deployments. These resources emphasize the critical role of
policy automation, continuous monitoring, and integration
of security into DevOps practices in building secure and
compliant cloud-native applications.</p>
      <p>The research and resources analyzed above underscore
the critical importance of integrating security into the
development and operational processes of cloud-native
applications. By adopting a Security as Code approach and
leveraging tools like OPA Gatekeeper, FluxCD, and Trivy,
organizations can achieve continuous security and
compliance, ensuring that their Kubernetes environments
remain secure and resilient. These resources provide
valuable insights, practical examples, and best practices that
can guide practitioners in enhancing the security of their
cloud-native applications.</p>
      <p>The field of container orchestration and security has
evolved significantly over the past decade, with numerous
contributions from both academia and industry. This
section reviews some of the seminal works and current
research related to the “Security as Code” approach in
Kubernetes environments.</p>
    </sec>
    <sec id="sec-3">
      <title>3. General overview of container cluster and Kubernetes orchestration</title>
      <p>Container clusters and orchestration are fundamental to
modern application deployment and management.
Containers encapsulate an application and its dependencies,
providing a consistent environment across development,
testing, and production. Orchestration is crucial for
managing these containers at scale, ensuring efficient
resource utilization, high availability, and automated
workflows. Kubernetes has emerged as the leading
orchestration platform, offering robust tools for deploying,
scaling, and operating containerized applications across
clusters of machines.</p>
      <p>
        Kubernetes clusters are highly versatile and can be
utilized to manage and orchestrate a range of innovative
technologies. In blockchain [
        <xref ref-type="bibr" rid="ref7">10</xref>
        ], Kubernetes supports
platforms like Hyperledger Fabric and Ethereum, ensuring
scalable and resilient node deployment. For machine
learning and AI, tools like TensorFlow Serving and
Kubeflow benefit from Kubernetes’ scalability and
automated management. In big data, Kubernetes efficiently
manages Apache Spark and Elasticsearch clusters.
Kubernetes is also pivotal in IoT with edge computing
solutions like KubeEdge and in CI/CD with Jenkins X and
Argo CD. Additionally, it supports microservices and
serverless architectures through Istio and Knative, and
manages databases such as Cassandra and PostgreSQL,
making it an essential tool for modern, cloud-native
applications.
      </p>
      <p>Core Concepts</p>
      <p>Containers are lightweight, portable, and consistent
units of software that include everything needed to run an
application. Unlike traditional virtual machines, containers
share the host system’s kernel but operate in isolated user
spaces. A container cluster is a group of interconnected
nodes that work together to provide a scalable and resilient
environment for running containerized applications. This
clustering allows for efficient resource sharing, load
balancing, and fault tolerance, making it possible to manage
thousands of containers seamlessly.</p>
      <p>Kubernetes Architecture (Fig. 1):</p>
      <p>
        Kubernetes architecture consists of a master node and
multiple worker nodes. The master node controls the
cluster, housing components such as the API server, etcd (a
key-value store for cluster data), the scheduler, and the
controller manager. The API server serves as the main
interface for interaction with the cluster. Etcd stores all
cluster configuration data persistently. The scheduler
assigns workloads to nodes based on resource availability,
and the controller manager handles routine tasks like
replication and state management. Worker nodes run the
actual applications in containers, managed within pods,
which are the smallest deployable units in Kubernetes [
        <xref ref-type="bibr" rid="ref8 ref9">11–
12</xref>
        ].
Operational Features:
      </p>
      <p>Kubernetes provides several critical operational
features to enhance the management and resilience of
containerized applications. Self-healing capabilities
automatically replace failed containers, ensuring
continuous availability. Load balancing distributes network
traffic evenly across all running containers, optimizing
resource usage and performance. Automated rollouts and
rollbacks allow for seamless updates and rollbacks of
applications without downtime, ensuring that deployments
are both reliable and consistent. These features collectively
contribute to the robustness and efficiency of Kubernetes
as an orchestration platform.</p>
      <p>Declarative Configuration:</p>
      <p>Kubernetes employs a declarative approach to
configuration management, where the desired state of the
system is defined in configuration files using YAML or JSON.
Users specify what the end state should be, and Kubernetes
takes responsibility for achieving and maintaining that state.
This approach simplifies management, as Kubernetes
continuously monitors the current state and makes necessary
adjustments to align it with the desired state. It ensures
consistency, and repeatability, and reduces the complexity of
managing configurations manually.</p>
      <p>
        In summary, Kubernetes has revolutionized the
orchestration of container clusters, providing robust tools
for managing containerized applications at scale. By
leveraging a sophisticated architecture, operational
features, and a declarative configuration approach,
Kubernetes ensures efficient, reliable, and consistent
application deployment and management. [
        <xref ref-type="bibr" rid="ref10">13</xref>
        ] This
overview sets the stage for understanding the complexities
and benefits of Kubernetes orchestration.
      </p>
      <p>In the next chapter, we will dive into the challenges
associated with implementing security in Kubernetes
environments, exploring the issues that must be addressed
to maintain robust security postures.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Problem statement: Challenges in implementing security for containerized services in cloud environments</title>
      <sec id="sec-4-1">
        <title>Let’s dive deeper into each of them:</title>
        <p>1. Dynamic and Ephemeral Nature of Containers:
Containers are inherently ephemeral and dynamic,
often created and destroyed within seconds. This transient
nature makes it difficult to maintain consistent security
policies and apply traditional security measures. Ensuring
that security policies are consistently applied to every
instance of a container can be challenging, leading to
potential security gaps.</p>
      </sec>
      <sec id="sec-4-2">
        <title>2. Complexity of Kubernetes:</title>
        <p>Kubernetes, while powerful, introduces significant
complexity with its numerous components (e.g., API server,
etcd, scheduler, controllers). Securing each component and
ensuring secure communication between them requires a
deep understanding of the Kubernetes architecture.
Misconfigurations and overlooked security settings can lead
to vulnerabilities, making the cluster susceptible to attacks.</p>
      </sec>
      <sec id="sec-4-3">
        <title>3. Multi-Tenancy and Isolation:</title>
        <p>In a multi-tenant environment, ensuring proper
isolation between different tenants’ workloads is crucial to
prevent unauthorized access and data leakage. Achieving
strong multi-tenancy security requires robust network
policies, resource quotas, and effective namespace
management, which can be complex to implement and
manage.</p>
      </sec>
      <sec id="sec-4-4">
        <title>4. Integration with existing Security Tools:</title>
        <p>
          Integrating Kubernetes with existing security tools and
processes can be difficult due to differences in how these
tools are designed to operate. Organizations may struggle to
leverage their existing security investments, leading to
potential gaps or redundant efforts in securing Kubernetes
environments [
          <xref ref-type="bibr" rid="ref11">14</xref>
          ].
        </p>
      </sec>
      <sec id="sec-4-5">
        <title>5. Continuous Security and Compliance:</title>
        <p>
          Maintaining continuous security and compliance in a
fast-paced, CI/CD-driven development environment is
challenging. Automated pipelines need to incorporate
security checks without hindering development velocity.
Ensuring that security checks are seamlessly integrated into
the CI/CD pipeline is essential to catch vulnerabilities early
and maintain compliance without slowing down
development [
          <xref ref-type="bibr" rid="ref12">15</xref>
          ].
        </p>
      </sec>
      <sec id="sec-4-6">
        <title>6. Visibility and Monitoring (Telemetry):</title>
        <p>Achieving comprehensive visibility and monitoring of
containerized applications across a distributed cloud
environment is challenging. Traditional monitoring tools
may not provide the granularity needed for container
environments. Lack of visibility can hinder the detection
and response to security incidents, making it difficult to
enforce security policies effectively.</p>
        <p>
          A critical issue highlighting these challenges is the fact
that only 0.79% of Kubernetes commits are security-related,
suggesting that security-related defects are under-reported
and could lead to large-scale security breaches. This statistic
underscores the need for a more proactive and integrated
approach to security within the Kubernetes ecosystem. By
addressing these problems, the implementation of a robust
“Security as Code” framework can ensure that Kubernetes
environments are secure, compliant, and resilient,
protecting them against the evolving threat landscape [
          <xref ref-type="bibr" rid="ref13">16</xref>
          ].
        </p>
        <p>Container security is a major concern for companies,
with four generalized use cases and solutions relying on
software-based and hardware-based solutions. Containers
emerged as a lightweight alternative to virtual machines
that offer better microservice architecture support. The
value of the container market is expected to reach $2.7
billion in 2020 compared to $762 million in 2016. Although
they are considered the standardized method for
microservices deployment, playing an important role in
cloud computing emerging fields such as service meshes,
market surveys show that container security is the main
concern and adoption barrier for many companies. The
literature on container security identifies four generalized
use cases that cover security requirements within the
hostcontainer threat landscape:</p>
        <p>Protecting a container from applications inside it.
Inter-container protection.</p>
        <p>Protecting the host from containers.</p>
        <p>Protecting containers from a malicious or
semihonest host.</p>
        <p>
          The first three use cases utilize software-based solutions
that mainly rely on Linux kernel features and Linux security
modules, the last use case relies on hardware-based solutions
such as trusted platform modules [
          <xref ref-type="bibr" rid="ref14">17</xref>
          ].
        </p>
        <p>The swift adoption of Kubernetes as a container
orchestration platform has revolutionized the deployment
and management of cloud-native applications. However,
this shift has also introduced significant security challenges
that traditional security approaches are ill-equipped to
address. The need for dynamic, automated, and scalable
security measures has become crucial.</p>
        <p>The primary problem this research addresses is the
implementation of a “Security as Code” (SaC) approach in
Kubernetes-based cloud environments.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Review security as a code concept</title>
      <p>
        The SaC paradigm aims to embed security policies and
practices into the development and deployment pipelines,
ensuring consistent and automated enforcement across all
stages of the application lifecycle. The “Security as Code”
approach in cloud environments involves embedding
security measures directly into the software development
and deployment process. This method enables the
automation of various security tasks, enhancing consistency
and effectiveness. It is especially crucial in cloud
environments, where rapid and flexible responses to
changes and emerging security challenges are required.
“Security as Code” helps in the early identification of
potential vulnerabilities and ensures compliance with
regulatory and security standards [
        <xref ref-type="bibr" rid="ref15">18</xref>
        ]. Despite its potential,
the practical implementation of SaC in Kubernetes
environments faces several challenges, which we should
take into account:
      </p>
      <sec id="sec-5-1">
        <title>1. Defining and Enforcing Security Policies:</title>
        <p>How can organizations define and enforce security
policies in a dynamic and scalable manner that aligns with
the ephemeral nature of containers?</p>
      </sec>
      <sec id="sec-5-2">
        <title>2. Automation and Integration:</title>
        <p>How can security policies be automated and integrated
into existing CI/CD pipelines to ensure continuous security
without hindering development velocity?</p>
      </sec>
      <sec id="sec-5-3">
        <title>3. Tooling and Best Practices:</title>
        <p>What are the best practices and tools (e.g., OPA
Gatekeeper, FluxCD, Trivy) for implementing SaC in
Kubernetes environments, and how can they be effectively
configured and managed?</p>
      </sec>
      <sec id="sec-5-4">
        <title>4. Cost-Effective Deployment: How can organizations set up a cost-effective environment for testing and deploying SaC solutions, particularly in cloud environments like AWS?</title>
        <p>This research aims to explore and address these
challenges by providing a detailed implementation guide,
evaluating the effectiveness of automated security policies,
and offering practical insights into integrating security as
code into Kubernetes-based workflows. By doing so, it
contributes to the broader discourse on enhancing the
security of cloud-native applications through innovative,
code-centric approaches.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Overview of solution based on security as a code in the context of containerized cloud-native application</title>
      <p>
        Open Policy Agent (OPA) is a general-purpose policy
engine that enables unified, context-aware policy
enforcement across the stack. OPA decouples policy
decisions from the application logic, allowing
administrators to manage policies centrally [
        <xref ref-type="bibr" rid="ref16">19</xref>
        ].
      </p>
      <p>
        OPA uses a high-level declarative language called Rego
to write policies. Rego allows users to define policies based
on various data inputs, supporting complex logic and
queries to determine policy compliance [
        <xref ref-type="bibr" rid="ref17">20</xref>
        ].
OPA can be integrated with a variety of systems, including
Kubernetes, CI/CD pipelines, microservices, and more (Fig.
3). In Kubernetes, OPA can enforce policies on resources
such as pods, deployments, and services. It can also
integrate with CI/CD pipelines to ensure compliance during
the build and deployment phases.
      </p>
      <p>Gatekeeper is an admission controller for Kubernetes
that uses OPA policies to enforce security and operational
rules within the cluster. It provides a framework for policy
enforcement and auditing, ensuring that all changes comply
with predefined policies before being accepted by the
Kubernetes API server.</p>
      <p>Policies in Gatekeeper are written using the Rego
language and configured as ConstraintTemplates. These
templates define the policy logic and the constraints that
must be met. Examples of common policies include
restricting certain container images, enforcing
namespacespecific policies, and ensuring resource quotas.</p>
      <p>Gatekeeper offers auditing and monitoring capabilities,
providing visibility into policy violations and historical data
for compliance audits. It helps identify non-compliant
resources and offers detailed reports on policy enforcement
across the cluster.</p>
      <p>Adding FluxCD to the setup enables continuous
deployment for the Kubernetes environment.</p>
    </sec>
    <sec id="sec-7">
      <title>7. Practical implementation</title>
      <p>The foundation of the architecture is an Amazon EC2
instance. This instance serves as the host for Minikube,
which is used to create a local Kubernetes cluster. Minikube
is installed and configured on the EC2 instance. It creates a
local Kubernetes cluster within the EC2 environment,
enabling Kubernetes functionalities in a contained setup.</p>
      <p>
        The Kubernetes cluster orchestrated by Minikube
consists of multiple nodes that manage containerized
applications. These nodes handle the deployment, scaling,
and operation of application containers. OPA (Open Policy
Agent) Gatekeeper is deployed within the Kubernetes
cluster. It acts as a policy enforcement tool, ensuring that all
resources and configurations within the cluster comply
with predefined policies. It intercepts admission requests
and validates them against the policies before allowing them
into the cluster. [
        <xref ref-type="bibr" rid="ref18 ref19">21–22</xref>
        ] Trivy is integrated into the
Kubernetes environment to scan container images for
vulnerabilities. It runs security scans on images either
before they are deployed or continuously as part of the
CI/CD pipeline. [
        <xref ref-type="bibr" rid="ref20">23</xref>
        ] Trivy helps in identifying and
mitigating potential security risks in container images.
FluxCD is installed in the Kubernetes cluster to manage
Kubernetes manifests and automate deployments based on
changes in a Git repository. FluxCD continuously monitors
the repository for changes and applies them to the cluster,
ensuring that the cluster state matches the declared state in
the Git repository. This process is known as GitOps. The
EC2 instance runs Minikube, which sets up the Kubernetes
cluster. Within this cluster, OPA Gatekeeper, Trivy, and
FluxCD are deployed as separate services. OPA Gatekeeper
enforces security and compliance policies by validating
resources during the admission process. Trivy scans the
container images used within the cluster for vulnerabilities,
ensuring that only secure images are deployed. FluxCD
watches the Git repository for changes and updates the
Kubernetes cluster configuration accordingly, automating
the deployment process and maintaining the desired state.
      </p>
      <p>This guide provides general steps for integrating
FluxCD into a Kubernetes environment set up with
Minikube on an EC2 instance, along with OPA Gatekeeper
and Trivy for security scanning of container images. The
steps include:</p>
      <p>Set Up Minikube on EC2: Install and configure
Minikube on an EC2 instance to create a local
Kubernetes cluster.</p>
      <p>Install OPA Gatekeeper: Deploy OPA Gatekeeper
to enforce policies within the Kubernetes cluster.
Integrate Trivy: Set up Trivy to scan container
images for vulnerabilities.</p>
      <p>Deploy FluxCD: Install FluxCD to manage
Kubernetes manifests and automate deployments
based on changes in a Git repository.</p>
      <sec id="sec-7-1">
        <title>Step 1: Launch an EC2 Instance</title>
      </sec>
      <sec id="sec-7-2">
        <title>1. Create an EC2 Instance:</title>
        <p>- Open the AWS Management Console and navigate
to the EC2 service.</p>
        <p>- Click on “Launch Instance.”
- Choose an Amazon Machine Image (AMI), such as
Amazon Linux 2 AMI (HVM).</p>
        <p>- Select an instance type, such as t3.small, for
costeffectiveness.</p>
        <p>- Configure the instance details, including network
settings.</p>
        <p>- Add storage (default settings are typically sufficient).
- Configure security groups to allow SSH (port 22)
access.</p>
        <p>- Review and launch the instance.
2. Connect to the EC2 Instance:
- Use an SSH client to connect to your EC2 instance.
```sh
ssh -i /path/to/your-key-pair.pem
user@&lt;EC2_Instance_Public_IP&gt;
``
ec2Step 2: Install Minikube and Kubernetes Tools
1. Install Docker:
- Update the package database and install Docker.
```sh
sudo yum update -y
sudo amazon-linux-extras install docker -y
sudo service docker start
sudo usermod -aG docker ec2-user
```
2. Install Minikube:
- Download and install Minikube.
```sh
curl -Lo minikube
https://storage.googleapis.com/minikube/releases/latest/mi
nikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
```
3. Install kubectl:
- Download and install kubectl.
```sh
curl -LO
“https://storage.googleapis.com/kubernetesrelease/release/$(curl -s
https://storage.googleapis.com/kubernetesrelease/release/stable.txt)/bin/linux/amd64/kubectl”
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
```</p>
      </sec>
      <sec id="sec-7-3">
        <title>4. Start Minikube:</title>
        <p>- Start Minikube with a specific driver (e.g., Docker).
```sh
minikube start --driver=docker
```</p>
      </sec>
      <sec id="sec-7-4">
        <title>Step 3: Install OPA Gatekeeper</title>
      </sec>
      <sec id="sec-7-5">
        <title>1. Deploy Gatekeeper:</title>
        <p>- Apply the Gatekeeper manifest to deploy OPA
Gatekeeper in your Minikube cluster.</p>
        <p>```sh
kubectl apply -f
https://raw.githubusercontent.com/open-policyagent/gatekeeper/master/deploy/gatekeeper.yaml
```</p>
      </sec>
      <sec id="sec-7-6">
        <title>2. Verify Installation:</title>
        <p>- Check the Gatekeeper pods to ensure they are
running.</p>
        <p>```sh
kubectl get pods -n gatekeeper-system
```
Step 4: Install FluxCD
1. Install Flux CLI:
- Download and install the Flux CLI.
```sh
curl -s https://fluxcd.io/install.sh | sudo bash
```
2. Bootstrap FluxCD with GitHub:
- Bootstrap FluxCD with your GitHub repository.
```sh
flux bootstrap github \
--owner=&lt;your-github-username&gt; \
--repository=&lt;your-repo-name&gt; \
--branch=main \
--path=clusters/my-cluster \
--personal
```</p>
        <p>Step 5: Configure Admission Control Policies
1. Create a ConstraintTemplate:</p>
        <p>- Define a custom constraint template YAML file. For
example, `k8srequiredlabels.yaml`:
```yaml
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
...
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{“msg”: msg}] {
...
```</p>
        <p>}
2. Apply the ConstraintTemplate:
```sh
kubectl apply -f k8srequiredlabels.yaml
```
3. Create a Constraint:</p>
        <p>- Define a constraint to enforce the policy, e.g.,
`requiredlabels.yaml`:
```yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ns-must-have-gk
spec:
match:
kinds:
- apiGroups: [“”]
kinds: [“Namespace”]
parameters:
labels: [“gatekeeper”]
```</p>
      </sec>
      <sec id="sec-7-7">
        <title>4. Apply the Constraint: ```sh kubectl apply -f requiredlabels.yaml ```</title>
        <p>Step 6: Check Container Image Vulnerabilities
1. Install Trivy:</p>
        <p>- Trivy is a popular tool for scanning container images
for vulnerabilities. Install it on your EC2 instance.
```sh
wget
https://github.com/aquasecurity/trivy/releases/download/v
0.28.0/trivy_0.28.0_Linux-64bit.deb
sudo dpkg -i trivy_0.28.0_Linux-64bit.deb
```</p>
        <p>
          Through our study, we demonstrated the practical
implementation of SaC using Open Policy Agent (OPA) and
its Gatekeeper component, integrated with FluxCD for
continuous deployment and Trivy for container image
vulnerability scanning. The research provided a detailed,
step-by-step guide for setting up a cost-effective testing
environment on AWS using Minikube, making it accessible
for practitioners and researchers alike [
          <xref ref-type="bibr" rid="ref21 ref22">24–25</xref>
          ].
        </p>
        <p>Key findings
1. Automated and Consistent Security Policies:
By defining security policies as code, organizations can
ensure consistent enforcement across all stages of the
application lifecycle. OPA Gatekeeper enables fine-grained
control over Kubernetes resources, preventing
misconfigurations and unauthorized changes.</p>
      </sec>
      <sec id="sec-7-8">
        <title>2. Seamless Integration with CI/CD Pipelines:</title>
        <p>Integrating security checks into CI/CD pipelines using
FluxCD ensures that security is continuously maintained
without hindering development velocity. Automated
deployments and policy enforcement reduce the risk of
human error and accelerate the development process.</p>
      </sec>
      <sec id="sec-7-9">
        <title>3. Effective Vulnerability Management:</title>
        <p>Incorporating Trivy for container image vulnerability
scanning provides an additional layer of security by
identifying and mitigating potential vulnerabilities before
they can be exploited. This proactive approach helps
maintain a secure application environment.</p>
      </sec>
      <sec id="sec-7-10">
        <title>4. Cost-Effective Setup:</title>
        <p>Using Minikube on an EC2 instance as a testing
environment offers a cost-effective alternative to managed
Kubernetes services like EKS. This setup allows for
comprehensive testing and validation of security policies in
a controlled, affordable manner.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>8. Comparison of approaches for</title>
    </sec>
    <sec id="sec-9">
      <title>Kubernetes cluster security</title>
      <p>This table compares three approaches to security in
Kubernetes environments: Security as Code with OPA
Gatekeeper, Traditional Security Methods, and Admission
Controllers. The comparison is made based on various
criteria, highlighting the strengths and weaknesses of each
approach based on the aforementioned research.</p>
    </sec>
    <sec id="sec-10">
      <title>9. Implications in practice</title>
      <p>While this research provides a robust framework for
implementing SaC in Kubernetes environments, several
areas warrant further investigation:
</p>
      <p>
        Service Mesh Integration: Exploring the
integration of service mesh solutions like Istio to
enhance security, observability, and traffic
management within Kubernetes clusters [
        <xref ref-type="bibr" rid="ref23 ref24">26–27</xref>
        ].
      </p>
      <p>
        The topic of my next research will be centered around
the benefits of fine-grained access control by integrating
Open Policy Agent (OPA) with Istio. This integration allows
for a more detailed and context-aware approach to access
control within a Service Mesh architecture. Unlike
traditional access control mechanisms, fine-grained access
control enables policies that consider multiple attributes,
including request context, user roles, resource types, and
more. This level of granularity is crucial for implementing
robust security measures, especially in complex
microservices environments [
        <xref ref-type="bibr" rid="ref25">28</xref>
        ].
      </p>
      <p>The research underscores the importance of adopting a
security-as-code approach in modern cloud-native
environments. By embedding security directly into the
development and deployment processes, organizations can
achieve a higher level of security automation, reduce the
attack surface, and improve overall resilience. The findings
provide practical insights and best practices that can be
leveraged by DevOps teams, security engineers, and IT
professionals to enhance the security of their Kubernetes
deployments.
10. Conclusion
The introduction of cloud-native applications has marked a
significant shift in the landscape of software development
and deployment. These applications, designed to leverage
the advantages of cloud computing, offer unparalleled
scalability, flexibility, and resilience. At the heart of this
transformation is Kubernetes, an open-source container
orchestration platform that has become the de facto
standard for deploying, scaling, and managing containerized
applications.</p>
      <p>While Kubernetes simplifies many aspects of application
management, it also introduces new security challenges.
Traditional security practices often struggle to keep pace
with the dynamic and ephemeral nature of cloud-native
environments. This gap has led to the emergence of the
“Security as Code” (SaC) paradigm, which aims to embed
security directly into the development and operational
processes through code.</p>
      <p>Security as Code involves defining security policies and
controls as code, allowing them to be versioned, reviewed,
and deployed alongside application code. This approach
ensures that security measures are consistently applied and
automatically enforced across all environments, from
development to production. By integrating security into the
DevOps pipeline, organizations can achieve continuous
security and compliance, reducing the risk of vulnerabilities
and misconfigurations.
This research focuses on implementing the SaC approach
within Kubernetes clusters, leveraging Open Policy Agent
(OPA) and its Gatekeeper component. OPA is a
generalpurpose policy engine that enables the enforcement of
finegrained, context-aware policies. Gatekeeper extends OPA’s
capabilities by integrating with Kubernetes admission
controllers, allowing policies to be enforced at the time of
resource creation and modification. Additionally, this study
incorporates FluxCD, a continuous delivery tool for
Kubernetes, and Trivy, a comprehensive vulnerability
scanner for container images. By combining these tools, we
aim to create a robust framework for automating security
policy enforcement and continuous monitoring of container
vulnerabilities.</p>
      <p>The swift adoption of Kubernetes as a container
orchestration platform has revolutionized the deployment
and management of cloud-native applications. However,
this shift has also introduced significant security challenges
that traditional security approaches are ill-equipped to
address. The need for dynamic, automated, and scalable
security measures has become crucial. The primary problem
this research addresses is the implementation of a “Security
as Code” (SaC) approach in Kubernetes-based cloud
environments.</p>
      <p>Through this research, we aim to explore and address
these challenges by providing a detailed implementation
guide, evaluating the effectiveness of automated security
policies, and offering practical insights into integrating
security as code into Kubernetes-based workflows. By doing
so, we contribute to the broader discourse on enhancing the
security of cloud-native applications through innovative
code-centric approaches.</p>
      <p>The arrival of cloud-native applications and the
widespread adoption of Kubernetes have ushered in a new
era of software development and deployment. While these
technologies offer significant benefits in terms of scalability,
flexibility, and resilience, they also present unique security
challenges that traditional security practices are often
illequipped to handle. This research aimed to explore and
implement a “Security as Code” (SaC) approach within
Kubernetes environments to address these challenges
effectively.</p>
      <p>By leveraging OPA’s powerful policy language, Rego,
organizations can define precise access control policies that
are dynamically enforced across the Kubernetes ecosystem.
This not only enhances security by ensuring that only
authorized requests are permitted but also allows for the rapid
adaptation of policies in response to emerging threats or
changes in compliance requirements. Additionally, the
separation of policy logic from application code simplifies the
development process, allowing developers to focus on
business functionality while security teams manage access
policies independently.</p>
      <p>Furthermore, the ability to update policies without
redeploying services ensures minimal disruption and
continuous enforcement of up-to-date security measures.
This capability is essential for maintaining a strong security
posture in an ever-evolving threat landscape. Through this
research, we have demonstrated the practical
implementation and effectiveness of the Security as Code
approach in Kubernetes environments, offering insights into
best practices and potential challenges.</p>
      <p>By integrating OPA Gatekeeper, FluxCD, and Trivy, we
have established a comprehensive framework for
automating security policy enforcement and continuous
monitoring of container vulnerabilities. This integrated
approach not only addresses the inherent challenges of
dynamic and ephemeral container environments but also
ensures continuous security and compliance throughout the
development lifecycle of cloud-native applications. Our
findings contribute to the advancement of secure
Kubernetes deployments and provide a robust foundation
for future research and practical implementations in the
field of cloud-native security.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>B.</given-names>
            <surname>Burns</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>Borg</surname>
          </string-name>
          , Omega, and
          <string-name>
            <surname>Kubernetes</surname>
          </string-name>
          ,
          <source>Queue</source>
          <volume>14</volume>
          (
          <issue>1</issue>
          ) (
          <year>2016</year>
          )
          <fpage>70</fpage>
          -
          <lpage>93</lpage>
          . doi:
          <volume>10</volume>
          .1145/2898442.2898444.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>B.</given-names>
            <surname>Creane</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gupta</surname>
          </string-name>
          , Kubernetes Security and Observability,
          <string-name>
            <surname>O'Reilly Media</surname>
          </string-name>
          (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <given-names>R.</given-names>
            <surname>Osnat</surname>
          </string-name>
          ,
          <source>Kubernetes Security Basics and 10 Essential Best Practices</source>
          (
          <year>2020</year>
          ). URL: https://www.aquasec.com/cloud-nativeacademy/
          <article-title>kubernetes-in-production/kubernetessecurity-best-practices-10-steps-to-securing-k8s/ M. Isberner, 11 Kubernetes Admission Controller Best Practices for Security (</article-title>
          <year>2019</year>
          ). URL: https://www.redhat.com/en/blog/11-kubernetesadmission
          <article-title>-controller-best-practices-for-security J</article-title>
          . Ray, Policy as Code (
          <year>2018</year>
          ). URL: https://www.oreilly.com/library/view/policy-ascode/9781098139179/ch04. html
          <string-name>
            <surname>Md</surname>
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Shamim</surname>
            ,
            <given-names>F. A.</given-names>
          </string-name>
          <string-name>
            <surname>Bhuiyan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Rahman</surname>
          </string-name>
          ,
          <article-title>XI Commandments of Kubernetes Security: A Systematization of Knowledge Related to Kubernetes Security Practices</article-title>
          ,
          <source>IEEE Secure Development (SecDev)</source>
          (
          <year>2020</year>
          )
          <fpage>58</fpage>
          -
          <lpage>64</lpage>
          . doi:
          <volume>10</volume>
          .1109/SecDev45635.
          <year>2020</year>
          .
          <volume>00025</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <given-names>V.</given-names>
            <surname>Khoma</surname>
          </string-name>
          , et al.,
          <article-title>Comprehensive Approach for Developing an Enterprise Cloud Infrastructure</article-title>
          ,
          <source>in: Cybersecurity Providing in Information and Telecommunication Systems</source>
          , vol.
          <volume>3654</volume>
          , (
          <year>2024</year>
          )
          <fpage>201</fpage>
          -
          <lpage>215</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <given-names>C.</given-names>
            <surname>Pahl</surname>
          </string-name>
          , et al.,
          <article-title>Cloud Container Technologies: A Stateof-the-</article-title>
          <string-name>
            <surname>Art</surname>
            <given-names>Review</given-names>
          </string-name>
          ,
          <source>IEEE Transactions on Cloud Computing</source>
          <volume>7</volume>
          (
          <year>2024</year>
          )
          <fpage>677</fpage>
          -
          <lpage>692</lpage>
          . doi: /10.1109/TCC.201 7.2702586.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <given-names>M.</given-names>
            <surname>Alawneh</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Abbadi</surname>
          </string-name>
          ,
          <article-title>Expanding DevSecOps Practices and Clarifying the Concepts within Kubernetes Ecosystem</article-title>
          ,
          <source>Ninth International Conference on Software Defined Systems (SDS)</source>
          (
          <year>2022</year>
          )
          <fpage>1</fpage>
          -
          <lpage>7</lpage>
          . doi:
          <volume>10</volume>
          .1109/SDS57574.
          <year>2022</year>
          .
          <volume>1006</volume>
          2874.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>S.</given-names>
            <surname>Vasylyshyn</surname>
          </string-name>
          , et al.,
          <article-title>A Model of Decoy System Based on Dynamic Attributes for Cybercrime Investigation</article-title>
          ,
          <string-name>
            <surname>Eastern-European</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Enterp</surname>
          </string-name>
          . Technol.
          <volume>1</volume>
          (
          <issue>9</issue>
          (
          <issue>121</issue>
          )) (
          <year>2023</year>
          )
          <fpage>6</fpage>
          -
          <lpage>20</lpage>
          . doi:
          <volume>10</volume>
          .15587/
          <fpage>1729</fpage>
          -
          <lpage>4061</lpage>
          .
          <year>2023</year>
          .
          <volume>273363</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [11]
          <article-title>The Linux Foundation, Official Kubernetes documentation (</article-title>
          <year>2024</year>
          ). URL: https://kubernetes.io/docs/concepts/overview/compo nents/#control-plane-components
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Veritis</surname>
          </string-name>
          ,
          <article-title>An Advanced Approach for Deploying Containerized Applications in a Cloud Environment (</article-title>
          <year>2024</year>
          ). URL: https://www.veritis.com/solutions/devops/kubernetes/
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [13]
          <article-title>The Linux Foundation, Official Kubernetes documentation (</article-title>
          <year>2024</year>
          ). URL: https://kubernetes.io/docs/concepts/security/
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>The</given-names>
            <surname>Linux</surname>
          </string-name>
          <string-name>
            <surname>Foundation</surname>
          </string-name>
          ,
          <source>Cloud Native Security and Kubernetes</source>
          (
          <year>2024</year>
          ). URL: https://kubernetes.io/docs/concepts/security/cloudnative-security/
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Martseniuk</surname>
          </string-name>
          ,
          <source>Automated Conformity Verification Concept for Cloud Security, in: Cybersecurity Providing in Information and Telecommunication Systems</source>
          , vol.
          <volume>3654</volume>
          (
          <year>2024</year>
          )
          <fpage>25</fpage>
          -
          <lpage>37</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>D.</given-names>
            <surname>Bose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rahman</surname>
          </string-name>
          , M. Shamim, '
          <article-title>Under-reported' Security Defects in Kubernetes Manifests</article-title>
          ,
          <source>IEEE/ACM 2nd International Workshop on Engineering and Cybersecurity of Critical Systems (EnCyCriS)</source>
          (
          <year>2021</year>
          )
          <fpage>9</fpage>
          -
          <lpage>12</lpage>
          . doi: /10.1109/EnCyCriS52570.
          <year>2021</year>
          .
          <volume>00009</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Sultan</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ahmad</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Dimitriou</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          “
          <article-title>Container Security: Issues, Challenges, and the Road Ahead”</article-title>
          , (
          <year>2019</year>
          ), IEEE Access,
          <volume>7</volume>
          ,
          <fpage>52976</fpage>
          -
          <lpage>52996</lpage>
          . doi:
          <volume>10</volume>
          .1109/ACCESS.
          <year>2019</year>
          .
          <volume>2911732</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>O.</given-names>
            <surname>Vakhula</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>Security-</surname>
          </string-name>
          As-Code
          <source>Concept for Fulfilling ISO/IEC 27001:2022 Requirements, in: Cybersecurity Providing in Information and Telecommunication Systems</source>
          , vol.
          <volume>3654</volume>
          (
          <year>2024</year>
          )
          <fpage>59</fpage>
          -
          <lpage>72</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>O.</given-names>
            <surname>Vakhula</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Opirskyy</surname>
          </string-name>
          ,
          <string-name>
            <surname>O. Mykhaylova,</surname>
          </string-name>
          <article-title>Research on Security Challenges in Cloud Environments and Solutions based on the “Security-As-Code” Approach</article-title>
          , in: Cybersecurity
          <source>Providing in Information and Telecommunication Systems</source>
          , vol.
          <volume>3550</volume>
          (
          <year>2023</year>
          )
          <fpage>55</fpage>
          -
          <lpage>69</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [20]
          <article-title>Guest Expert on GitGuardian blog, What is Policy-asCode? An Introduction to Open Policy Agent (</article-title>
          <year>2020</year>
          ). URL: https://blog.gitguardian.
          <article-title>com/what-is-policy-ascode-an-introduction-to-open-policy-agent/</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [21]
          <string-name>
            <surname>OPA</surname>
          </string-name>
          <article-title>Official documentation (</article-title>
          <year>2024</year>
          ). URL: https://www.openpolicyagent.org/docs/latest/kubern etes-tutorial/
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>S.</given-names>
            <surname>Ragonessi</surname>
          </string-name>
          ,
          <article-title>Secure your Kubernetes environment with OPA and Gatekeeper (</article-title>
          <year>2023</year>
          ). URL: https://www.cncf.io/blog/ 2023/10/09/secure-yourkubernetes
          <article-title>-environment-with-opa-and-gatekeeper/</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>G.</given-names>
            <surname>Olaoye</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Luz,
          <article-title>DevSecOps and Integrating Security into the Cloud Development Lifecycle (</article-title>
          <year>2024</year>
          ). URL: https://www.researchgate.net/publication/378233643_ DevSecOps_
          <article-title>and_integrating_security_into_the_cloud _development_lifecycle</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>G.</given-names>
            <surname>Sayfan</surname>
          </string-name>
          ,
          <article-title>Policy as Code and the Open Policy Agent (</article-title>
          <year>2022</year>
          ). URL: https://blogs.cisco.com/developer/policyascode01
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [25]
          <article-title>SecureFlag blog, Securing Kubernetes: Using Gatekeeper to Enforce Effective Security Policies (</article-title>
          <year>2024</year>
          ). URL: https://blog.secureflag.com/
          <year>2024</year>
          /03/13/securitypolicy-enforcement-in-kubernetes/
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Taikun</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          <article-title>Beginner's Guide to Istio: A Service Mesh for Kubernetes (</article-title>
          <year>2024</year>
          ). URL: https://taikun.cloud/beginner-guide
          <article-title>-to-istio-servicemesh-for-kubernetes/</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [27]
          <string-name>
            <surname>AquaSecurity</surname>
          </string-name>
          , Service Mesh:
          <article-title>Architec-ture,</article-title>
          <string-name>
            <surname>Concepts</surname>
          </string-name>
          ,
          <source>and Top 4 Frameworks</source>
          (
          <year>2021</year>
          ). URL: https://www.aquasec.com/cloud-nativeacademy/container-security/service-mesh/
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>R.</given-names>
            <surname>Chandramouli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Butcher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A Zero</given-names>
            <surname>Trust</surname>
          </string-name>
          <article-title>Architecture Model for Access Control in CloudNative Applications in Multi-Location Environments</article-title>
          , NIST (
          <year>2023</year>
          ). doi:
          <volume>10</volume>
          .6028/NIST.SP.
          <fpage>800</fpage>
          -
          <lpage>207A</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>