Standing privileges
are the most exploited attack path in cloud breaches -- an IAM key with admin access that exists permanently is a credential compromise away from full account takeover
Azure PIM
is included in Azure AD P2 licensing (part of Entra ID P2) -- if your organization has Microsoft 365 E5 or Azure AD P2, you already have JIT access capability
1-hour
is the recommended maximum session duration for production write access -- long enough to complete a maintenance task, short enough to limit blast radius from credential theft

Just-in-time (JIT) access replaces permanent privileged credentials with temporary, on-demand grants that expire automatically. AWS, Azure, and GCP all provide native JIT capabilities that cover the core use case without requiring a commercial PAM tool. This guide walks through the implementation for each cloud platform and covers two open-source alternatives for multi-cloud environments.

AWS: Time-Bounded Permission Sets with IAM Identity Center

IAM Identity Center (formerly AWS SSO) manages human access to AWS accounts centrally. The JIT approach: create a high-privilege permission set (e.g., AdministratorAccess) and assign it on-demand using a workflow, then revoke the assignment when the window closes.

Grant access via CLI:

aws sso-admin create-account-assignment \
  --instance-arn [instance-arn] \
  --target-id [account-id] \
  --target-type AWS_ACCOUNT \
  --permission-set-arn [admin-permission-set-arn] \
  --principal-type USER \
  --principal-id [user-id]

Schedule automatic revocation after 1 hour using EventBridge and a Lambda function that calls delete-account-assignment with the same parameters.

Open-source option with Granted:

granted request \
  --role AdministratorAccess \
  --account 123456789012 \
  --duration 1h

Granted wraps IAM Identity Center with Slack-based approval workflows. The access grant is created only after the approver responds, and it is automatically removed when the duration expires.

Azure: Privileged Identity Management (PIM)

PIM is included in Azure AD P2 and Entra ID P2 licenses, which come with Microsoft 365 E5 and EMS E5. If your organization has either, you have PIM available today.

Converting a standing assignment to eligible:

  1. Azure Portal: Privileged Identity Management > Azure AD roles
  2. Select the role > Assignments > Add assignments
  3. Assignment type: Eligible (not Active)
  4. Set maximum activation duration (default 1 hour, max 24 hours)

Requiring MFA and justification on activation:

  1. PIM > Role settings > Edit
  2. Activation: require MFA, require justification, require approval (optional)

List eligible assignments with PowerShell:

Get-AzureADMSPrivilegedRoleAssignment `
  -ProviderId "aadRoles" `
  -ResourceId [tenant-id] `
  | Where-Object {$_.AssignmentState -eq "Eligible"} `
  | Select DisplayName, RoleDefinitionId

Activation audit: PIM > Audit shows who activated, when, what justification was provided, and how long the session ran. This log satisfies most audit requirements for privileged access review.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

GCP: Privileged Access Manager (PAM)

GCP PAM (generally available as of 2024) grants temporary IAM bindings with optional approval workflows. It operates at the project, folder, or organization level.

Create an entitlement (what role, on what resource, for how long):

gcloud beta pam entitlements create prod-admin-access \
  --project=[project-id] \
  --location=global \
  --privileged-access='gcpIamAccess.resourceType=cloudresourcemanager.googleapis.com/Project,gcpIamAccess.resource=//cloudresourcemanager.googleapis.com/projects/[project-id],gcpIamAccess.roleBindings.role=roles/editor' \
  --requester-justification-config='notMandatory={}' \
  --max-request-duration=3600s

Developer self-service request:

gcloud beta pam grants create \
  --entitlement=prod-admin-access \
  --project=[project-id] \
  --location=global \
  --reason="Deploying hotfix for incident #1234" \
  --requested-duration=1800s

The IAM binding is created only after the grant is approved (if approval is required) and is automatically removed when the duration expires. GCP Cloud Audit Logs capture every grant request, approval, and revocation.

Open-Source Options: Teleport and HashiCorp Boundary

Teleport provides JIT access for SSH, Kubernetes, databases, and internal applications with full session recording.

Access request workflow:

# Developer requests elevated access
tsh request create \
  --roles=prod-db-admin \
  --reason="Investigating outage #4521"

# Approver reviews and approves in Teleport web UI or Slack integration
# Credentials are granted for the configured duration (default 8h, configurable to 1h)
# Every command is recorded and searchable

Self-hosted or Teleport Cloud. The open-source (Community) edition includes all core JIT features.

HashiCorp Boundary provides JIT access for any TCP target (SSH, RDP, databases) without exposing the network. No agent is required on target hosts -- Boundary uses credential brokering and SSH certificate injection. Vault integration enables dynamic, short-lived credentials.

Choose OSS over cloud-native when:

  • You need JIT across multiple clouds in a unified interface
  • You need JIT for on-premises SSH and RDP
  • You need session recording for compliance (SOC 2, FedRAMP)
  • Your team prefers a single tool over three separate cloud consoles

Building an Approval Workflow Without Tooling

Minimum viable JIT for small teams: Slack slash command plus Lambda plus AssumeRole.

Pattern:

  1. Developer types /access-request prod-admin 2h incident: database migration
  2. Lambda posts an approval request to #infra-approval Slack channel with Approve and Deny buttons
  3. Approver clicks Approve
  4. Lambda calls IAM Identity Center API to grant the permission set
  5. Lambda creates an EventBridge rule to call delete-account-assignment in 2 hours
  6. Lambda notifies the developer in Slack DM (or they log in via SSO with the new permission set)

All access requests, approvals, grants, and revocations are logged in DynamoDB for audit and compliance reporting. This pattern can be built in a day and satisfies most SOC 2 access control requirements without purchasing a commercial PAM tool.

The bottom line

Standing privileged access is a persistent attack surface. Every organization with AWS, Azure, or GCP has native JIT capability available today, most without additional cost. Start by identifying your top 5 standing privilege assignments (permanent admin accounts, shared root keys, always-on service accounts) and convert them to time-bounded access using the cloud-native tools. The entire process takes a day to implement and eliminates a significant proportion of your credential risk.

Frequently asked questions

What is just-in-time access and why does it matter?

JIT access means privileged credentials are granted on-demand for a defined window (e.g., 1 hour) and automatically revoked afterward. Standing privilege -- permanent admin access -- means any credential compromise gives attackers persistent access. JIT eliminates that persistence.

Do I need a PAM tool to implement just-in-time access?

No. AWS, Azure, and GCP all have native JIT capabilities. AWS IAM Identity Center supports time-bounded permission sets. Azure PIM provides eligible role assignments with approval workflows. GCP PAM grants temporary IAM bindings. These cover the core JIT use case without additional cost for most organizations.

What is the difference between eligible assignment and active assignment in Azure PIM?

Eligible assignment: user can request activation, goes through approval/MFA, gets time-bounded access. Active assignment: user has the role permanently (the traditional standing privilege model). PIM lets you convert standing active assignments to eligible assignments to implement JIT.

How do I implement JIT for AWS without IAM Identity Center?

Use IAM role assumption with short-lived credentials: aws sts assume-role --role-arn [admin-role] --role-session-name [user]-[timestamp] --duration-seconds 3600. The credentials expire after 1 hour. For workflow enforcement, build an approval process in Slack or ServiceNow that calls the AssumeRole API and returns the credentials.

What is Teleport and when should I use it instead of cloud-native JIT?

Teleport is an open-source access plane that provides JIT SSH, Kubernetes, database, and application access with full audit logging. Use it when you need JIT across multiple clouds or for infrastructure types not covered by cloud-native tools (SSH, on-prem systems, databases).

How do I enforce JIT access without breaking developer productivity?

Set a 4-hour default session for read-only elevated access and 1-hour for write access. Pre-approve common request types automatically (routine deployments, standard DB reads). Require approval only for destructive or unusual access. Use pre-seeded request templates so developers don't have to write free-text justifications.

Sources & references

  1. AWS IAM Identity Center Documentation
  2. Azure Privileged Identity Management
  3. Google Cloud Privileged Access Manager
  4. Teleport Open Source
  5. NIST SP 800-207 Zero Trust Architecture

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, weekly, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals weekly.

Free Brief

The Mythos Brief is free.

AI that finds 27-year-old zero-days. What it means for your security program.

Joins Decryption Digest. Unsubscribe anytime.

Daily Briefing

Get briefings like this every morning

Actionable threat intelligence for working practitioners. Free. No spam. Trusted by 50,000+ SOC analysts, CISOs, and security engineers.

Unsubscribe anytime.

Mythos Brief

Anthropic's AI finds zero-days your scanners miss.