Penetration Testing

Cloud Pentest: What We Test in AWS, Azure, and GCP

Cloud penetration testing for SaaS startups on AWS, Azure, and GCP. What gets tested, common findings, and what the report looks like.

RG&AK
Rathnakara GN & Ashok Kamat
Cybersecify
14 min read

Cloud penetration testing is a security assessment of your cloud infrastructure on AWS, Azure, or GCP. It tests IAM policies and privilege escalation paths, storage bucket and blob permissions, network segmentation and security groups, container configurations and escape vectors, secrets management, and shared-responsibility boundaries between provider-managed and customer-managed components. Unlike a web application pentest which targets your code, cloud pentest targets the infrastructure your application runs on. Both are separate scopes. At Cybersecify, cloud is one scope: Startup plan covers 1 scope at INR 74,999 (5 business days), Growth plan covers 2 scopes at INR 1,79,999 (10 business days).

Your application code might be solid. Your web app pentest came back clean. But the S3 bucket your app writes logs to is publicly readable. The IAM role attached to your EC2 instance has admin privileges. Your security groups allow SSH from 0.0.0.0/0.

None of that shows up in an application pentest. That is what our cloud penetration testing services cover.

Cybersecify is a founder-led cloud pentest firm based in Bengaluru, India, serving AI-first and API-first SaaS startups from Seed to Series B on AWS, Azure, and GCP. Rathnakara (OSCP) leads every engagement. For the report deliverable format you receive after a cloud pentest, see our SOC 2 + ISO 27001 ready pentest report sample.

Key findings

  • Cloud pentest is different from a cloud configuration audit (CSPM). CSPM tools like Wiz or Prisma Cloud produce a list of misconfigurations. A pentest chains those misconfigurations into actual privilege-escalation paths and verifies exploitability. Both are useful; most SaaS startups need both.
  • IAM is where most of the critical and high findings concentrate. One overpermissioned role typically chains to full account compromise. Start with limited credentials, map every escalation path, document the full chain.
  • All three hyperscalers are tested with the same six-layer methodology (IAM, storage, network and segmentation, container or serverless, supporting services, privilege escalation), but each provider has its own tools and primitives. AWS pentest uses Pacu; Azure uses PowerZure; GCP uses custom scripts plus Google Cloud’s own asset inventory APIs.
  • Cloud counts as one pentest scope at Cybersecify. Startup Pentest plan (INR 74,999, 1 scope, 5 business days) covers a single cloud environment. Growth Pentest plan (INR 1,79,999, 2 scopes, 10 business days) covers cloud plus web app or cloud plus API with SOC 2 + ISO 27001 audit prep included.
  • Reports are built so your auditor can use them as evidence for SOC 2 and ISO 27001. Methodology follows PTES and CIS Benchmarks (CIS AWS Foundations, CIS Azure, CIS GCP). Growth plan adds explicit SOC 2 TSC and ISO 27001 Annex A control mapping per finding.

Cloud Pentest vs Traditional Pentest

A web application pentest tests your code. Authentication flows, authorization checks, injection vulnerabilities, business logic flaws. It treats your app as a black box or grey box and attacks the application layer.

A cloud pentest tests the infrastructure your application runs on. The questions are different:

  • Can an attacker with compromised credentials escalate to admin?
  • Are your storage buckets or blobs accessible without authentication?
  • Can a compromised container escape to the host or reach other services?
  • Do your network rules actually isolate production from staging?
  • Are your secrets stored in environment variables instead of a secrets manager?

These are infrastructure-level findings. Your application scanner will never flag them. Your cloud provider’s built-in tools (AWS Security Hub, Azure Defender, GCP Security Command Center) catch some of it, but they run rule-based checks. They operate within the shared responsibility model where your provider secures the infrastructure and you secure everything you build on top of it. They do not simulate what an attacker would actually do after gaining initial access.

What Gets Tested

The specific checks vary by provider, but every cloud pentest covers these areas.

IAM and Access Controls

This is where most critical findings live. We test:

  • Overprivileged roles. An EC2 instance role with s3:* or iam:* when it only needs read access to one bucket.
  • Cross-account trust misconfigurations. Roles that can be assumed by any AWS account, not just yours.
  • Unused credentials. API keys and access keys that haven’t been rotated in months (or years).
  • Missing MFA. Console access without multi-factor authentication on privileged accounts.
  • Service account sprawl. GCP service accounts or Azure service principals with permissions nobody remembers granting.

IAM misconfigurations are consistently among the most common findings in cloud penetration tests. Most startups set permissions during initial setup and never revisit them as the team and infrastructure grow.

Storage and Data Exposure

  • Public buckets/blobs. S3 buckets, Azure Blob containers, or GCS buckets with public read or list permissions.
  • Bucket policy conflicts. A bucket with ACLs set to private but a bucket policy that allows public access.
  • Unencrypted storage. Data at rest without encryption, especially backups and logs.
  • Overshared snapshots. EBS snapshots or RDS snapshots shared publicly or with unintended accounts.

We have seen production database backups sitting in publicly listable buckets. The bucket name was not guessable, so the team assumed it was safe. An attacker with any foothold in the AWS account could enumerate it in seconds.

Network Segmentation and Security Groups

  • Overly permissive ingress rules. Security groups allowing 0.0.0.0/0 on SSH (22), RDP (3389), or database ports.
  • Missing egress controls. No restriction on outbound traffic, which lets an attacker exfiltrate data freely after compromise.
  • VPC peering misconfigurations. Production VPC peered with development VPC without route restrictions.
  • Publicly exposed management interfaces. Kubernetes dashboards, Jenkins, Grafana, or admin panels accessible from the internet.

IAM Trust Policies and Role Chaining

Permission policies answer “what can this role do”. Trust policies answer “who is allowed to become this role”, and that second question is where the escalation paths live. A role can have a tightly scoped permission policy and still be a critical finding because anyone in any account can assume it.

We read both sides:

  • Trust policy principals. On AWS, a role trust policy naming a wildcard principal, or a third-party account without an sts:ExternalId condition, means the role is assumable by parties you did not intend. On GCP the equivalent question is who holds iam.serviceAccounts.actAs or token-creator on a service account. On Azure it is who owns the app registration and who can add a client secret to the service principal behind it.
  • Chain depth. One assume-role hop is rarely the whole story. We follow the chain: the low-privilege role can assume role B, role B can pass role C to a compute service, role C has broad access. Each hop looks defensible in isolation.
  • PassRole and self-modification. Can this identity attach a more permissive policy to itself, create access keys for a higher-privileged identity, or pass a privileged role to a service it controls (Lambda, ECS task, Cloud Function, Automation Account)?
  • Hierarchy inheritance. GCP bindings at the organization or folder level flow down to every project underneath. Azure role assignments at a management group flow down to every subscription. Escalation often comes from a grant made two levels above the resource, by someone who no longer works there.

Privilege Escalation Paths

This is what separates a pentest from a configuration review. We start with limited credentials (simulating a compromised developer laptop or leaked API key) and map every path to higher privileges:

  • Can this IAM user create a new admin user?
  • Can this role attach a more permissive policy to itself?
  • Can this Lambda function’s role access secrets it should not?
  • Can we move from a staging environment to production through shared resources?

We document the full attack chain, not just the individual misconfiguration.

Metadata Services and SSRF to Credentials

Every cloud VM and most managed compute services expose an internal metadata endpoint at 169.254.169.254 that hands out short-lived credentials for the attached identity. If any application in the environment can be made to issue a request on the attacker’s behalf, that endpoint is the fastest route from a web-layer bug to cloud credentials.

We test every server-side request path we can reach: URL parameters that fetch remote content, webhook targets, PDF and image renderers that follow links, SSO metadata importers, and anything that resolves a hostname supplied by a user. The mechanics differ by provider and the difference is what decides exploitability:

  • AWS. IMDSv1 answers a plain GET with no headers, so a basic SSRF returns credentials directly. IMDSv2 requires a PUT to obtain a session token first and applies a response hop limit, which blocks most naive SSRF. We check whether IMDSv2 is merely available or actually enforced as required on each instance, and whether the hop limit permits a containerised workload to reach it.
  • Azure. Azure Instance Metadata Service requires the Metadata: true request header, so exploitation needs an SSRF primitive that controls headers rather than just a URL. The managed identity token endpoint is the target.
  • GCP. The metadata server requires Metadata-Flavor: Google, the same shape of constraint as Azure. Where it gets interesting is what the token is scoped to, which brings us back to the default Compute Engine service account.

Findings here include the exact request, the credential returned (redacted), and what we could then do with it.

Secrets in Build Pipelines and Environment Configuration

Secrets rarely sit in one place. They sit in the four or five places the team forgot about after moving them to the one right place.

  • CI/CD. Build logs that echo environment variables, pipeline definitions with inline credentials, and over-scoped OIDC trust between the CI provider and the cloud account. A GitHub Actions or GitLab OIDC trust policy that matches on the repository owner but not the specific repository, branch, or environment lets any repo under that owner mint cloud credentials.
  • Environment configuration. Function and container environment variables, task definitions, and Kubernetes ConfigMaps holding database passwords and API keys in plaintext, where anyone with read access to the resource definition can see them.
  • Artifacts and state. Container image layers with credentials baked in from an earlier build step, Terraform state files in storage buckets (state records secret values in cleartext by default), and infrastructure repositories with .tfvars committed.
  • Rotation reality. A secret that appears in a git history or a build log is compromised whether or not it was later moved to a secrets manager. We check whether the current live value is the same one that leaked.

Logging and Detection Gaps

A cloud pentest tells you what an attacker could do. Reviewing your logs afterwards tells you whether you would have known. We record the timestamps of our own actions and compare them against what your pipeline captured.

Common gaps: CloudTrail configured in one region while workloads run in three, data events disabled so object-level reads of a sensitive bucket are invisible, Azure diagnostic settings enabled per-resource with new resources silently missing them, GCP Data Access audit logs off by default for most services, and alert rules that fire into a channel nobody reads. Detection findings map cleanly to the MITRE ATT&CK cloud matrices, which is a useful shared vocabulary when your team already runs a SIEM.

Container and Serverless Security

If you run EKS, AKS, GKE, Lambda, or Cloud Functions, we test:

  • Container image vulnerabilities. Base images with known CVEs.
  • Pod security. Containers running as root, privileged mode enabled, host network access.
  • Secrets in environment variables. API keys and database passwords passed as plaintext env vars instead of using Secrets Manager or Vault.
  • Lambda/function permissions. Execution roles with broader access than the function needs.

Where AWS, Azure, and GCP Actually Differ

The six-layer method is the same on all three. The primitives underneath are not, and pretending otherwise produces a report full of generic advice. The differences that change how we test:

Identity model. AWS separates users and roles, and escalation is usually an sts:AssumeRole chain plus iam:PassRole. Azure has no direct assume-role equivalent; identity lives in Entra ID, so the escalation surface is app registrations, client secrets on service principals, and role assignments made at management-group scope. GCP centres on service accounts that are both identities and resources, so a principal can hold permissions on a service account (impersonate it, create a key for it) separately from holding the account’s permissions.

Default grants. GCP penetration testing engagements repeatedly surface the same starting point: the default Compute Engine service account carries the legacy Editor role, and any workload on the instance inherits it. AWS has no equivalent default at that blast radius. Azure’s analogue is broad Contributor or Owner assignments inherited from a management group.

Hierarchy. GCP has organization, folder, and project. Azure has management group, subscription, and resource group. AWS uses accounts under Organizations with service control policies. Segmentation testing has to follow whichever shape you use, because “production is a separate account” and “production is a separate resource group in the same subscription” are very different isolation stories.

Storage semantics. S3 has both bucket policies and ACLs, and the conflict between them is a recurring finding. Azure Blob adds SAS tokens, which are bearer credentials with their own expiry and revocation problem. GCS has uniform bucket-level access, which removes per-object ACLs when enabled and is worth verifying is actually on.

Metadata endpoint. Covered above: header-free on AWS IMDSv1, header-gated on Azure and GCP. This single difference decides whether a given SSRF is a critical finding or a medium one.

Where a Cloud Pentest Ends and a Configuration Review Begins

Buyers confuse these two constantly, and the confusion usually surfaces after a proposal rather than before. It is worth being direct about it.

A configuration review (which is what CSPM platforms automate) reads your cloud state and compares it against a rule set such as the CIS Benchmarks for your provider. It is broad, fast, repeatable, and complete in the sense that it checks every resource. It answers: does this setting match the recommended value.

A cloud pentest starts from a credential and behaves like an attacker. It is narrow, slower, and deliberately incomplete: we go where the paths lead rather than checking every box. It answers: given this foothold, what can actually be reached.

Practically:

  • If a control is misconfigured but nothing exploitable follows from it, a pentest may note it and move on. A configuration review will always flag it. That is the review doing its job, not the pentest missing something.
  • If exploitation requires chaining three settings that each look acceptable alone, a configuration review will not flag it and a pentest will. That is the pentest doing its job.
  • Coverage claims differ. A configuration review can honestly say “every S3 bucket in the account was checked”. A pentest cannot, and any vendor claiming otherwise is describing a scan.
  • Most SaaS teams need both, at different frequencies. Continuous configuration monitoring is a running control. Adversarial testing is a periodic validation, typically annual or triggered by a re-architecture, an enterprise buyer, or an audit.

Our cloud engagements are pentests. We reference CIS Benchmarks in findings because auditors and engineers both recognise them, but we are not selling you a benchmark scan with a report cover on it.

When You Need a Cloud Pentest

Three common triggers for SaaS startups:

An enterprise buyer asks for it. Their security questionnaire specifically asks about infrastructure testing, not just application testing. A web app pentest report will not satisfy this. They want to know your cloud environment has been independently assessed.

You are preparing for SOC 2 or ISO 27001. Both standards expect you to test your infrastructure controls, not just your application. Your auditor will ask for evidence that cloud-specific risks have been assessed.

You just migrated or re-architected. You moved from a monolith on a single VM to microservices on Kubernetes. You adopted multi-account strategy. You introduced a CI/CD pipeline that deploys to production. Each change creates new attack surface that your previous pentest did not cover.

Post-incident. You found an exposed key, a public bucket, or unauthorized access. You need to know what else is wrong before it becomes a second incident.

What the Report Looks Like

Our cloud pentest report includes:

  1. Executive summary. What we found, the overall risk level, and what to fix first. Written for founders and CTOs, not security engineers.
  2. Finding details. Each finding includes severity, the affected resource (specific ARN, resource ID, or service), proof of exploitation, and step-by-step remediation.
  3. Attack chain documentation. If we chained multiple findings to escalate privileges or access sensitive data, we document the full path.
  4. Evidence. Screenshots, API responses, and configuration snippets that prove each finding.
  5. Remediation priorities. Findings ranked by business impact, not just CVSS score. A publicly readable bucket with PII is more urgent than a missing tag policy.
  6. Compliance mapping. Findings mapped to SOC 2 trust service criteria or ISO 27001 Annex A controls, depending on what you need.

You can see how we approach security testing overall on our methodology page.

Cloud Counts as One Pentest Scope

At Cybersecify, cloud infrastructure testing is a pentest scope. If your cloud environment is your only concern, the Startup Pentest Plan at INR 74,999 covers it in 5 business days. If you need both a web app pentest and a cloud pentest, the Growth Pentest Plan at INR 1,79,999 covers 2 scopes in 10 business days and includes SOC 2 + ISO 27001 audit prep evidence.

Both plans are founder-led. Rathnakara (OSCP) personally leads every engagement.

Need to assess your cloud environment? Talk to us or run a free external attack surface scan to see what is already exposed.

Corrections

  • 2026-08-15: Corrected three cloud provider testing-policy references. The GCP answer previously linked to Google’s Cloud Data Loss Prevention product page, which says nothing about penetration testing; it now cites Google’s Cloud Security FAQ, which states you are not required to contact Google to test your own Cloud Platform infrastructure. The Azure answer previously implied Microsoft notification was required for certain testing; Microsoft’s Security Testing Rules of Engagement instead require testing to stay within your own tenant or assets you have explicit authorization for. The AWS answer now names the specific prohibited activities the policy lists. All three provider pages checked 2026-08-15.
  • 2026-08-09: Replaced precise percentages describing our own engagement data with qualitative wording. We do not publish a per-engagement findings register, so those figures were not something a reader could verify. The underlying observations are unchanged.

Frequently Asked Questions

What is cloud penetration testing?

Cloud penetration testing is a security assessment of your cloud infrastructure (AWS, Azure, or GCP). It tests for misconfigurations in IAM policies, storage permissions, network rules, and privilege escalation paths that could allow an attacker to access or move through your environment.

How is cloud pentesting different from a web app pentest?

A web app pentest tests your application code, authentication, and business logic. A cloud pentest tests the infrastructure your application runs on. IAM roles, security groups, storage buckets, container configurations, and network segmentation. Both are separate scopes.

How much does cloud penetration testing cost in India?

At Cybersecify, cloud pentesting is included as a scope in our pentest plans. The Startup Pentest Plan covers 1 scope at INR 74,999 (5 business days). The Growth Pentest Plan covers 2 scopes at INR 1,79,999 (10 business days). Cloud counts as one scope.

What is the AWS pentest scope checklist for SaaS startups?

An AWS pentest at Cybersecify covers six layers in 5 to 10 business days. IAM (roles, policies, trust relationships, unused credentials, MFA gaps, root account hygiene), S3 (public buckets, bucket policy vs ACL conflicts, presigned URL abuse, cross-account access), EC2 and VPC (security group ingress rules, NACLs, peering misconfigurations, public AMIs, IMDSv1 metadata theft), EKS (pod security, privileged containers, RBAC, secrets in env vars, workload identity), Lambda (overprivileged execution roles, env-var secrets, function URL exposure), and supporting services (RDS public access, KMS key policies, Secrets Manager rotation, CloudTrail coverage). Out of scope: AWS-managed infrastructure (shared responsibility model) and denial-of-service, which the AWS customer penetration testing policy lists as a prohibited activity along with request flooding and DNS zone walking via Route 53 hosted zones (policy checked 2026-08-15). Most SaaS engagements surface IAM privilege escalation paths and S3 exposure in the first 3 days.

How does an Azure cloud pentest differ from AWS?

Azure pentest covers the same six layers but with Azure-specific tools and primitives. Azure AD and Entra ID (conditional access policy gaps, app registration secrets, service principal sprawl, guest user privilege escalation), Blob storage (anonymous read, SAS token abuse, lifecycle policy gaps), VNet and NSG (overly permissive inbound rules, hub-spoke topology gaps), AKS (pod security policies, Azure RBAC vs Kubernetes RBAC mismatches), Functions (managed identity overreach, key vault references), and supporting services (Key Vault access policies, Storage Account firewall, App Service authentication, Defender for Cloud findings triage). Microsoft Graph API is tested for over-permissioned app registrations. Out of scope: Azure-managed infrastructure and anything outside your own tenant. Microsoft's Security Testing Rules of Engagement require all testing to be performed within your own tenant or against assets you have explicit authorization for (policy checked 2026-08-15).

What is the GCP pentest scope and methodology?

GCP pentest at Cybersecify covers IAM (resource-hierarchy inheritance, role-binding sprawl, custom-role over-permission, service account key abuse, organization policy gaps), Cloud Storage (allUsers and allAuthenticatedUsers exposure, signed URL leakage, uniform-bucket-level access bypass), GKE (workload identity binding gaps, node service-account scope, private cluster verification, Binary Authorization bypass), Cloud Run and Cloud Functions (ingress and authentication settings, IAM invoker scope, env-var secrets), VPC and firewall (default-allow rules, peering, Cloud NAT egress), BigQuery (dataset ACLs, row-level security bypass, authorized view scope), and supporting services (KMS key policies, Secret Manager rotation, Cloud Logging coverage). GCP-specific finding pattern: organizations leaving the default Compute Engine service account with editor role on every instance is the most common privilege escalation path. Google's own Cloud Security FAQ states that if you plan to evaluate the security of your Cloud Platform infrastructure with penetration testing, you are not required to contact Google (policy checked 2026-08-15). We still test only resources you own, only inside the agreed window.

How do you test Kubernetes (EKS, AKS, GKE) for pod escape and RBAC gaps?

Kubernetes pentest is a standard part of any cloud engagement that runs containers in production. We test pod security (containers running as root, privileged mode, host network or PID namespace access, hostPath volume mounts), service account token mounts (default token automount, overpermissioned token scope), RBAC (cluster-admin bindings on service accounts that should not have them, role aggregation gaps), network policy enforcement (default-allow vs default-deny posture), admission controllers (PodSecurityPolicy or Pod Security Admission gaps, OPA Gatekeeper bypass), secrets handling (etcd encryption, sealed secrets, External Secrets Operator scope), and container escape paths (CVE patch status for runc and containerd, kernel-level escape vectors). Findings include reproduction commands and Kubernetes manifest fixes.

How do you test IAM privilege escalation paths in cloud pentest?

IAM privilege escalation testing is the highest-severity layer in any cloud pentest because one mispermissioned role typically chains to full account compromise. We start with limited credentials (simulating a compromised developer laptop or leaked API key) and map every path to higher privileges. Specific tests: can this role create a new admin user, can this role attach a more permissive policy to itself, can this Lambda function assume a more privileged role, can this user create access keys for higher-privileged users, can this role manipulate IAM policies via service-specific APIs (PassRole abuse, iam:CreateLoginProfile, sts:AssumeRole chain depth). We use Pacu for AWS, PowerZure for Azure, and custom GCP scripts. Findings document the full attack chain, not the individual misconfigurations. IAM is where most of the critical and high cloud findings concentrate in our engagements.

What is the difference between a cloud pentest and a cloud configuration audit (CSPM)?

Cloud configuration audit (CSPM tools like Wiz, Lacework, Prisma Cloud, Orca) runs rule-based checks against your cloud account and produces a list of misconfigurations against published benchmarks. Cloud pentest simulates what an attacker would do after gaining initial access: chains misconfigurations into privilege escalation paths, verifies actual exploitability of findings, and tests business logic specific to your environment. CSPM tells you you have a publicly readable S3 bucket. Cloud pentest tells you that bucket contains production database backups, the bucket policy allows cross-account read from a third-party AWS account, and an attacker with any IAM foothold can enumerate it in seconds. Both are useful; they answer different questions. Most SaaS startups need CSPM for continuous configuration monitoring and pentest annually for adversarial validation.

Can my auditor use your cloud pentest report as evidence for SOC 2 and ISO 27001?

Yes. Cloud pentest reports follow PTES and CIS Benchmarks for the relevant cloud provider (CIS AWS Foundations, CIS Azure, CIS GCP). Reports produce technical + executive summaries with reproduction steps, business impact in plain language, CVSS v3.1 scoring, and remediation guidance specific to your cloud provider. The Growth Pentest plan adds explicit SOC 2 Trust Services Criteria (CC6.6 Protection Against External Threats, CC6.8 Controls Against Unauthorized or Malicious Software, CC7.1 Vulnerability Detection, CC7.2 Anomaly Monitoring) + ISO 27001 Annex A control mapping per finding (A.8.8 Management of technical vulnerabilities, A.5.23 Information security for cloud services, A.8.20 Network security).

Security questions, worries, or not sure what to use?

Cybersecify is a founder-led penetration testing firm for AI and SaaS startups. Tell us what you are weighing and we will give you a straight answer. Ask the team or book a free 30-minute call.

Share this article
cloud pentestAWS securityAzure securityGCP securitycloud security testingpenetration testingSaaS security

Spotted something wrong on this page? Facts change and we get things wrong. Tell us and we will check it. We publish corrections on the page rather than editing quietly.