AWS Builder Center

Securing Kiro in the Enterprise: A Field Guide for Safe, Scaled Enablement

A practical blueprint for rolling out Kiro securely at scale. Learn how to layer AWS controls, agent hooks, MCP governance, and fleet-wide configuration enforcement so you can enable developers broadly without compromising enterprise security.

Introduction

Kiro  is an agentic IDE: it goes beyond autocomplete to act as an autonomous agent that can manipulate files, execute commands, create infrastructure, and interact with external platforms through MCP. That capability is what makes Kiro productive — and it's also what raises a new question for enterprise teams: How do we enable hundreds of developers with an autonomous coding agent without compromising production systems?
This guide provides a comprehensive approach to securely enabling Kiro across your entire enterprise development organization from day one. It's based on real-world experience helping large organizations navigate the intersection of developer productivity and enterprise security governance — addressing concerns from security teams, platform engineering, and development leadership.
Whether you're a platform engineer defining governance controls, a security architect conducting due diligence, or a development leader championing adoption, this guide gives you the frameworks and concrete configurations to enable Kiro enterprise-wide with confidence.
Scope and prerequisites: This guide assumes a Kiro Enterprise deployment where users authenticate through AWS IAM Identity Center. The organization-level governance controls described here — the MCP registry, model availability, prompt logging, and other centrally enforced policies — apply only to users authenticating this way. Users signing in with Builder ID or social auth are not subject to organization-level controls.

Understanding Kiro's Security Architecture

Before defining controls, it's critical to understand what Kiro can and cannot do within your environment.

The Principle of Inherited Permissions

Kiro operates within the boundary of the developer's existing permissions. It cannot elevate privileges beyond the user's current IAM roles, cached credentials, or local file system access. Think of Kiro as a highly capable pair programmer sitting at the developer's workstation — it sees what they see, and can do what they can do.
This means:
  • Kiro uses cached AWS credentials from local config files (e.g., ~/.aws/credentials)
  • It cannot assume roles the developer hasn't already been granted
  • By default, command execution requires user approval — but this is governed by the trusted commands list, not by the execution mode. It applies in both Supervised and Autopilot mode.
The ultimate safeguard is environment segregation. Because Kiro inherits whatever access the developer already has, the single most effective control is to keep production credentials off developer workstations entirely — use bastion/jump-host access, short-lived scoped credentials, and CI/CD pipelines as the only path to production. If a user cannot reach production from their laptop, neither can Kiro. We recognize that not every organization has this separation in place, and retrofitting it takes time.This guide does not claim to prevent a user with elevated access from doing something harmful — no client-side tool can guarantee that. What it does provide is a layered set of mitigations — approved tooling, access controls, and validation of agentic command execution — that reduce the likelihood of accidental damage and reinforce compliance. Treat these controls as defense in depth on top of sound environment design, not a substitute for it.

Centralized Control Plane

Kiro Enterprise provides an organizational control plane through AWS IAM Identity Center with the following capabilities:
ControlNotes
User/group managementSSO integration (Okta, Microsoft Entra, SAML/SCIM)
MCP server registryAllowlist of approved MCP servers, plus a global on/off toggle to disable MCP entirely
Model availabilityRestrict which AI models are available; optionally set a default model
Encryption at restAWS-managed key by default; optionally bring your own customer-managed KMS key
Code reference controlsEnable/disable suggestions with code references
Prompt loggingFull audit trail to customer S3 bucket
User activity reportsPer-user telemetry and usage monitoring
Extension registryPoint Kiro to a private registry of vetted extensions (via OS policy/MDM)
Web tools (web_search/web_fetch)Enable or disable Kiro's web search and fetch tools for all users
Credit overagesAllow or block usage beyond plan limits (off = hard stop at the credit limit)
API key generationOff by default. When enabled (Settings > Kiro settings), users can generate API keys from the Kiro portal for non-interactive CLI use
Kiro Web (Preview)Off by default. Toggles access to the Kiro Web Agent for the organization
These policies are enforced deterministically across both the Kiro IDE and the Kiro CLI.

Scoping Settings with Kiro Profiles and AWS Accounts

These centrally configured settings live in a Kiro Profile and apply uniformly to every licensed Kiro user under a given AWS account. There is no per-user override within an account — if you turn credit overages on, enable web tools, or set an MCP registry, that configuration governs all users on that account.
When different groups of users need different settings — for example, one team with credit overages enabled and another with a hard stop, or stricter MCP/model controls for a regulated business unit — provision separate AWS accounts, create a distinct Kiro Profile in each, and assign the relevant licensed users to the account whose profile matches their requirements. Each account's profile is independent — settings are not inherited or overridden across accounts.
This account-based separation has a useful side effect for cost management: because subscriptions and usage are tied to the AWS account, splitting user groups across accounts gives you a clean boundary for chargebacks and per-team cost allocation.

API Keys

API keys let developers authenticate Kiro CLI non-interactively — for automation scripts on a local machine or in CI/CD pipelines, with no browser sign-in or session expiry. Key generation is off by default; an administrator enables it under Settings > Kiro settings ("Enable users to generate API keys"), after which users mint keys from the Kiro portal.
From a security standpoint, treat these like any other long-lived credential:
  • Leave generation disabled unless you have a concrete automation use case, since a key is a standing credential tied to a user's access.
  • Store keys in a secrets manager (not in source, .env files committed to git, or shell history) and scope the surrounding pipeline permissions tightly.
  • API-key users are subject to organization-level governance (MCP registry, model availability, etc.) the same way interactive IAM Identity Center users are.

Kiro Web Agent (Preview)

Kiro Web (preview) is a browser-based agent at app.kiro.dev  that runs each task in an isolated cloud sandbox, separate from the developer's workstation credentials and access.
Kiro Web is out of scope for this guide. This guide focuses on securing the Kiro IDE and CLI.

What Cannot Be Centrally Enforced from the Kiro Control Plane

  • Action-level permissions within MCP servers — Requires custom agent hooks (configured per-project, not centrally pushed)
  • Local IDE configurations — Developers can modify local settings; enforcement relies on organizational policy + monitoring
  • Trusted command overrides — Developers can configure trusted command patterns locally
Enterprises can enforce these configurations through Mobile Device Management (MDM) solutions - see Enforcing Configurations via MDM below.

Identity, Access, and Environment Controls

The most critical security layer exists outside of Kiro — in your existing AWS and identity infrastructure. Since Kiro inherits the developer's permissions, your primary investment should be in ensuring those permissions are correct.

AWS-Level Guardrails

These controls protect your environment regardless of whether a developer is using Kiro, a terminal, or any other tool:
  • Implement least-privilege IAM policies — Scope roles to the minimum required permissions per team and environment
  • Use AWS SSO temporary credentials — Replace long-lived access keys on developer machines with session-based credentials
  • Apply Service Control Policies (SCPs) — Prevent destructive actions (e.g., deleting CloudFormation stacks, modifying production databases) at the organization level
  • Deploy CloudTrail alerts — Monitor for unauthorized role assumptions, unusual API patterns, or production access from unexpected sources
  • Implement bastion/jump server access — For production environments, ensure production credentials are never cached on developer workstations
  • Use IAM Access Analyzer — Continuously validate that your policies grant only intended access

Protecting Sensitive Files with .kiroignore

The .kiroignore file prevents Kiro from reading specific files in your workspace. This is your first line of defense for ensuring secrets, credentials, and sensitive data never enter the agent's context.
Activation matters: A global ignore file at ~/.kiro/settings/kiroignore is honored automatically — no configuration needed. A workspace .kiroignore only takes effect once .kiroignore is added to the kiroAgent.agentIgnoreFiles setting array (e.g., [".gitignore", ".kiroignore"]). For guaranteed enterprise coverage, push the global file via MDM (see Enforcing Configurations via MDM) — it is the one ignore file you can enforce across every workspace on the machine. Treat workspace .kiroignore files as additive.

Distribution Strategy

LevelFile LocationScope
Global~/.kiro/settings/kiroignoreAll projects on the machine (e.g., credential paths)
Project.kiroignore in repo rootPer-repository rules committed to version control
Subdirectory.kiroignore in any subfolderOverride/extend parent rules for specific paths
Key behaviors:
  • Uses standard .gitignore syntax (wildcards, negation with !, directory patterns)
  • Subdirectory files take precedence over parent rules
  • The kiroAgent.agentIgnoreFiles setting controls which ignore files are active; it accepts an array (e.g., [".gitignore", ".kiroignore"]) and can include .gitignore so its patterns also apply to the agent. A workspace .kiroignore must be listed here to take effect.
  • Negation caveat: you cannot re-include a file once its parent directory is excluded (e.g., excluding secrets/ then adding !secrets/public.txt will not work). Use more specific patterns instead.
  • Test your patterns by asking Kiro to read an ignored file — it will confirm access is blocked
Tip: Start with credentials and secrets — these are the highest priority files to protect. Expand patterns as your teams identify additional sensitive paths.

Agent Hooks — Your Enterprise Policy Engine

Hooks are the most powerful mechanism available for controlling Kiro's behavior at the action level. They fire at specific points during the agent lifecycle and can block operations before they execute.

How Hooks Work

1
2
3
4
Developer Request → Kiro Agent → [Pre Tool Use Hook] → Tool Execution
│
├── ALLOW → Proceed
└── DENY → Block + Explain
In the Kiro IDE, hooks are stored per workspace in that project's .kiro/hooks/ directory (as JSON, typically with a .kiro.hook extension). The IDE loads hooks only from the open workspace — there is no global/user-level hooks directory for the IDE (a file in ~/.kiro/hooks/ is not picked up). The Kiro CLI handles hooks differently: they are defined inside the agent configuration file, so a global agent at ~/.kiro/agents/ is the closest equivalent to a user-level hook, and it applies to the CLI only. There are two action types:
Action TypeHow It WorksCredits
Agent Prompt ("Ask Kiro")Natural language policy evaluation by the LLMConsumes credits
Shell CommandDeterministic local command executionFree
If a Shell Command hook returns a non-zero exit code, the tool invocation is blocked and the command's stderr is sent to the agent. On a zero (success) exit code, the command's stdout is added to the agent's context — so keep audit/logging output terse to avoid noise. If an Agent Prompt hook results in a denial message, the agent is forbidden from retrying the tool call.

Hook Triggers and Tool Types

Hooks fire at defined points in the agent lifecycle — most importantly preToolUse (before a tool runs, for blocking). You scope a hook with toolTypes: built-in categories (read, write, shell, web, spec, or * for all), or a regex pattern to match tools by name (e.g., .*sql.*). For the full list of triggers and tool-type patterns, see the Agent Hooks documentation .

Sample Hooks

1. Block Destructive Shell Commands
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "Block Dangerous Commands",
"version": "1.0.0",
"description": "Prevent execution of destructive shell commands",
"when": {
"type": "preToolUse",
"toolTypes": ["shell"]
},
"then": {
"type": "askAgent",
"prompt": "DENY this operation if the command includes any of: rm -rf, git push --force, git push -f, DROP TABLE, DROP DATABASE, kubectl delete, terraform destroy, aws cloudformation delete-stack, cdk destroy. These are destructive operations that require manual execution with explicit human approval outside of Kiro."
}
}
2. Restrict Database MCP Tools to Read-Only (assuming the MCP tool name contains "sql")
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "Read-Only Database Access",
"version": "1.0.0",
"description": "Only allow SELECT queries through database MCP tools",
"when": {
"type": "preToolUse",
"toolTypes": [".*sql.*"]
},
"then": {
"type": "askAgent",
"prompt": "Only allow SELECT and DESCRIBE/EXPLAIN queries. DENY any INSERT, UPDATE, DELETE, TRUNCATE, ALTER, DROP, CREATE, or other DDL/DML operations. Respond with ACCESS DENIED: 'Database write operations must be performed through approved migration scripts.'"
}
}

Enforcing Configurations via MDM

While Kiro's control plane applies settings uniformly at the organization level, it cannot centrally push project-level configurations like hooks, .kiroignore files, or trusted command settings to developer machines. However, enterprises already operating Mobile Device Management (MDM) solutions - such as Microsoft Intune - can close much of this gap.
What MDM can enforce:
ConfigurationFile PathMDM Strategy
Global .kiroignore~/.kiro/settings/kiroignoreDeploy and lock file via MDM profile/policy
Agent settings (Supervised mode, trusted commands)Kiro settings JSONPush managed configuration; prevent local override
IDE hook library<workspace>/.kiro/hooks/ (per workspace)Deploy into each project root via a self-healing managed extension (see below) or MDM/scripts + monitor for drift (no global IDE hooks dir)
CLI hook config~/.kiro/agents/ (global agent)Push a managed global agent config for user-level CLI hooks
Kiro extension settingsIDE settings filesPush managed preferences
Implementation patterns:
  1. Deploy and protect global ignore rules - Use MDM to place a managed ~/.kiro/settings/kiroignore file on every developer machine. Configure the policy to prevent local modification or deletion.
  2. Default to Supervised mode - Push Kiro settings that default to Supervised mode to maximize review visibility. (Remember this is a review aid, not an access control — pair it with trusted-commands and protected-path enforcement, which gate actions in both modes.)
  3. Lock trusted command patterns - Deploy a conservative trusted commands configuration and flag any local modifications as a compliance violation.
  4. Distribute and protect hooks - For the IDE, get your baseline .kiro/hooks/ into every workspace — the IDE has no global hooks directory. The most automatic option is a self-healing managed extension (see A Self-Healing Managed Extension) that MDM installs on each machine; it writes and repairs the baseline hooks into every workspace as it's opened, covering new and existing repositories. Repo templates, scaffolding, or MDM/scripts that target project roots are alternatives. For the CLI, push a managed global agent config. Use MDM/CI compliance checks to verify hook files remain intact.
  5. Monitor for drift - Use your MDM's detection and remediation features to identify when managed Kiro configuration files are modified or deleted, or when unauthorized MCP servers appear in mcp.json, and restore them to their approved state.

A Self-Healing Managed Extension

Because Kiro is a fork of VS Code, it inherits the VS Code extension API — which opens an advanced enforcement option: a small internal extension that injects and repairs your baseline .kiro/ configuration (hooks especially) in every workspace a developer opens. This is the most automatic way to get workspace-scoped hooks onto every project, since it covers new and existing repositories and recreates files that are deleted.
How it works. The extension activates on startup (onStartupFinished) and subscribes to workspace events. On each workspace open or folder add, it ensures the .kiro/ folder and your required files exist, recreating them if missing:
This is an example of an extension that automatically creates a hook to block Kiro from running certain destructive commands.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const vscode = require('vscode');
const fs = require('fs');
const path = require('path');

// Your baseline hook library — add entries as needed.
const BASELINE_HOOKS = {
'block-destructive.kiro.hook': JSON.stringify({
name: 'Block Destructive Commands',
version: '1.0.0',
when: { type: 'preToolUse', toolTypes: ['shell'] },
then: {
type: 'askAgent',
prompt: 'DENY any command containing rm -rf, DROP TABLE, DELETE FROM, format, mkfs, or dd if=. Respond with: Command blocked by enterprise security policy.'
}
}, null, 2)
};

function ensureBaseline(folder) {
const hooksDir = path.join(folder.uri.fsPath, '.kiro', 'hooks');
try {
fs.mkdirSync(hooksDir, { recursive: true });
for (const [filename, content] of Object.entries(BASELINE_HOOKS)) {
const hookPath = path.join(hooksDir, filename);
if (!fs.existsSync(hookPath)) {
fs.writeFileSync(hookPath, content, 'utf-8');
console.log(`[Enterprise Hooks] Created: ${hookPath}`);
}
}
} catch (err) {
console.error(`[Enterprise Hooks] Error: ${err.message}`);
}
}

function activate(context) {
console.log('[Enterprise Hooks] Activated');
if (vscode.workspace.workspaceFolders) {
vscode.workspace.workspaceFolders.forEach(ensureBaseline);
}
context.subscriptions.push(
vscode.workspace.onDidChangeWorkspaceFolders(e => e.added.forEach(ensureBaseline))
);
}

module.exports = { activate };
Deploying and enforcing the extension via MDM. The reliable, cross-platform install path is the kiro command-line launcher — the IDE's bundled command-line executable (the equivalent of VS Code's code command), not the separate Kiro CLI agent. Run kiro --install-extension your-extension.vsix as part of your MDM app-deployment step — dropping a .vsix into an extensions folder does not install it. Verified locations on a current Windows install (other OSes follow the same VS Code-fork convention):
ItemWindowsmacOSLinux
User settings%APPDATA%\Kiro\User\settings.json~/Library/Application Support/Kiro/User/settings.json~/.config/Kiro/User/settings.json
Installed extensions%USERPROFILE%\.kiro\extensions\ (with extensions.json manifest)~/.kiro/extensions/~/.kiro/extensions/
kiro command-line launcher%LOCALAPPDATA%\Programs\Kiro\bin\kiro.cmdkiro on PATHkiro on PATH
Note that extensions live under ~/.kiro/extensions (not the app-data/User directory), and ~/.kiro/ contains no hooks folder. Enforcement comes from MDM (re)installing the extension on a schedule and monitoring for its removal.
Trade-offs to weigh: it's a custom artifact you build, security-review, and maintain (and must publish to your private registry if you've locked Kiro to one); it self-heals only on workspace open, not in real time; and it writes to disk directly, outside Kiro's agent, so it isn't gated by protected paths or hooks — which makes it effective but also a trusted, privileged component. Treat it as a custom pattern, not an official feature, and pair it with CI/CD validation.

Extension Registry Control

By default, Kiro uses the public Open VSX  marketplace for extensions. For enterprises that need to control which extensions are available to developers, Kiro supports pointing to a private extension registry via OS-level policies deployed through MDM or Group Policy.
This allows administrators to:
  • Restrict developers to a curated, vetted set of extensions
  • Prevent installation of unapproved or potentially risky third-party extensions
  • Maintain a consistent development environment across the organization

Recommendations

  • Host an internal Open VSX instance or equivalent private registry with only approved extensions
  • Vet extensions for security risks (network access, file system permissions, data exfiltration) before adding to your registry
  • Audit periodically for extensions that have been abandoned, have known CVEs, or request excessive permissions
  • Combine with MDM enforcement to ensure the policy cannot be overridden locally by developers
For full implementation details and sample policy files, see Kiro Custom Extension Registry documentation .

MCP Server Governance

Model Context Protocol (MCP) servers are the primary mechanism for Kiro to interact with external platforms (Figma, Jira, databases, AWS services, etc.). Each MCP integration represents a new trust boundary that requires evaluation.

Centralized MCP Registry

Use the Kiro console (Settings > Shared settings) to maintain organization-wide MCP controls:
  • Global MCP toggle — Turn MCP off entirely for all subscribers, or on to permit approved servers. When off, the Kiro client suppresses all MCP servers and the /mcp panel displays "MCP has been disabled by your administrator." MCP also fails closed if the client cannot reach the governance API.
  • Approved-server allowlist — Curate the set of MCP servers developers are permitted to connect to; Kiro enforces this deterministically across both the IDE and the CLI
  • Authentication requirements — Remote MCP servers should integrate with your identity provider and respect scope-based permissions (when users authenticate, the platform honors scope limitations defined by the MCP server configuration)

Setting Up the MCP Allow-List

To enforce an approved-server allowlist, you need three things:
  1. A registry JSON file listing each approved server and its connection details. The format follows the Kiro MCP registry schema and supports both remote (HTTP/SSE) and local (stdio via npm, pypi, or OCI packages) servers. Use ${VAR} placeholders for user-specific values like auth tokens, so users can supply them as environment variables without editing the registry.
  2. An HTTPS endpoint to host it. Serve the file over HTTPS using any web server (Amazon S3, Apache, nginx). The URL must be reachable from developer machines but can be private to your corporate network, and the endpoint must present a valid CA-signed certificate — self-signed is not supported.
  3. The URL configured in the Kiro console. Under Settings > Shared settings, ensure the MCP toggle is On, edit the MCP Registry URL field, enter your hosted file's URL, and save.
For the full registry schema, a complete JSON example, and step-by-step configuration, see the Kiro MCP governance documentation .

Enforcement Behavior

Once the registry is active:
  • Only registered servers appear in the MCP panel's "Install from registry" option
  • UI blocks manual additions — developers cannot add servers through the Kiro interface
  • Locally configured servers are suppressed — if a developer manually adds a server to mcp.json, it appears as a "hidden server" and cannot be used
  • Sync cadence — Kiro fetches the registry at startup and every 24 hours. If a previously-approved server is removed from the registry, Kiro terminates it on the next sync
  • Version pinning — if the locally installed server has a different version than the registry definition, Kiro relaunches with the registry-specified version

User Overrides (by design)

Registry server parameters (URL, package identifier, arguments) are read-only to users. However, users can:
  • Add environment variables for local servers (e.g., auth tokens)
  • Add HTTP headers for remote servers
  • Change the request timeout
  • Set the server scope (Global, Workspace, or Agent Configuration)
  • Set MCP tool trust permissions
This allows personalization (like setting credentials) without undermining the approved-server boundary.

Restricting MCP Tool Actions with Hooks

Even after approving an MCP server at the organization level, use hooks to restrict specific actions at the project level:
1
2
3
4
5
6
7
8
9
10
11
12
{
"name": "Restrict Jira MCP to Read-Only",
"version": "1.0.0",
"when": {
"type": "preToolUse",
"toolTypes": [".*jira.*"]
},
"then": {
"type": "askAgent",
"prompt": "Only allow read operations (get issue, search, list). DENY any create, update, delete, or transition operations. Respond with ACCESS DENIED: 'Jira modifications must be made directly in the Jira interface.'"
}
}

Execution Modes and Human-in-the-Loop Controls

Supervised vs. Autopilot Mode

Important: Supervised mode is a code-review workflow, not a security control. It is not a sandbox, isolation boundary, or access-control mechanism. Both modes grant the agent the same capabilities and access scope — the only difference is the review workflow. The controls that actually restrict what the agent can touch are protected paths, trusted commands, .kiroignore, workspace isolation, credential scoping, and your AWS-level guardrails.
ModeBehaviorEnterprise Recommendation
SupervisedAfter each turn, the agent pauses and presents file changes as a diff for hunk-level accept/rejectDefault at launch — maximizes review visibility while teams build familiarity
Autopilot (default in Kiro)Agent applies changes immediately; you review or revert after the factEnable for teams with mature hook coverage and established trust
In Supervised mode, file-modifying operations are tagged for review and reverted automatically if you reject them. Note that file reads and command suggestions are not gated by the mode — and shell commands follow their own approval path via the trusted commands list in both modes.
In Autopilot mode, your hooks, protected paths, and trusted-commands list become the enforcement layer. Ensure comprehensive coverage before enabling Autopilot for any team.

Trusted Commands

Kiro uses prefix matching for trusted commands. Configure conservatively:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
✅ Appropriate for enterprise:
npm test
npm run lint
npm run build
git status
git diff
git log

⚠️ Too broad — evaluate carefully:
npm * (includes npm publish, npm install arbitrary packages)
git * (includes git push --force, git reset --hard)

🚫 Never use in enterprise:
* (trusts ALL commands — bypasses all prompts)

Protected Paths

Kiro requires explicit approval before writing to certain protected paths — in both Autopilot and Supervised mode:
  • .vscode/ — VS Code workspace settings
  • vscode~ — VS Code backup/recovery files
  • .git/ and .git — Git internals, and the .git directory or submodule file itself
  • git~ — Git lock and backup files
  • .code-workspace — Multi-root workspace files
  • mcp.json — MCP server configuration
  • .kiroignore — Ignore rules (prevents self-modification)

Code Security and Intellectual Property Protection

Code Reference Controls

Kiro can flag when a suggestion is similar to publicly available open-source code, surfacing the source and license information in a code-reference log. Key points for enterprises:
  • Code references are disabled by default. When enabled, Kiro includes reference/attribution information with matching suggestions.
  • Enterprise administrators control this org-wide via the "Include suggestions with code references" setting in the Kiro console. Enterprise users cannot override the administrator's choice.
Coverage note: AWS offers indemnity for Kiro's output so that Pro, Pro+, and Power subscribers can ship with confidence — see the Kiro for enterprise  page and Section 50.10 of the AWS Service Terms  for the governing terms and any conditions. Because IP indemnity terms can interact with how code references are handled, confirm the Service Terms conditions before standardizing on disabling code references organization-wide.

Human Attestation and Review Workflow

While Kiro doesn't include a dedicated "attestation checkbox," several capabilities support a human-in-the-loop workflow that satisfies audit requirements:
  1. Supervised mode — Pauses after each turn for diff review and accept/reject of file changes (a review aid, not an access control)
  2. Spec-driven development — Generates requirements, system design, and task breakdowns before writing code, creating a documented decision trail
  3. Diff review — Developers review all file changes in a diff view before committing
  4. Checkpoints and revert — Kiro creates checkpoints before major changes; developers can review and revert
  5. Prompt logging — All conversations and suggestions are logged, providing an audit trail of AI-generated vs. human-accepted code
  6. Existing code review — Layer your standard PR process (required approvers, peer reviews) on top of Kiro's output

Defense-in-Depth: How Kiro Layers with Your Existing SDLC

Kiro fits into a layered SDLC rather than replacing any part of it:
  1. Agent hooks (.kiro/hooks/) — immediate: block dangerous actions in real time, before a tool runs.
  2. Kiro CLI review (optional) — pipeline: run Kiro CLI in headless mode to review the diff and gate the PR on findings.
  3. Existing CI/CD gates — pipeline: your SAST, DAST, SCA, and compliance checks.
  4. Peer review — human: final approval from required reviewers.
Kiro doesn't replace any of these layers — it adds early-stage protection that catches issues before they ever reach your pipeline. Kiro CLI headless mode runs non-interactively in CI/CD (authenticate with KIRO_API_KEY, pass a prompt with --no-interactive, grant tools with --trust-all-tools/--trust-tools) to review the diff and fail the check on findings. See the Kiro CLI headless mode documentation . This is an optional, customer-built integration rather than a managed PR feature.

Cost Governance and Usage Monitoring

Subscription Tiers and Cost Containment

Kiro offers different subscription tiers, each with a different number of credits allocated. Credits expire monthly (use-it-or-lose-it) and are consumed fractionally (in 0.01-credit increments based on prompt complexity). By default, usage stops when credits are exhausted — but administrators can enable Overages in the Kiro console to let users keep working beyond their plan limit. Cost containment is therefore a deliberate admin choice: leave overages off for a hard cap, or turn them on (with monitoring) for uninterrupted work. For current tier pricing and credit allocations, see the pricing page , as these can change over time.

Monitoring and Reporting

CapabilityDeliveryWhat It Shows
Admin dashboardAWS ConsoleDaily usage trends, credit consumption
User-level reportsDaily file to S3Per-user credits consumed, models used, last activity, IDE vs. CLI
Prompt loggingEncrypted to S3Full record of all user prompts and agent responses
User-level reports delivered to your S3 bucket enable automation — build dashboards, alerts, and chargeback models on top of the raw data.

Enterprise Data Protection

What Kiro Does NOT Do with Enterprise Data

  • No training on your data — Content from enterprise users (authenticated via IAM Identity Center) is never used for model training or service improvement
  • No data storage — Enterprise user data is not stored by Kiro; content is processed for inference and discarded
  • No cross-tenant exposure — Your code and prompts are isolated from other organizations
Automatic posture for enterprise users: Enterprise (IAM Identity Center) users are automatically opted out of telemetry and content collection. Enterprise content is not stored. Cross-region inference stays within the geography (US or EU) associated with your Kiro profile.

Additional Resources


This guide reflects the Kiro feature set as of June 2026. Always verify current capabilities with the official documentation .
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article