---
title: "Kubernetes Namespaces: Organize, Isolate, and Secure Multi-Team Clusters"
lang: "en"
author: "Mohammad Abu Mattar"
canonical: https://mkabumattar.com/post/kubernetes-namespaces-organize-isolate-multi-team
---

![Blog post image for Kubernetes Namespaces: Organize, Isolate, and Secure Multi-Team Clusters - Sharing one Kubernetes cluster across teams without the chaos. This dev tip walks through layered namespace isolation: ResourceQuotas, LimitRanges, default-deny NetworkPolicies, and namespace-scoped RBAC, with copy-paste manifests and a Terraform example.](/_astro/hero.DwnjQnvN_Z2nH8q3.webp)

[Home](/)›[Devtips](/devtips)›[All Categories](/devtips/categories)›[Kubernetes & Cloud Native](/devtips/categories/kubernetes--cloud-native)

Devtips

[Kubernetes & Cloud Native](/devtips/categories/kubernetes--cloud-native)

# Kubernetes Namespaces: Organize, Isolate, and Secure Multi-Team Clusters

[Mohammad Abu Mattar](/authors/mohammad-abu-mattar)Published: 28 May 202606 Mins read09 Mins listen

[Markdown for AI(opens in a new tab)](/post/kubernetes-namespaces-organize-isolate-multi-team/index.md "Open the plain-Markdown version of this page, for pasting into an AI tool")

TL;DR

Sharing one Kubernetes cluster across teams without the chaos. This dev tip walks through layered namespace isolation: ResourceQuotas, LimitRanges, default-deny NetworkPolicies, and namespace-scoped RBAC, with copy-paste manifests and a Terraform example.

Series

[Kubernetes Operations](/series/kubernetes-operations)1/1

All posts in this series (1)

DevTips1

1.  [Kubernetes Namespaces: Organize, Isolate, and Secure Multi-Team ClustersYou are here](/devtips/post/kubernetes-namespaces-organize-isolate-multi-team)

### Kubernetes Namespaces: Organize, Isolate, and Secure Multi-Team Clusters

Contents

[Why cluster isolation matters](#why-cluster-isolation-matters)[The multi-tenant reality](#the-multi-tenant-reality)[Soft vs. hard multi-tenancy](#soft-vs-hard-multi-tenancy)[The problem with default-allow clusters](#the-problem-with-default-allow-clusters)[The illusion of isolation](#the-illusion-of-isolation)[Real-world collateral damage](#real-world-collateral-damage)[Layered namespace isolation](#layered-namespace-isolation)[Stacking the controls](#stacking-the-controls)[Resource control](#resource-control)[Network and access paths](#network-and-access-paths)[Tools and platforms](#tools-and-platforms)[Quick implementation steps](#quick-implementation-steps)[Step-by-step hardening](#step-by-step-hardening)[Namespaces in Terraform](#namespaces-in-terraform)[Automating default policies](#automating-default-policies)[Benefits of layered isolation](#benefits-of-layered-isolation)[Predictable performance and security](#predictable-performance-and-security)[A smaller blast radius](#a-smaller-blast-radius)[What's your approach?](#whats-your-approach)[Community discussion](#community-discussion)[Share your experience](#share-your-experience)[References](#references)

## [Why cluster isolation matters](#why-cluster-isolation-matters)

### [The multi-tenant reality](#the-multi-tenant-reality)

If you’re running a separate cluster for every environment and every dev team, you have already seen the bill and the amount of upgrade work that comes with it. Sharing a single cluster is a lot like staying in a hotel. Everyone gets their own secure, private room in the same building. You share the plumbing and foundation, but your space is entirely yours. You pack more workloads onto the same nodes, logging and monitoring live in one place, and there is one control plane to upgrade instead of thirty.

To get started with logical separation, you can declare a namespace with a few clear labels to keep things organized:

namespace-basic.yaml

```
1# A simple, labeled namespace to partition our cluster2apiVersion: v13kind: Namespace4metadata:5  name: team-frontend6  labels:7    team: frontend8    environment: production9    managed-by: platform-team
```

### [Soft vs. hard multi-tenancy](#soft-vs-hard-multi-tenancy)

Decide which model you are building before you write any manifests. Soft multi-tenancy is enough for trusted internal teams in the same company, where you only need logical boundaries. Hard multi-tenancy is what you need for untrusted external users or regulated workloads, and it costs more: dedicated node pools with taints and tolerations, and sometimes a sandboxed runtime like gVisor or Kata Containers so a host kernel exploit stays inside the sandbox.

## [The problem with default-allow clusters](#the-problem-with-default-allow-clusters)

### [The illusion of isolation](#the-illusion-of-isolation)

Most teams think that simply creating different namespaces for different teams keeps things isolated. It doesn’t. Out of the box, Kubernetes is designed as an open, single-tenant system, and a namespace is really just a logical boundary for the API. Resource names can overlap across namespaces, which is handy for keeping things organized, but the scheduling and network layers stay wide open by default.

### [Real-world collateral damage](#real-world-collateral-damage)

Without controls, one runaway batch job in a staging namespace can take all the memory on a shared node. That triggers the Out-of-Memory (OOM) killer, and the kernel does not care that the pod it picks belongs to production next door. Because pods allow all traffic by default, a compromised container in your frontend namespace can port-scan and query a database in your backend namespace. The worst of the three is a single tenant flooding the API server with thousands of Secrets or ConfigMaps until etcd runs out of storage and the control plane stops answering for everyone.

Careful here

Three real failure modes from a default-allow cluster: an OOM kill that takes down a neighbor’s production pods, a compromised frontend pod that pivots straight to a backend database, and one tenant exhausting etcd by creating thousands of Secrets. All preventable with the controls below.

## [Layered namespace isolation](#layered-namespace-isolation)

### [Stacking the controls](#stacking-the-controls)

No single setting protects a shared cluster. Isolation is something you build one control at a time, and it takes all five: namespaces, ResourceQuotas, LimitRanges, RBAC, and NetworkPolicies.

The table below shows how these controls work together for real defense-in-depth:

**Control Type**

**Scope**

**Core Enforcement Mechanism**

**Mitigated Risk**

**Failure Mode if Omitted**

**Namespace**

Logical / API

API Server name scoping

Naming collisions and basic management sprawl

Inability to separate administrative concerns

**ResourceQuota**

Namespace total

Admission controller validation

Cluster-wide resource starvation and etcd storage exhaustion

A single runaway tenant exhausts whole cluster capacity

**LimitRange**

Individual pod/container

Admission controller injection

Single container monopolizing namespace resources

Pods without resource declarations are rejected or run unbounded

**NetworkPolicy**

Pod network

Container Network Interface (CNI)

Lateral movement and cross-namespace port scanning

Full network reachability; compromised pods attack any internal target

**RBAC Roles**

Identity / Access

API authorization engine

Unauthorized credential exploit and cross-tenant tampering

Attackers exploit cluster-wide credentials to compromise all workloads

### [Resource control](#resource-control)

To stop “noisy neighbors” from taking over your cluster, apply a ResourceQuota to every namespace. That sets a hard limit on the total CPU, memory, and object counts a team can use. There is a catch. Once a quota exists, the API server rejects any pod that doesn’t explicitly state its own resource requests and limits, which breaks deploys for every team that hasn’t retrofitted its manifests. A LimitRange fixes that by injecting default values at admission time when a developer forgets to set them.

Tip

A ResourceQuota on its own will reject any pod that doesn’t declare its own requests/limits, which silently breaks deploys for any team that hasn’t retrofitted their manifests. Pair every Quota with a LimitRange so missing values get sane defaults injected automatically.

Here’s how to set up a ResourceQuota to keep resource usage in check:

compute-quota.yaml

```
1# Caps the total resources used by all pods in this namespace2apiVersion: v13kind: ResourceQuota4metadata:5  name: compute-quota6  namespace: team-frontend7spec:8  hard:9    requests.cpu: '4'10    requests.memory: 8Gi11    limits.cpu: '8'12    limits.memory: 16Gi
```

Pair that quota with a container-level LimitRange in the same namespace to establish default fallback values:

container-limits.yaml

```
1# Automatically injects resource defaults for containers that don't declare them2apiVersion: v13kind: LimitRange4metadata:5  name: container-limits6  namespace: team-frontend7spec:8  limits:9    - type: Container10      default:11        cpu: 500m12        memory: 256Mi13      defaultRequest:14        cpu: 100m15        memory: 128Mi
```

### [Network and access paths](#network-and-access-paths)

To block lateral movement, change the network default from “allow-all” to “deny-all”. A default-deny NetworkPolicy that matches every pod shuts down unauthorized traffic immediately. Then you open only the paths you trust. Allow DNS resolution and traffic from your ingress controller explicitly, or your apps cannot resolve internal services and nothing reaches them from outside.

Here’s your baseline default-deny policy to secure a namespace:

default-deny-all.yaml

```
1# Shuts down all incoming and outgoing network traffic by default2apiVersion: networking.k8s.io/v13kind: NetworkPolicy4metadata:5  name: default-deny-all6  namespace: team-frontend7spec:8  podSelector: {} # An empty selector matches every pod in the namespace9  policyTypes:10    - Ingress11    - Egress
```

  

Careful here

Once a default-deny Egress policy is active, pods can no longer reach CoreDNS, and every service lookup starts failing in confusing ways. Always pair the deny with an allow-DNS policy in the same change.

Once everything is blocked, add a policy to allow DNS resolution so your pods can find other services:

allow-dns.yaml

```
1# Selectively allows outbound DNS queries to CoreDNS2apiVersion: networking.k8s.io/v13kind: NetworkPolicy4metadata:5  name: allow-dns6  namespace: team-frontend7spec:8  podSelector: {}9  policyTypes:10    - Egress11  egress:12    - to:13        - namespaceSelector: {} # Matches any namespace hosting the DNS pods14      ports:15        - protocol: UDP16          port: 53
```

For control plane access, keep roles scoped to namespaces with Role and RoleBinding rather than cluster-wide bindings. A team that can only see its own namespace cannot delete someone else’s Deployment by pasting the wrong context.

### [Tools and platforms](#tools-and-platforms)

You can automate this whole setup with Terraform and declare namespaces, quotas, and network policies alongside the rest of your infrastructure. If you need Layer 7 filtering or traffic you can actually watch flowing, a CNI like Cilium gives you both. For high-security workloads, gVisor or Kata Containers put a user-space kernel between the container and the host, so a breakout lands in the sandbox.

## [Quick implementation steps](#quick-implementation-steps)

### [Step-by-step hardening](#step-by-step-hardening)

Here’s the checklist for hardening a shared environment:

-   Deploy a default-deny NetworkPolicy in all non-system namespaces to shut down unauthorized lateral traffic.
-   Set up a global LimitRange to automatically assign safe CPU and memory fallback defaults.
-   Enforce a ResourceQuota to cap total namespace consumption and keep your etcd storage from getting exhausted.
-   Keep developer access strictly within their designated namespace boundaries using group-based RBAC bindings.
-   Use minimal base images like Alpine or container sandboxes to shrink your host-level attack surface.

### [Namespaces in Terraform](#namespaces-in-terraform)

Manage namespaces as code so every one of them ends up with the same controls. Here’s a Terraform block that provisions a namespace and attaches its resource quota in the same apply:

main.tf

```
1# Provisions a team namespace and immediately pairs it with a resource quota2
3resource "kubernetes_namespace" "team_backend" {4  metadata {5    name = "team-backend"6    labels = {7      team        = "backend"8      environment = "production"9      managed-by  = "terraform"10    }11  }12}13
14resource "kubernetes_resource_quota" "backend_quota" {15  metadata {16    name      = "backend-quota"17    namespace = kubernetes_namespace.team_backend.metadata.name18  }19  spec {20    hard = {21      "requests.cpu"    = "4"22      "requests.memory" = "8Gi"23      "limits.cpu"      = "8"24      "limits.memory"   = "16Gi"25    }26  }27}
```

### [Automating default policies](#automating-default-policies)

Use Kustomize or a GitOps pipeline to roll out the default-deny policy and the quota with every new namespace. Otherwise the namespace somebody created by hand six months ago is still sitting there wide open.

## [Benefits of layered isolation](#benefits-of-layered-isolation)

### [Predictable performance and security](#predictable-performance-and-security)

Getting namespace isolation right pays off in two places. The bill goes down, because workloads consolidate onto fewer nodes and you no longer need a control plane per team. And your ops team monitors one cluster instead of thirty, which is the difference between an upgrade being a Tuesday and an upgrade being a quarter. The third benefit shows up later: once the defaults are codified, developers can create their own isolated staging namespace without waiting on an approval, because the guardrails come with it.

### [A smaller blast radius](#a-smaller-blast-radius)

A layered setup shrinks your blast radius if things go sideways. Even if a container gets compromised, the attacker is stuck inside a locked room. They can’t access other tenants’ data, query neighboring services, or starve the rest of the cluster of resources.

## [What’s your approach?](#whats-your-approach)

### [Community discussion](#community-discussion)

The trade-off never fully goes away. Every control here makes the cluster safer and makes somebody’s first deploy fail in a way they did not expect. Where have you landed on that?

### [Share your experience](#share-your-experience)

Do you like managing your namespaces and quotas through Terraform, or do you rely on dynamic operators to do the heavy lifting? Have you ever run into a case where a default-deny network policy accidentally blocked something critical?

## [References](#references)

1.  [Kubernetes multi-tenancy: A 2026 guide to secure shared infrastructure - Northflank](https://northflank.com/blog/kubernetes-multi-tenancy)
2.  [How to Implement Multi-Tenancy with Namespace Isolation and Resource Quotas - OneUptime](https://oneuptime.com/blog/post/2026-02-09-multi-tenancy-namespace-isolation/view)
3.  [Multi-tenancy - Kubernetes docs](https://kubernetes.io/docs/concepts/security/multi-tenancy/)
4.  [Best practices for enterprise multi-tenancy - Google Kubernetes Engine](https://docs.cloud.google.com/kubernetes-engine/docs/best-practices/enterprise-multitenancy)
5.  [Kubernetes Multi-Tenancy: Namespace Isolation, RBAC, and Network Policies Explained - DEV Community](https://dev.to/muskan_8abedcc7e12/kubernetes-multi-tenancy-namespace-isolation-rbac-and-network-policies-explained-3jjm)
6.  [How to Set Up Kubernetes Namespace Resource Quotas and LimitRanges - OneUptime](https://oneuptime.com/blog/post/2026-02-20-kubernetes-namespace-resource-quotas/view)
7.  [How to Implement Default Deny Network Policies in Kubernetes - OneUptime](https://oneuptime.com/blog/post/2026-02-20-kubernetes-network-policies-deny-all/view)
8.  [Resource Quotas - Kubernetes docs](https://kubernetes.io/docs/concepts/policy/resource-quotas/)
9.  [Limit Ranges - Kubernetes docs](https://kubernetes.io/docs/concepts/policy/limit-range/)
10.  [Enable a default deny policy for Kubernetes pods - Calico Documentation](https://docs.tigera.io/calico/latest/network-policy/get-started/kubernetes-default-deny)
11.  [kubernetes-network-policy-recipes: deny-all-non-whitelisted-traffic - GitHub](https://github.com/ahmetb/kubernetes-network-policy-recipes/blob/master/03-deny-all-non-whitelisted-traffic-in-the-namespace.md)
12.  [How to Create Kubernetes Namespaces with Terraform - OneUptime](https://oneuptime.com/blog/post/2026-02-23-how-to-create-kubernetes-namespaces-with-terraform/view)
13.  [Orchestrating Kubernetes with Terraform: A Step-by-Step Guide - Control Plane](https://controlplane.com/blog/post/orchestrating-kubernetes-with-terraform)

Was this useful?

## Tags

[#Kubernetes](/devtips/tags/kubernetes)[#Namespaces](/devtips/tags/namespaces)[#Multi Tenancy](/devtips/tags/multi-tenancy)[#RBAC](/devtips/tags/rbac)[#NetworkPolicy](/devtips/tags/networkpolicy)[#ResourceQuota](/devtips/tags/resourcequota)[#LimitRange](/devtips/tags/limitrange)[#DevSecOps](/devtips/tags/devsecops)[#Platform Engineering](/devtips/tags/platform-engineering)

## Share

[Facebook](https://facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team "Share on Facebook")[Twitter](https://twitter.com/intent/tweet/?text=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters&url=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team "Share on Twitter")[LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team&title=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters&summary=Sharing%20one%20Kubernetes%20cluster%20across%20teams%20without%20the%20chaos.%20This%20dev%20tip%20walks%20through%20layered%20namespace%20isolation%3A%20ResourceQuotas%2C%20LimitRanges%2C%20default-deny%20NetworkPolicies%2C%20and%20namespace-scoped%20RBAC%2C%20with%20copy-paste%20manifests%20and%20a%20Terraform%20example.&source=https://mkabumattar.com "Share on LinkedIn")[WhatsApp](https://wa.me/?text=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters%20https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team "Share on WhatsApp")[Telegram](https://t.me/share/url?url=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team&text=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters "Share on Telegram")[Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team&title=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters "Share on Reddit")[Hacker News](http://news.ycombinator.com/submitlink?u=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team&t=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters "Share on Hacker News")[Pinterest](https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team&media=&description=Sharing%20one%20Kubernetes%20cluster%20across%20teams%20without%20the%20chaos.%20This%20dev%20tip%20walks%20through%20layered%20namespace%20isolation%3A%20ResourceQuotas%2C%20LimitRanges%2C%20default-deny%20NetworkPolicies%2C%20and%20namespace-scoped%20RBAC%2C%20with%20copy-paste%20manifests%20and%20a%20Terraform%20example. "Share on Pinterest")[Email](<mailto:?subject=Kubernetes%20Namespaces%3A%20Organize%2C%20Isolate%2C%20and%20Secure%20Multi-Team%20Clusters&body=Check out this article: https%3A%2F%2Fmkabumattar.com%2Fdevtips%2Fpost%2Fkubernetes-namespaces-organize-isolate-multi-team>)

## Comments

## You might also enjoy

More posts on similar topics

[![ArgoCD GitOps: Sync Kubernetes Deployments Automatically from Git](/_astro/hero.D4Pcicvc_VlKXt.webp)](/devtips/post/argocd-gitops-kubernetes-deployments-git-sync)

## [ArgoCD GitOps: Sync Kubernetes Deployments Automatically from Git](/devtips/post/argocd-gitops-kubernetes-deployments-git-sync)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Kubernetes & Containers](/devtips/categories/kubernetes--containers)

Why GitOps for Kubernetes? From kubectl apply to Git as the source of truth Hey, want to stop deploying to Kubernetes by hand? If your releases still come from someone running \`kubectl ap

[#ArgoCD](/devtips/tags/argocd)[#GitOps](/devtips/tags/gitops)[#Kubernetes](/devtips/tags/kubernetes)+4 tags

[read more](/devtips/post/argocd-gitops-kubernetes-deployments-git-sync)

[![Helm Charts: Templating & Multi-Environment Kubernetes Deployments](/_astro/hero.C-pWunDw_Z143yJc.webp)](/devtips/post/helm-charts-kubernetes-multi-environment)

## [Helm Charts: Templating & Multi-Environment Kubernetes Deployments](/devtips/post/helm-charts-kubernetes-multi-environment)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Kubernetes & DevOps](/devtips/categories/kubernetes--devops)

Why Helm matters The Kubernetes manifest problem Managing Kubernetes manifests at scale becomes a nightmare. You have a deployment for dev, staging and production. Each one is 90% identi

[#Helm](/devtips/tags/helm)[#Kubernetes](/devtips/tags/kubernetes)[#Deployment](/devtips/tags/deployment)+4 tags

[read more](/devtips/post/helm-charts-kubernetes-multi-environment)

[![Container Image Vulnerability Scanning in CI/CD with Trivy](/_astro/hero.yY1orHlw_2oq3jw.webp)](/devtips/post/container-image-vulnerability-scanning-trivy)

## [Container Image Vulnerability Scanning in CI/CD with Trivy](/devtips/post/container-image-vulnerability-scanning-trivy)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [DevOps & DevSecOps](/devtips/categories/devops--devsecops)

Why container security matters Where the vulnerabilities hide A container image is one of the largest pieces of untrusted code you ship. Every image you build carries the base OS layer,

[#Container Security](/devtips/tags/container-security)[#Vulnerability Scanning](/devtips/tags/vulnerability-scanning)[#Trivy](/devtips/tags/trivy)+4 tags

[read more](/devtips/post/container-image-vulnerability-scanning-trivy)

[![Policy-as-Code Governance with OPA/Rego](/_astro/hero.CwAJ64Mi_1WeH9p.webp)](/devtips/post/policy-as-code-opa-rego)

## [Policy-as-Code Governance with OPA/Rego](/devtips/post/policy-as-code-opa-rego)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [DevOps & DevSecOps](/devtips/categories/devops--devsecops)

Why policy-as-code matters The governance problem Managing infrastructure at scale gets complicated fast. As your infrastructure grows, keeping it consistent and compliant gets harder. M

[#Policy as Code](/devtips/tags/policy-as-code)[#OPA/Rego](/devtips/tags/oparego)[#Compliance](/devtips/tags/compliance)+4 tags

[read more](/devtips/post/policy-as-code-opa-rego)

[![Understanding Kubernetes Services: ClusterIP vs NodePort vs LoadBalancer](/_astro/hero.DBNjupL__148EQW.webp)](/devtips/post/kubernetes-services-clusterip-nodeport-loadbalancer)

## [Understanding Kubernetes Services: ClusterIP vs NodePort vs LoadBalancer](/devtips/post/kubernetes-services-clusterip-nodeport-loadbalancer)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [DevOps & Kubernetes](/devtips/categories/devops--kubernetes)

If you're working with Kubernetes, you've probably noticed that Pods come and go, and their IP addresses keep changing. That's where Services come in. They give you a stable way to keep your apps acce

[#Kubernetes](/devtips/tags/kubernetes)[#K8s Services](/devtips/tags/k8s-services)[#ClusterIP](/devtips/tags/clusterip)+5 tags

[read more](/devtips/post/kubernetes-services-clusterip-nodeport-loadbalancer)

[![Securing CI/CD with IAM Roles](/_astro/hero.Bl9B2DZz_ZDIuXQ.webp)](/devtips/post/securing-cicd-with-iam-roles)

## [Securing CI/CD with IAM Roles](/devtips/post/securing-cicd-with-iam-roles)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [DevOps & DevSecOps](/devtips/categories/devops--devsecops)

Why secure your CI/CD pipeline? Why pipeline security matters Your pipeline holds credentials for every environment you deploy to, which makes it one of the most valuable targets you own. A s

[#CICD Security](/devtips/tags/cicd-security)[#IAM Roles](/devtips/tags/iam-roles)[#Least Privilege](/devtips/tags/least-privilege)+4 tags

[read more](/devtips/post/securing-cicd-with-iam-roles)

6 related posts
