<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>AWS Security Blog</title>
	<atom:link href="https://aws.amazon.com/blogs/security/feed/" rel="self" type="application/rss+xml"/>
	<link>https://aws.amazon.com/blogs/security/</link>
	<description>The latest AWS security, identity, and compliance launches, announcements, and how-to posts.</description>
	<lastBuildDate>Mon, 22 Jun 2026 15:53:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Prevent data exfiltration: AWS egress controls for cloud workloads</title>
		<link>https://aws.amazon.com/blogs/security/prevent-data-exfiltration-aws-egress-controls-for-cloud-workloads/</link>
					
		
		<dc:creator><![CDATA[Meriem SMACHE]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 15:53:05 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon GuardDuty]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[AWS Network Firewall]]></category>
		<category><![CDATA[AWS Security Hub]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Resolver DNS Firewall]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">96dc24400f0b226b20e6dd452bf37a75acd3e2be</guid>

					<description>When securing an Amazon Web Services (AWS) environment, teams naturally prioritize inbound controls, firewalls, WAFs, and access policies, because that’s where the most visible threats originate. Outbound traffic, on the other hand, tends to get less attention. It’s often left open by default to avoid breaking application dependencies and because the risk feels less immediate. […]</description>
										<content:encoded>&lt;p&gt;When securing an &lt;a href="https://aws.amazon.com" target="_blank" rel="noopener noreferrer"&gt;Amazon Web Services (AWS)&lt;/a&gt; environment, teams naturally prioritize inbound controls, firewalls, WAFs, and access policies, because that’s where the most visible threats originate. Outbound traffic, on the other hand, tends to get less attention. It’s often left open by default to avoid breaking application dependencies and because the risk feels less immediate. But overlooking egress means missing a key layer of defense. Without visibility into what’s leaving your network, it’s harder to detect unintended data flows, whether from misconfigured services, overly broad permissions, or workloads with unauthorized access.&lt;/p&gt; 
&lt;p&gt;Real-world incidents highlight why egress controls deserve attention across both traditional cloud workloads and emerging AI-driven architectures.&lt;/p&gt; 
&lt;p&gt;In traditional cloud environments, application-level security issues remain a persistent threat. For example, when &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2025-55182" target="_blank" rel="noopener noreferrer"&gt;CVE-2025-55182 (React2Shell)&lt;/a&gt; was publicly disclosed in December 2025, multiple organized groups began exploitation attempts within hours, targeting unpatched React Server Components to achieve remote code execution. After a workload is accessed by an unauthorized party, they typically establish outbound command-and-control channels and begin exfiltrating data. Without egress controls in place, that outbound traffic can flow freely, and the unauthorized access might go unnoticed until a compliance audit, customer complaint, or incident notification forces discovery.&lt;/p&gt; 
&lt;p&gt;Agentic AI systems introduce a new dimension to this risk. The &lt;a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/" target="_blank" rel="noopener noreferrer"&gt;OWASP Top 10 for Agentic Applications&lt;/a&gt; identifies threats such as Agent Goal Hijack (ASI01), where unauthorized parties manipulate an autonomous agent’s objectives to silently exfiltrate data, and Unexpected Code Execution (ASI05), where an agent with unauthorized access generates and runs potentially damaging code that establishes reverse shells or transfers sensitive data to external endpoints. As organizations deploy AI agents with access to tools, APIs, and code interpreters, these agents become high-value targets, and their outbound network activity must be constrained with the same rigor as any other workload.&lt;/p&gt; 
&lt;p&gt;In both scenarios, the common thread is unauthorized outbound traffic. In this post, we show you how to implement layered egress detection and protection using AWS services working together to reduce unauthorized data transfer risk, whether the source is an application with unauthorized access or a manipulated AI agent.&lt;/p&gt; 
&lt;h2&gt;Architecture overview&lt;/h2&gt; 
&lt;div id="attachment_42586" style="width: 1424px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42586" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/egress-under-control1.png" alt="Figure 1: Hub-and-spoke egress control architecture" width="1414" height="1732" class="size-full wp-image-42586"&gt;
 &lt;p id="caption-attachment-42586" class="wp-caption-text"&gt;Figure 1: Hub-and-spoke egress control architecture&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The following architecture, shown in Figure 1, illustrates one approach to implementing a hub-and-spoke network pattern for a multi-account AWS environment. Note that alternative designs might be appropriate depending on your organizational requirements and constraints.&lt;/p&gt; 
&lt;p&gt;Application workloads reside in &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/framework/rel_planning_network_topology_prefer_hub_and_spoke.html" target="_blank" rel="noopener noreferrer"&gt;spoke virtual private clouds (VPCs)&lt;/a&gt; that connect to an &lt;a href="https://aws.amazon.com/transit-gateway/" target="_blank" rel="noopener noreferrer"&gt;AWS Transit Gateway&lt;/a&gt;, which serves as the central hub for routing inter-VPC and internet-bound traffic while enforcing network segmentation through carefully crafted route tables. Spoke VPCs use &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-resources.html" target="_blank" rel="noopener noreferrer"&gt;VPC endpoints&lt;/a&gt; for secure AWS service access, keeping traffic within the AWS network where possible. VPC endpoint policies are applied as key data perimeter controls, restricting which principals can access AWS services and which resources can be accessed through these endpoints.&lt;/p&gt; 
&lt;p&gt;Internet-bound traffic is routed through a &lt;a href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/tgw-firewall.html" target="_blank" rel="noopener noreferrer"&gt;transit gateway-attached&lt;/a&gt; &lt;a href="https://aws.amazon.com/network-firewall" target="_blank" rel="noopener noreferrer"&gt;AWS Network Firewall&lt;/a&gt;, which inspects and filters outbound flows before they reach the internet. This centralized routing model scales horizontally by adding spoke VPCs without modifying the inspection infrastructure, making it well suited for organizations that have multiple AWS accounts.&lt;/p&gt; 
&lt;p&gt;It’s important to understand that &lt;a href="https://aws.amazon.com/route53/resolver-dns-firewall/" target="_blank" rel="noopener noreferrer"&gt;Amazon Route 53 Resolver DNS Firewall&lt;/a&gt; must be deployed across your VPCs to filter DNS queries that resolve through the Route 53 VPC Resolver. (DNS queries sent directly to other DNS resolvers bypass it, but can be filtered with AWS Network Firewall.) The DNS firewall uses both managed and custom domain lists to filter DNS queries, blocking resolution of known unauthorized domains before any network connection is established.&lt;/p&gt; 
&lt;p&gt;Data perimeter controls are enforced at multiple layers: &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html" target="_blank" rel="noopener noreferrer"&gt;service control policies (SCPs)&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html" target="_blank" rel="noopener noreferrer"&gt;resource control policies (RCPs)&lt;/a&gt; at the &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html" target="_blank" rel="noopener noreferrer"&gt;AWS Organizations&lt;/a&gt; level, VPC endpoint policies at the network level, and resource policies on individual services. &lt;a href="https://aws.amazon.com/iam/access-analyzer/" target="_blank" rel="noopener noreferrer"&gt;AWS IAM Access Analyzer&lt;/a&gt; is deployed at the organization level to continuously detect publicly accessible or externally shared resources.&lt;/p&gt; 
&lt;p&gt;A detection layer comprising &lt;a href="https://aws.amazon.com/guardduty/" target="_blank" rel="noopener noreferrer"&gt;Amazon GuardDuty&lt;/a&gt;, &lt;a href="https://aws.amazon.com/security-hub/" target="_blank" rel="noopener noreferrer"&gt;AWS Security Hub&lt;/a&gt;, and IAM Access Analyzer provides continuous monitoring and threat detection. Findings are routed through an integration layer using &lt;a href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html" target="_blank" rel="noopener noreferrer"&gt;Amazon EventBridge&lt;/a&gt;, which triggers &lt;a href="https://aws.amazon.com/lambda" target="_blank" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt;-based automated remediation and sends notifications using &lt;a href="https://aws.amazon.com/sns/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Notification Service (Amazon SNS)&lt;/a&gt;. This integration layer also feeds back into your network controls, &lt;a href="https://aws.amazon.com/blogs/security/automatically-block-suspicious-traffic-with-aws-network-firewall-and-amazon-guardduty/" target="_blank" rel="noopener noreferrer"&gt;automatically updating Network Firewall deny rules&lt;/a&gt; and &lt;a href="https://aws.amazon.com/blogs/security/automatically-block-suspicious-dns-activity-with-amazon-guardduty-and-route-53-resolver-dns-firewall/" target="_blank" rel="noopener noreferrer"&gt;DNS Firewall block lists&lt;/a&gt; based on detected threats.&lt;/p&gt; 
&lt;p&gt;Centralized observability is achieved through &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html" target="_blank" rel="noopener noreferrer"&gt;Amazon CloudWatch Logs&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html" target="_blank" rel="noopener noreferrer"&gt;CloudWatch dashboards&lt;/a&gt;. Network Firewall flow logs and alert logs are collected centrally to support incident investigation and compliance reporting.&lt;/p&gt; 
&lt;p&gt;This architecture applies equally to traditional application workloads and AI-driven workloads. An AI agent running on &lt;a href="https://aws.amazon.com/bedrock" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt;, for example, typically sits inside a spoke VPC. When that agent invokes an external API or attempts to reach the internet, its traffic follows the same path through Transit Gateway and Network Firewall as any &lt;a href="https://aws.amazon.com/ec2" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt; or container workload. The agent doesn’t get a special lane out, it’s subject to the same domain allow-lists, the same DNS filtering, and the same data perimeter policies.&lt;/p&gt; 
&lt;p&gt;That said, agents often need outbound access to invoke external tools or third-party APIs as part of their normal operation, which makes allow-list design more nuanced. You will want to scope allowing domains tightly to the specific endpoints your agents legitimately need, rather than opening broad categories. Complementing these network-layer controls with application-layer guardrails such as &lt;a href="https://aws.amazon.com/bedrock/guardrails" target="_blank" rel="noopener noreferrer"&gt;Amazon Bedrock Guardrails&lt;/a&gt;—which can filter harmful content and detect prompt attacks before they reach the network layer—adds another layer of defense.&lt;/p&gt; 
&lt;h2&gt;Preventive controls&lt;/h2&gt; 
&lt;p&gt;The following preventive controls block data exfiltration before it occurs. Because they actively disrupt traffic, reserve them for activity that is confirmed or highly likely to be potentially damaging.&lt;/p&gt; 
&lt;h3&gt;AWS Network Firewall&lt;/h3&gt; 
&lt;p&gt;Consider this scenario: an unauthorized party compromises an EC2 instance in one of your spoke VPCs and attempts to exfiltrate sensitive data to an external server. Now consider an agentic AI scenario: an unauthorized party uses prompt injection to hijack an AI agent’s goal (OWASP ASI01), redirecting it to exfiltrate training data to an external endpoint. Network Firewall is designed to block this attempt because the unauthorized destination isn’t on the approved domain allow-list—the same control that stops an EC2 instance with unauthorized access— also stops a manipulated AI agent.&lt;/p&gt; 
&lt;p&gt;Without centralized egress inspection, that traffic flows directly to the internet through a &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" target="_blank" rel="noopener noreferrer"&gt;NAT gateway&lt;/a&gt;. Network Firewall prevents this by providing centralized, Layers 3–7 deep packet inspection with advanced threat intelligence capabilities, including IP address, port, and protocol filtering; plus packet content inspection using Suricata-compatible rules.&lt;/p&gt; 
&lt;p&gt;In this architecture, Transit Gateway funnels internet-bound traffic from multiple spoke VPCs through Network Firewall for centralized inspection. The firewall endpoint becomes the target for 0.0.0.0/0 routes, routing outbound internet traffic for inspection before reaching &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" target="_blank" rel="noopener noreferrer"&gt;NAT gateways&lt;/a&gt; for address translation. In both scenarios, Network Firewall blocks the exfiltration attempt at the network layer before data leaves your environment. Its key capabilities include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Domain name filtering:&lt;/strong&gt; Block traffic to unauthorized destinations (such as a command-and-control server at &lt;code style="color: #000000"&gt;*.untrusted-domain.com&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;IP and port rules&lt;/strong&gt;: Define explicit allow-lists for external IPs your applications truly need, blocking everything else&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Domain category filtering:&lt;/strong&gt; Block entire categories of domains that your workloads should never communicate with&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;IDS and IPS:&lt;/strong&gt; Detect and block known attack patterns in outbound traffic using Suricata-compatible rules&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Port and protocol enforcement:&lt;/strong&gt; Help ensure only expected protocols use their designated ports (for example, only HTTPS on TCP port 443), preventing protocol tunneling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Geographic IP filtering:&lt;/strong&gt; Block outbound traffic to geographic regions where your organization has no business relationships&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;TLS decryption:&lt;/strong&gt; Inspect encrypted traffic to detect exfiltration attempts hidden within HTTPS connections&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Threat intelligence integration:&lt;/strong&gt; Use managed threat intelligence (such as active threat defense that uses the Amazon threat intelligence system MadPot) feeds or custom Suricata rules to detect unexpected patterns&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic scaling:&lt;/strong&gt; Handles up to 100 Gbps per Availability Zone&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For multi-account environments, &lt;a href="https://aws.amazon.com/firewall-manager" target="_blank" rel="noopener noreferrer"&gt;AWS Firewall Manager&lt;/a&gt; can centrally deploy and manage Network Firewall across your organization’s accounts, helping maintain consistent egress rules everywhere. Additionally, &lt;a href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/network-firewall-proxy-developer-guide.html" target="_blank" rel="noopener noreferrer"&gt;AWS Network Firewall Proxy&lt;/a&gt; (in preview) offers explicit proxy capabilities with granular HTTP/HTTPS filtering—including URL path and HTTP method-level controls—for workloads that require application-layer inspection of outbound web traffic.&lt;/p&gt; 
&lt;h3&gt;Route 53 Resolver DNS Firewall&lt;/h3&gt; 
&lt;p&gt;DNS queries made through Route 53 VPC Resolver don’t pass through the outbound network path inspected by Network Firewall or third-party firewalls. Unauthorized parties can take advantage of this by encoding sensitive data within DNS queries to external servers, a technique known as DNS tunneling. This risk extends to agentic AI workloads. An agent with code execution capabilities (OWASP ASI05) could be tricked into running a script that encodes sensitive data (like customer records, model weights, API keys) into DNS queries directed at an externally&amp;nbsp;controlled nameserver. DNS Firewall is designed to block these queries regardless of whether they originate from a traditional workload or an AI agent, because the filtering happens at the resolver level before any connection is established.&lt;/p&gt; 
&lt;p&gt;Because DNS traffic is essential for normal operations and often overlooked in security architectures, it represents a common unauthorized data exfiltration channel. Route 53 Resolver DNS Firewall closes this gap by filtering and potentially blocking outbound DNS queries from your VPCs. Its core capabilities consist of:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Block unauthorized domains:&lt;/strong&gt; AWS provides managed domain lists, including an Aggregate Threat List covering malware, ransomware, botnet, spyware, and DNS tunneling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enforce allow-lists:&lt;/strong&gt; Permit only queries to approved domains, blocking everything else&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DNS Firewall Advanced&lt;/strong&gt; &lt;strong&gt;features:&lt;/strong&gt; AI and machine learning (AI/ML)-backed detection of DNS tunneling, Domain Generation Algorithms (DGAs), and dictionary DGAs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Configuration is straightforward: Create rule groups with domain match lists and actions (block, allow, and alert), then associate them with your VPCs. The DNS resolver applies these rules to every DNS query made from instances in the VPC through Route 53 Resolver. This prevents unauthorized parties from using DNS tunneling to exfiltrate data, a technique that completely bypasses inspection by firewalls in the egress VPC.&lt;/p&gt; 
&lt;p&gt;For a deeper look at the risks associated with DNS exfiltration and DNS Firewall Advanced capabilities, see &lt;a href="https://aws.amazon.com/blogs/security/protect-against-advanced-dns-threats-with-amazon-route-53-resolver-dns-firewall/" target="_blank" rel="noopener noreferrer"&gt;Protect against advanced DNS threats with Amazon Route 53 Resolver DNS Firewall&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Data perimeters&lt;/h3&gt; 
&lt;p&gt;A data perimeter is a set of preventive guardrails that allow only your trusted identities to access trusted resources from expected networks. While the preceding controls secure the network paths out of your environment, data perimeters secure the API-level paths, helping to ensure that even if an unauthorized party gains access to valid credentials, they can’t use AWS service APIs to move data to resources outside your organization.&lt;/p&gt; 
&lt;p&gt;This comprehensive approach uses three primary AWS capabilities working together:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html" target="_blank" rel="noopener noreferrer"&gt;Service control policies (SCPs)&lt;/a&gt;: Organization-wide preventive controls that restrict what identities can do. In the context of egress protection, SCPs can prevent users from creating resources that bypass your egress controls (for example, preventing the creation of VPCs without DNS Firewall associations or blocking the use of services that could establish alternative outbound paths).&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html" target="_blank" rel="noopener noreferrer"&gt;Resource control policies (RCPs)&lt;/a&gt;: Controls that restrict API access to your resources. While RCPs aren’t directly egress controls, they act as a complementary layer. For example, they can block attempts to access your &lt;a href="https://aws.amazon.com/s3" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt; buckets from outside your organization at the resource level.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://github.com/aws-samples/data-perimeter-policy-examples/tree/main/vpc_endpoint_policies" target="_blank" rel="noopener noreferrer"&gt;VPC endpoint policies&lt;/a&gt;: VPC endpoints enable private communication with AWS services without traffic going through the internet. VPC endpoint policies are resource-based &lt;a href="https://aws.amazon.com/iam" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt; policies that govern what can be accessed through that endpoint. This is where data perimeters most directly function as an egress control.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Consider the following VPC endpoint policy that restricts Amazon S3 access through the endpoint to only S3 buckets within your organization, directly preventing an insider or a workload with unauthorized access&amp;nbsp;from copying data to an external S3 bucket:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-css"&gt;{
  "Statement": [{
    "Sid": "DenyAccessToNonOrgBuckets",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": "*",
    "Condition": {
      "StringNotEqualsIfExists": {
        "aws:ResourceOrgID": "&amp;lt;my-org-id&amp;gt;"
      }
    }
  }]
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This policy is designed to deny any Amazon S3 operation through this VPC endpoint unless the target S3 bucket belongs to your organization. Without this control, a workload with unauthorized access could use &lt;code style="color: #000000"&gt;aws s3 cp&lt;/code&gt; to copy sensitive data to an externally controlled bucket in a different AWS account.&lt;/p&gt; 
&lt;p&gt;Data perimeter policies don’t grant new permissions, they narrow what’s accessible by establishing guardrails, acting as a second authorization layer. By implementing these perimeters using IAM condition keys like &lt;code style="color: #000000"&gt;aws:PrincipalOrgID&lt;/code&gt;, &lt;code style="color: #000000"&gt;aws:ResourceOrgID&lt;/code&gt;, &lt;code style="color: #000000"&gt;aws:SourceVpc&lt;/code&gt;, and &lt;code style="color: #000000"&gt;aws:SourceVpce&lt;/code&gt;, you create layered permissions guardrails that help prevent unintended access patterns and configuration errors.&lt;/p&gt; 
&lt;p&gt;For more information on implementing perimeter controls, explore the &lt;a href="https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html" target="_blank" rel="noopener noreferrer"&gt;Building a Data Perimeter&lt;/a&gt; AWS whitepaper.&lt;/p&gt; 
&lt;h2&gt;Detective controls&lt;/h2&gt; 
&lt;p&gt;The following detective controls surface data exfiltration attempts after they occur. Because they observe rather than disrupt traffic, you can apply them broadly to flag &lt;strong&gt;unexpected&lt;/strong&gt; activity for investigation. Use the findings to identify recurring unauthorized patterns that can graduate into preventive controls.&lt;/p&gt; 
&lt;h3&gt;Amazon GuardDuty: Detective control for egress threats&lt;/h3&gt; 
&lt;p&gt;GuardDuty serves as your critical detection layer for egress protection, continuously monitoring for outbound threats that evade or take advantage of your preventive controls. GuardDuty identifies behavioral anomalies and attack patterns that indicate active data exfiltration attempts. Its egress-focused detection capabilities include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;DNS-based data exfiltration detection:&lt;/strong&gt; The &lt;code style="color: #000000"&gt;Trojan:EC2/DNSDataExfiltration&lt;/code&gt; finding alerts when EC2 instances are transferring data through DNS channels. GuardDuty also identifies queries to DGA domains commonly used for command-and-control communication.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Known malicious actor detection:&lt;/strong&gt; &lt;code style="color: #000000"&gt;Exfiltration:S3/MaliciousIPCaller&lt;/code&gt; triggers when Amazon S3 data APIs like &lt;code style="color: #000000"&gt;GetObject&lt;/code&gt; or &lt;code style="color: #000000"&gt;CopyObject&lt;/code&gt; are invoked from IP addresses on AWS threat intelligence feeds, signaling active data extraction attempts.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-step attack sequence correlation:&lt;/strong&gt; GuardDuty Extended Threat Detection correlates multiple unexpected events to identify multi-stage exfiltration campaigns. For example, &lt;code style="color: #000000"&gt;AttackSequence: S3/CompromisedData&lt;/code&gt; detects when unauthorized parties modify S3 bucket policies to broaden access and then systematically extract data using stolen credentials.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html" target="_blank" rel="noopener noreferrer"&gt;GuardDuty findings&lt;/a&gt; serve dual purposes in your egress strategy. Alerts about attempted exfiltration that failed confirm your preventive layers (Network Firewall, DNS Firewall, and data perimeters) are functioning effectively: the threat was detected because it progressed far enough to trigger behavioral analysis, but your controls blocked the actual data loss. Conversely, findings indicating successful exfiltration trigger immediate incident response workflows, enabling you to contain active incidents, revoke stolen credentials, and quarantine affected resources before significant damage occurs.&lt;/p&gt; 
&lt;p&gt;Integrate GuardDuty with Security Hub for centralized correlation across your security services and implement automated response through EventBridge and Lambda functions to enable real-time containment when high-severity exfiltration findings occur.&lt;/p&gt; 
&lt;h3&gt;IAM Access Analyzer&lt;/h3&gt; 
&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html" target="_blank" rel="noopener noreferrer"&gt;IAM Access Analyzer&lt;/a&gt; helps identify potential data exfiltration paths by detecting resources accessible from outside your AWS account or organization. It uses automated reasoning technology to analyze resource-based policies and identify which of your resources can be accessed by external entities (principals outside your zone of trust), continuously monitoring public and cross-account access.&lt;/p&gt; 
&lt;p&gt;External access analyzers identify resources shared with external principals (such as other AWS accounts or public access). For example, when an S3 bucket is configured to allow access outside your zone of trust through bucket policies, ACLs, or access points, IAM Access Analyzer generates a finding with details about the access path, including the external principal and the level of access granted. Security teams can respond by taking immediate action to remove unintended access or by setting up automated notifications through EventBridge to engage development teams for remediation.&lt;/p&gt; 
&lt;h3&gt;AWS Security Hub&lt;/h3&gt; 
&lt;p&gt;Security Hub exposure findings provide a comprehensive view of potential security risks by correlating data from multiple AWS security services. These findings identify when resources might be vulnerable to data exfiltration by integrating intelligence from GuardDuty (for threat detection), &lt;a href="https://aws.amazon.com/inspector/" target="_blank" rel="noopener noreferrer"&gt;Amazon Inspector&lt;/a&gt; (for vulnerability assessment), &lt;a href="https://aws.amazon.com/security-hub/cspm/" target="_blank" rel="noopener noreferrer"&gt;Security Hub CSPM&lt;/a&gt; (for configuration compliance), and &lt;a href="https://aws.amazon.com/macie/" target="_blank" rel="noopener noreferrer"&gt;Amazon Macie&lt;/a&gt; (for sensitive data discovery). For example, it can identify when a publicly exposed S3 bucket contains sensitive data and isn’t encrypted at rest, flagging it as a potential data exfiltration risk that requires immediate attention.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/waf/latest/developerguide/nsd-chapter.html" target="_blank" rel="noopener noreferrer"&gt;AWS Shield network security director (in preview)&lt;/a&gt; complements Security Hub by discovering and analyzing your network topology to identify resources with unrestricted outbound internet access, helping you detect potential egress blind spots across your environment.&lt;/p&gt; 
&lt;h2&gt;Egress security strategy&lt;/h2&gt; 
&lt;p&gt;You don’t need to implement all these controls at once. The following phased approach lets you build your egress security posture incrementally, at a pace that matches your organization’s operational maturity and risk tolerance.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Phase 1 – Quick wins:&lt;/strong&gt; Enable Route 53 DNS Firewall across your VPCs to close the DNS exfiltration gap. Enable GuardDuty across your accounts for baseline threat detection.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Phase 2 – Foundational:&lt;/strong&gt; Deploy organization-wide data perimeters (SCPs, RCPs, and VPC endpoint policies). Deploy Network Firewall as a transit gateway-attached firewall.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Phase 3 – Efficient:&lt;/strong&gt; Enable IAM Access Analyzer for continuous external access detection. Implement automated remediation through EventBridge and Lambda to update firewall rules in real time. Centralize findings in Security Hub with automated alerting.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Egress security isn’t a single control—it’s a layered strategy. Start by assessing your current posture across network filtering, DNS security, data perimeters, and detective controls. Identify the gaps, then follow the phased approach outlined in this post to close them incrementally. Regular testing through simulated exfiltration attempts validates that your controls work effectively. These controls apply with equal force to agentic AI workloads, where manipulated agents can become unintended exfiltration vectors. Put egress under control and turn your outbound blind spots into monitored checkpoints.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below. &lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/Merriem-SMACHE.png" alt="Merriem-SMACHE" width="120" height="160" class="aligncenter size-full wp-image-42581"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Meriem SMACHE&lt;/h3&gt; 
  &lt;p&gt;Meriem is a Security Specialist Solutions Architect at AWS, supporting customers in the design and deployment of resilient cloud and AI solutions, from generative AI workloads to fully autonomous agentic systems, that meet their regulatory requirements and security needs.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/Maxim-Raya.jpg" alt="Maxim Raya" width="120" height="160" class="aligncenter size-full wp-image-42582"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Maxim Raya&lt;/h3&gt; 
  &lt;p&gt;Maxim is a Security Specialist Solutions Architect at AWS. In this role, he helps clients accelerate their cloud transformation by increasing their confidence in the security and compliance of their AWS environments.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Accelerate security investigations with Kiro CLI</title>
		<link>https://aws.amazon.com/blogs/security/accelerate-security-investigations-with-kiro-cli/</link>
					
		
		<dc:creator><![CDATA[Sibasankar Behera]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 19:24:30 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">da33aace33224ddb24f73a17d9191cd994952dc1</guid>

					<description>When a security event occurs in your Amazon Web Services (AWS) environment, rapid response is critical. However security teams often struggle with time-consuming, manual processes that slow down investigations. Analysts must recall complex AWS Command Line Interface (AWS CLI) syntax for multiple services, manually correlate findings across Amazon GuardDuty, AWS CloudTrail, and other security tools, […]</description>
										<content:encoded>&lt;p&gt;When a security event occurs in your &lt;a href="https://aws.amazon.com/" target="_blank" rel="noopener noreferrer"&gt;Amazon Web Services (AWS)&lt;/a&gt; environment, rapid response is critical. However security teams often struggle with time-consuming, manual processes that slow down investigations. Analysts must recall complex &lt;a href="https://aws.amazon.com/cli" target="_blank" rel="noopener noreferrer"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt; syntax for multiple services, manually correlate findings across &lt;a href="https://aws.amazon.com/guardduty/" target="_blank" rel="noopener noreferrer"&gt;Amazon GuardDuty&lt;/a&gt;, &lt;a href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener noreferrer"&gt;AWS CloudTrail&lt;/a&gt;, and other security tools, and document every investigation step for compliance requirements. They make critical decisions under pressure while active threats continue. For analysts without deep AWS expertise, these challenges are even more pronounced, creating bottlenecks in your security operations.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://kiro.dev/" target="_blank" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt; is an AI-powered coding assistant that helps users write, understand, and optimize code through integrated development environment (IDE) and command line integrations. Beyond traditional development tasks, it offers AWS-specific expertise including architecture guidance, best practices, cost optimization recommendations, and service documentation navigation. &lt;a href="https://kiro.dev/cli/" target="_blank" rel="noopener noreferrer"&gt;Kiro CLI&lt;/a&gt; puts Kiro’s full capabilities in your terminal, making it a natural fit for security operations workflows. For example, with &lt;a href="https://kiro.dev/docs/cli/reference/built-in-tools/" target="_blank" rel="noopener noreferrer"&gt;built-in tools&lt;/a&gt;, Kiro CLI can be used to help with investigation of a&amp;nbsp;GuardDuty finding—it will propose the appropriate AWS CLI commands, explain what each command does, and wait for your approval before executing. This approach lets you focus on analyzing threats rather than figuring out how to investigate them.&lt;/p&gt; 
&lt;p&gt;This blog post demonstrates how to use Kiro CLI to conduct a security investigation following the &lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS Security Incident Response Guide&lt;/a&gt; framework. This framework organizes incident response into five phases:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Preparation&lt;/strong&gt;: Having the right tools and processes in place before an incident occurs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Detection and analysis&lt;/strong&gt;: Identifying security events and understanding their scope&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Containment&lt;/strong&gt;: Limiting the impact of an incident and preventing further damage&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Eradication and recovery&lt;/strong&gt;: Removing threats and restoring normal operations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Post-incident activity&lt;/strong&gt;: Learning from incidents to improve future response&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You’ll see how you can use Kiro CLI to triage GuardDuty findings, assess impacted &lt;a href="https://aws.amazon.com/ec2/" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt; resources, analyze &lt;a href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener noreferrer"&gt;AWS CloudTrail&lt;/a&gt; logs, and generate remediation scripts. By the end of this post, you’ll learn how to use Kiro CLI to run security investigations in minutes rather than hours — without skipping steps.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;Before getting started, confirm you have the following:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://kiro.dev/docs/cli/installation/" target="_blank" rel="noopener noreferrer"&gt;Install Kiro CLI&lt;/a&gt; (available for macOS, Linux and Windows)&lt;/li&gt; 
 &lt;li&gt;Kiro access, either: 
  &lt;ul&gt; 
   &lt;li&gt;Create a free&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html" target="_blank" rel="noopener noreferrer"&gt;AWS Builder ID&lt;/a&gt;&amp;nbsp;account&lt;/li&gt; 
   &lt;li&gt;Use your organization’s Kiro Pro subscription&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt;: Configure using one of the methods in&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html" target="_blank" rel="noopener noreferrer"&gt;Configuring settings for the AWS CLI&lt;/a&gt;. Kiro CLI uses the default AWS CLI profile (or the profile specified by the&amp;nbsp;&lt;code style="color: #000000"&gt;AWS_PROFILE&lt;/code&gt;&amp;nbsp;environment variable) to interact with AWS resources and will request your approval before executing any actions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;To show Kiro CLI in action, we investigate a GuardDuty finding end to end — following the AWS Security Incident Response Guide framework through the following steps.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Discovery&lt;/strong&gt;: Retrieve and analyze a high-severity GuardDuty finding&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Resource analysis&lt;/strong&gt;: Examine EC2 instance configuration, security groups, and &lt;a href="https://aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt; permissions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Containment&lt;/strong&gt;: Isolate the compromised instance and revoke excessive permissions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Evidence preservation&lt;/strong&gt;: Create forensic snapshots using &lt;a href="https://aws.amazon.com/ebs/" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Block Store (Amazon EBS)&lt;/a&gt; snapshots&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Scope assessment&lt;/strong&gt;: Analyze CloudTrail logs to determine event scope&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Proactive defense&lt;/strong&gt;: Establish automated alerting using &lt;a href="https://aws.amazon.com/sns/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Notification Service (Amazon SNS)&lt;/a&gt; and &lt;a href="https://aws.amazon.com/eventbridge/" target="_blank" rel="noopener noreferrer"&gt;Amazon EventBridge&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Knowledge capture&lt;/strong&gt;: Create reusable investigation workflows through steering files&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Throughout this investigation, Kiro CLI will propose commands, explain their purpose, wait for approval, and automatically document findings—transforming an inefficient manual process into a guided, efficient workflow.&lt;/p&gt; 
&lt;p&gt;Kiro CLI combines AI reasoning with deep AWS knowledge to analyze security findings, correlate evidence across services, and propose appropriate AWS CLI commands at each step of an investigation. While this AI-powered approach accelerates investigations, it’s important to validate outputs and recommendations before taking action. The specific commands and analysis shown in this walkthrough are examples—your results will vary based on your specific findings and environment configuration.&lt;/p&gt; 
&lt;h2&gt;The investigation: From alert to resolution&lt;/h2&gt; 
&lt;p&gt;In this section, we walk you through the phases of an investigation, from discovery through analysis.&lt;/p&gt; 
&lt;h3&gt;Discovery: A high-severity GuardDuty finding&lt;/h3&gt; 
&lt;p&gt;Our investigation began with a GuardDuty finding requiring immediate attention. Rather than manually constructing AWS CLI commands, we used Kiro CLI’s natural language interface:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;I need to investigate GuardDuty finding 58cddb4e8705cde3f595ef5805f50491 in us-east-1. Please help me understand this finding by checking the finding details, resource details, and threat details. For each investigation step, propose the AWS CLI command, explain what information we'll get, and wait for my confirmation before showing the next command. Document everything in a findings.md file in the current directory, including finding summary, investigation steps, evidence collected, and remediation guidance. Structure it for both technical and executive audiences.&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This single prompt establishes the entire investigation framework, as shown in Figure 1. By requesting step-by-step approval, we maintain control while benefiting from AI guidance. The documentation requirement helps ensure that we’re building an audit trail in real-time for compliance requirements.&lt;/p&gt; 
&lt;div id="attachment_42610" style="width: 946px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42610" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-1.png" alt="Figure 1: Kiro CLI interface showing the initial investigation prompt and proposed first command to retrieve GuardDuty detector ID and finding details" width="936" height="734" class="size-full wp-image-42610"&gt;
 &lt;p id="caption-attachment-42610" class="wp-caption-text"&gt;Figure 1: Kiro CLI interface showing the initial investigation prompt and proposed first command to retrieve GuardDuty detector ID and finding details&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;Kiro CLI proposed retrieving the detector ID and complete finding details. After approval, it executed the commands and revealed critical information, as shown in Figure 2.Key findings:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Type:&lt;/strong&gt; CryptoCurrency:EC2/BitcoinTool.B!DNS&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; HIGH (8.0)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Instance:&lt;/strong&gt; i-05447e6dacd0a7e7e (m5.xlarge)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Threat:&lt;/strong&gt; 617 DNS queries to pool.minergate.com&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Timeline:&lt;/strong&gt; Started 9 minutes after instance launch&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We can see that it took 9 minutes from instance launch to mining activity, which suggests automated event rather than manual action. This timeline information, automatically extracted and highlighted by Kiro CLI, helps security teams understand event patterns.&lt;/p&gt; 
&lt;div id="attachment_42611" style="width: 760px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42611" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-2.png" alt="Figure 2: GuardDuty finding details showing HIGH severity cryptocurrency mining detection with threat indicators and timeline" width="750" height="172" class="size-full wp-image-42611"&gt;
 &lt;p id="caption-attachment-42611" class="wp-caption-text"&gt;Figure 2: GuardDuty finding details showing HIGH severity cryptocurrency mining detection with threat indicators and timeline&lt;/p&gt;
&lt;/div&gt; 
&lt;h3&gt;Resource and scope analysis&lt;/h3&gt; 
&lt;p&gt;Kiro CLI proposed investigating the EC2 instance configuration, security groups, IAM permissions, and checking for additional findings. This proactive suggestion demonstrates Kiro CLI’s understanding of security investigation workflows, it knows that understanding the potential impact requires examining not just what the unauthorized user did, but what might possibly be a next step in a typical threat scenario.&lt;/p&gt; 
&lt;p&gt;The following information is also shown in Figure 3.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Instance configuration:&lt;/strong&gt; Kiro CLI retrieved the instance details, revealing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Amazon Linux 2023 AMI&lt;/li&gt; 
 &lt;li&gt;Instance Metadata Service version 2 (IMDSv2) required (good security posture)&lt;/li&gt; 
 &lt;li&gt;Public IP address with unrestricted outbound access&lt;/li&gt; 
 &lt;li&gt;IAM instance profile attached&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Security group assessment:&lt;/strong&gt; Kiro CLI analyzed the security group rules and identified:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;No inbound rules&lt;/li&gt; 
 &lt;li&gt;Unrestricted outbound access to 0.0.0.0/0, enabling mining traffic&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;IAM permission analysis:&lt;/strong&gt; Kiro CLI examined the instance profile and attached role policies, uncovering a critical security risk:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Critical finding:&lt;/strong&gt; AdministratorAccess policy attached to the EC2 instance profile&lt;/li&gt; 
 &lt;li&gt;Full AWS account access from compromised instance&lt;/li&gt; 
 &lt;li&gt;Potential for complete account takeover&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;While the observed activity is cryptocurrency mining, the attached AdministratorAccess policy means the unauthorized user could have exfiltrated data, created backdoors, or compromised other resources. This highlights why least-privilege IAM policies are critical. Even if an instance is compromised, limited permissions help reduce the potential impact.&lt;/p&gt; 
&lt;div id="attachment_42612" style="width: 946px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42612" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-3.png" alt="Figure 3: Kiro CLI’s instance configuration summary highlighting the AdministratorAccess policy, unrestricted outbound access, and multiple concurrent security findings" width="936" height="844" class="size-full wp-image-42612"&gt;
 &lt;p id="caption-attachment-42612" class="wp-caption-text"&gt;Figure 3: Kiro CLI’s instance configuration summary highlighting the AdministratorAccess policy, unrestricted outbound access, and multiple concurrent security findings&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Scope assessment:&lt;/strong&gt; Kiro CLI checked for additional unexpected activity and discovered seven security findings on this single instance, indicating a multi-vector attack, as shown in Figure 4.&lt;/p&gt; 
&lt;div id="attachment_42613" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42613" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-4.png" alt="Figure 4: Kiro CLI’s summary highlighting a multi-vector attack." width="678" height="212" class="size-full wp-image-42613"&gt;
 &lt;p id="caption-attachment-42613" class="wp-caption-text"&gt;Figure 4: Kiro CLI’s summary highlighting a multi-vector attack.&lt;/p&gt;
&lt;/div&gt; 
&lt;h3&gt;Containment actions&lt;/h3&gt; 
&lt;p&gt;Kiro CLI proposed a systematic remediation plan aligned with the knowledge obtained by following &lt;a href="https://docs.aws.amazon.com/security-ir/latest/userguide/containment.html" target="_blank" rel="noopener noreferrer"&gt;AWS Security Incident Response Guide’s containment&lt;/a&gt; strategy, as shown in Figure 5.&lt;/p&gt; 
&lt;div id="attachment_42614" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42614" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-5.png" alt="Figure 5: Kiro CLI’s summary of the investigation and recommendations for immediate actions." width="678" height="354" class="size-full wp-image-42614"&gt;
 &lt;p id="caption-attachment-42614" class="wp-caption-text"&gt;Figure 5: Kiro CLI’s summary of the investigation and recommendations for immediate actions.&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Instance isolation:&lt;/strong&gt; Kiro CLI produced commands to create an isolation security group with no inbound or outbound rules (as shown in Figure 6), then applied it to the compromised instance. This containment step stops new connections without destroying evidence. However, it’s important to understand that security groups are stateful and use&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html" target="_blank" rel="noopener noreferrer"&gt;connection tracking&lt;/a&gt;. When you change security group rules, existing connections aren’t immediately interrupted and continue to allow packets until they time out.&lt;/p&gt; 
&lt;p&gt;This means that if an unauthorized user has an active connection to the instance, that connection might persist temporarily even after applying the isolation security group. For immediate interruption of all traffic including active connections, consider also implementing network access control lists (NACLs), which are stateless and don’t track connection state.&amp;nbsp;Unlike security groups, NACLs can immediately break existing connections when rules are applied. While NACLs operate at the subnet level (broader scope than instance-level security groups), they provide an additional layer of defense that helps ensure network isolation.&lt;/p&gt; 
&lt;p&gt;This scenario illustrates an important principle: while AI-powered tools such as Kiro CLI can help you respond more quickly by generating appropriate commands, it’s critical to keep a human in the loop who understands these nuances. Kiro CLI might not have complete information about edge cases, so security professionals should validate recommendations and consider additional controls based on their expertise and the specific threat scenario.&lt;/p&gt; 
&lt;div id="attachment_42615" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42615" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-6.png" alt="Figure 6: Instance successfully isolated with confirmation showing no inbound or outbound rules, blocking all network traffic including command-and-control (C&amp;amp;C) communications and mining activity" width="678" height="424" class="size-full wp-image-42615"&gt;
 &lt;p id="caption-attachment-42615" class="wp-caption-text"&gt;Figure 6: Instance successfully isolated with confirmation showing no inbound or outbound rules, blocking all network traffic including command-and-control (C&amp;amp;C) communications and mining activity&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Privilege revocation:&lt;/strong&gt; Kiro CLI generated commands to attach a deny-all policy to the compromised IAM role (as shown in Figure 7). The AI assistant explained that even though the AdministratorAccess policy remains attached, the deny-all policy takes precedence because of the evaluation logic used by IAM, where explicit denies always override any allows. This immediately revoked all permissions while preserving the original configuration for forensic analysis.&lt;/p&gt; 
&lt;div id="attachment_42616" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42616" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-7.png" alt="Figure 7: IAM credentials revocation confirmation with current status checklist showing network isolated, IAM credentials revoked, and forensic snapshot pending" width="678" height="294" class="size-full wp-image-42616"&gt;
 &lt;p id="caption-attachment-42616" class="wp-caption-text"&gt;Figure 7: IAM credentials revocation confirmation with current status checklist showing network isolated, IAM credentials revoked, and forensic snapshot pending&lt;/p&gt;
&lt;/div&gt; 
&lt;h3&gt;Evidence preservation&lt;/h3&gt; 
&lt;p&gt;Before making mutating changes, Kiro CLI recommended creating a forensic snapshot of the compromised instance’s Amazon EBS volume (as shown in figure 8). This step can be missed when teams are under pressure to contain an active threat, but it’s critical for post-incident analysis and potential legal proceedings.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Memory preservation decision:&lt;/strong&gt; We chose to leave the instance running in its isolated state rather than stopping it immediately. Stopping an EC2 instance results in loss of volatile memory containing forensic evidence such as running processes, network connections, loaded malware, and encryption keys. By maintaining the instance in an isolated security group with all network access blocked, we neutralized the threat while preserving the ability to conduct deeper forensic investigation if needed.&lt;/p&gt; 
&lt;p&gt;Volatile memory often contains evidence that explains how an event occurred, malware binaries, decryption keys, or command-and-control (C&amp;amp;C) communications that disappear when an instance stops. This decision point illustrates the balance between immediate threat elimination and thorough investigation.&lt;/p&gt; 
&lt;p&gt;Capturing volatile memory&amp;nbsp;requires specialized tools and techniques. For Linux instances,&amp;nbsp;&lt;a href="https://github.com/504ensicsLabs/LiME&amp;quot; \t &amp;quot;_blank" target="_blank" rel="noopener noreferrer"&gt;LiME (Linux Memory Extractor)&lt;/a&gt;&amp;nbsp;can capture physical memory, while Windows instances can use tools like&amp;nbsp;&lt;a href="https://github.com/Velocidex/WinPmem&amp;quot; \t &amp;quot;_blank" target="_blank" rel="noopener noreferrer"&gt;Winpmem&lt;/a&gt;. After being captured, memory dumps can be analyzed using&amp;nbsp;&lt;a href="https://www.volatilityfoundation.org/" target="_blank" rel="noopener noreferrer"&gt;Volatility&lt;/a&gt;, an open source memory forensics framework. Forensics tools should be pre-installed on your systems to avoid changes being made during the evidence gathering process. AWS provides guidance on&amp;nbsp;&lt;a href="https://aws.amazon.com/blogs/security/how-to-automatically-build-forensic-kernel-modules-for-amazon-linux-ec2-instances/" target="_blank" rel="noopener noreferrer"&gt;automating forensic kernel module builds for Amazon Linux EC2 instances&lt;/a&gt;&amp;nbsp;to streamline this process.&lt;/p&gt; 
&lt;div id="attachment_42617" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42617" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-8.png" alt="Figure 8: Forensic snapshot creation confirmation with proper tagging including purpose, incident ID, and severity for evidence preservation" width="678" height="388" class="size-full wp-image-42617"&gt;
 &lt;p id="caption-attachment-42617" class="wp-caption-text"&gt;Figure 8: Forensic snapshot creation confirmation with proper tagging including purpose, incident ID, and severity for evidence preservation&lt;/p&gt;
&lt;/div&gt; 
&lt;h3&gt;CloudTrail analysis&lt;/h3&gt; 
&lt;p&gt;To understand the full scope of compromise, we asked Kiro CLI to analyze CloudTrail logs. The AI assistant identified available CloudTrail trails and proposed queries to find any API calls made from the compromised instance using its temporary credentials (as shown in Figure 9).&lt;/p&gt; 
&lt;p&gt;CloudTrail analysis is often the most time-consuming part of incident investigation, requiring analysts to construct complex queries and correlate events across time. Kiro CLI automates this process, immediately identifying the relevant log sources and proposing appropriate queries.&lt;/p&gt; 
&lt;div id="attachment_42618" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42618" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-9.png" alt="Figure 9: Kiro CLI identifying available CloudTrail trails and proposing targeted queries" width="678" height="196" class="size-full wp-image-42618"&gt;
 &lt;p id="caption-attachment-42618" class="wp-caption-text"&gt;Figure 9: Kiro CLI identifying available CloudTrail trails and proposing targeted queries&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;Kiro CLI found no unexpected API calls originating from the instance credentials—no IAM users created, no S3 buckets accessed, and no secrets stolen. The event appeared limited to cryptocurrency mining activity conducted through DNS queries, with no evidence of data exfiltration or lateral movement.&lt;/p&gt; 
&lt;div id="attachment_42619" style="width: 688px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42619" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-10.png" alt="Figure 10: Investigation results from Kiro CLI" width="678" height="42" class="size-full wp-image-42619"&gt;
 &lt;p id="caption-attachment-42619" class="wp-caption-text"&gt;Figure 10: Investigation results from Kiro CLI&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;This shows the value of thorough CloudTrail analysis: even when initial findings suggest a contained threat, confirming the absence of broader compromise is essential before closing an investigation.&lt;/p&gt; 
&lt;h2&gt;Building proactive defenses&lt;/h2&gt; 
&lt;p&gt;The AWS Security Incident Response Guide emphasizes that &lt;a href="https://docs.aws.amazon.com/security-ir/latest/userguide/preparation.html" target="_blank" rel="noopener noreferrer"&gt;preparation&lt;/a&gt; is the foundation of effective incident response. With the immediate threat contained, we used Kiro CLI to strengthen our preparation phase by establishing automated alerting for future incidents.&lt;/p&gt; 
&lt;p&gt;As shown in Figure 11, we used natural language to request&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;Set up a notification system that sends an email to [email] for any high severity or higher severity findings.&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Kiro CLI understood the requirement and proposed a multi-step solution involving Amazon SNS and EventBridge:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create an SNS topic for GuardDuty alerts&lt;/li&gt; 
 &lt;li&gt;Subscribe an email address to the topic&lt;/li&gt; 
 &lt;li&gt;Create an EventBridge rule to trigger on high-severity findings (severity greater than or equal to 7.0)&lt;/li&gt; 
 &lt;li&gt;Configure the SNS topic as the EventBridge target&lt;/li&gt; 
 &lt;li&gt;Grant EventBridge permissions to publish to the SNS topic&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Building automated alerting requires understanding multiple AWS services, their interactions, and correct configuration syntax. Kiro CLI translates a straightforward natural language request into a complete, production-ready solution.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Auto-correction and testing:&lt;/strong&gt; When setting up complex integrations, commands can fail because of permission issues, incorrect Amazon Resource Name (ARN) references, or malformed JSON policies. Kiro CLI automatically detects these failures and proposes corrected commands.&lt;/p&gt; 
&lt;div id="attachment_42620" style="width: 946px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42620" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/FIG-11.png" alt="Figure 11: Notification system setup completion showing SNS topic created, EventBridge rule configured, and confirmation that notifications will trigger on HIGH and CRITICAL severity findings" width="936" height="392" class="size-full wp-image-42620"&gt;
 &lt;p id="caption-attachment-42620" class="wp-caption-text"&gt;Figure 11: Notification system setup completion showing SNS topic created, EventBridge rule configured, and confirmation that notifications will trigger on HIGH and CRITICAL severity findings&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;You can also prompt Kiro CLI to test the setup: Test this notification system to verify it’s working correctly. Kiro CLI will verify that the SNS subscription is confirmed, check that the EventBridge rule is properly configured, validate IAM permissions, identify any misconfigurations, and publish a test event to verify end-to-end functionality. This intelligent error handling means security teams can confidently deploy automation without manual troubleshooting.&lt;/p&gt; 
&lt;h2&gt;Creating reusable investigation workflows&lt;/h2&gt; 
&lt;p&gt;With the immediate threat contained and proactive defenses in place, we then used Kiro CLI to create a reusable steering file that codifies this investigation workflow for future incidents. Steering files are Markdown files stored in&amp;nbsp;.kiro/steering/&amp;nbsp;that act as persistent memory for Kiro CLI, helping security teams capture institutional knowledge and standardize response procedures. To share them across your team, add them to a Git repository or publish them to your documentation system like Confluence — the same places you’d keep any other runbook.&lt;/p&gt; 
&lt;p&gt;We recommend running the full investigation and generating the steering file in the same Kiro CLI session. This way, the steering file captures the exact steps, commands, and decisions from your investigation. Navigate the process the way that fits your organization — the steering file will reflect your workflow, not a generic template.&lt;/p&gt; 
&lt;p&gt;We asked Kiro CLI:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;Create a steering file that captures this GuardDuty investigation workflow so future analysts can follow the same systematic approach.&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Kiro CLI generated a detailed steering file at &lt;code style="color: #000000"&gt;.kiro/steering/guardduty-incident-response.md&lt;/code&gt; that includes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Investigation phases aligned with the AWS Security Incident Response Guide&lt;/li&gt; 
 &lt;li&gt;AWS CLI command patterns for GuardDuty, Amazon EC2, IAM, and CloudTrail&lt;/li&gt; 
 &lt;li&gt;Documentation requirements and approval gates&lt;/li&gt; 
 &lt;li&gt;Containment, eradication, and evidence preservation procedures&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This is the example steering file that was created by Kiro cli:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-python"&gt;--- 
inclusion: manual 
--- 
 
# GuardDuty Incident Response Workflow 
 
This steering file guides systematic investigation of GuardDuty findings following AWS Security Incident Response Guide best practices. 
 
## Investigation Phases 
 
### Detection and Analysis 
1. Retrieve GuardDuty finding details using finding ID 
2. Extract finding type, severity, affected resources, and threat indicators 
3. Document timeline of events (instance launch, threat detection) 
 
### Resource Analysis 
4. Investigate EC2 instance configuration (AMI, IMDS version, network access) 
5. Analyze security group rules (inbound/outbound access) 
6. Review IAM permissions attached to instance profile 
7. Check for additional findings on the same resource 
 
### Containment 
8. Create isolation security group with no inbound/outbound rules 
9. Apply isolation security group to compromised instance 
10. Create forensic snapshot before making destructive changes 
11. Preserve volatile memory by keeping instance running if forensic analysis needed 
 
### Eradication 
12. Revoke excessive IAM permissions 
13. Document all actions in findings.md with technical and executive summaries 
 
### Analysis 
14. Query CloudTrail for API calls from compromised instance credentials 
15. Assess scope of compromise and potential lateral movement 
 
## Documentation Requirements 
- Finding summary with severity and type 
- Investigation steps with timestamps 
- Evidence collected (security groups, IAM policies, CloudTrail logs) 
- Remediation actions taken 
- Recommendations for prevention 
 
## AWS CLI Command Patterns 
- GuardDuty: `aws guardduty get-findings` 
- EC2: `aws ec2 describe-instances`, `aws ec2 describe-security-groups` 
- IAM: `aws iam get-instance-profile`, `aws iam list-attached-role-policies` 
- CloudTrail: `aws cloudtrail lookup-events` 
 
## Approval Gates 
Always propose commands with explanations before execution and wait for approval. &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Traditional incident response playbooks are static documents that quickly become outdated. Kiro CLI steering files are executable playbooks that guide AI-assisted investigations with consistency while remaining flexible enough to adapt to specific scenarios. Steering files stay current because updating them is part of the workflow, not a separate task. When you adjust your investigation process, ask Kiro CLI to update the steering file at the end of the session. It captures your changes, and you share the updated version with the team through Git or Confluence — everyone works from the latest version.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Security incidents require accurate and rapid response, but traditional investigation workflows create bottlenecks that extend mean time to respond (MTTR). By following the framework provided by the &lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS Security Incident Response Guide&lt;/a&gt; and using Kiro CLI’s AI-powered capabilities, you can transform incident response from reactive to proactive, well-documented operations.&lt;/p&gt; 
&lt;p&gt;In this post, we demonstrated how Kiro CLI accelerates each phase of the incident response lifecycle—from initial detection and analysis through containment, eradication, and recovery. You learned how to use natural language prompts to investigate GuardDuty findings, analyze compromised resources, implement containment measures, preserve forensic evidence, and establish automated alerting for future incidents. The steering file capability helps your team embed hard-won expertise in reusable workflows that benefit analysts at all skill levels.&lt;/p&gt; 
&lt;p&gt;Whether you’re investigating alerts, building defenses, or documenting procedures, Kiro CLI provides the expertise and automation to respond faster, learn continuously, build better defenses, and document thoroughly. When commands fail or configurations are wrong, Kiro CLI identifies the issue and corrects it, reducing time spent troubleshooting.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-42607" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/Sibasankar-Behera.jpg" alt="Sibasankar Behera" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sibasankar Behera&lt;/h3&gt; 
  &lt;p&gt;Sibasankar is a Senior Solutions Architect at AWS in the Automotive and Manufacturing team. He is passionate about AI, data and security. In his free time, he loves spending time with his family and reading non-fiction books.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-22626" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2021/10/20/Marshall-Jones-Author.jpg" alt="Author" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Marshall Jones&lt;/h3&gt; 
  &lt;p&gt;Marshall is a Worldwide Security Specialist Solutions Architect at AWS. His background is in AWS consulting and security architecture and focused on a variety of security domains including edge, threat detection, and compliance. Today, he’s focused on helping enterprise AWS customers adopt and operationalize AWS security services to increase security effectiveness and reduce risk.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Spring 2026 SOC 1 and 2 reports are now available in OSCAL format</title>
		<link>https://aws.amazon.com/blogs/security/spring-2026-soc-1-and-2-reports-are-now-available-in-oscal-format/</link>
					
		
		<dc:creator><![CDATA[Thomas Fischer]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 16:50:34 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Compliance reports]]></category>
		<category><![CDATA[OSCAL]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">d53c2dd16cdad341b08aa55660e28af309a21598</guid>

					<description>Amazon Web Services (AWS) is excited to release the Spring 2026 System and Organization Controls (SOC) 1 and 2 reports in machine-readable OSCAL format alongside the PDF version of the reports. The reports cover 188 services over the 12-month period from April 1, 2025 to March 31, 2026, giving customers a full year of assurance. […]</description>
										<content:encoded>&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/span&gt; is excited to release the Spring 2026 System and Organization Controls (SOC) 1 and 2 reports in machine-readable OSCAL format alongside the PDF version of the reports. The reports cover 188 services over the 12-month period from April 1, 2025 to March 31, 2026, giving customers a full year of assurance. These reports demonstrate our continuous commitment to adhering to the heightened expectations of cloud service providers.&lt;/p&gt; 
&lt;p&gt;AWS is the first major cloud provider to offer key compliance reports to customers in the National Institute of Standards and Technology’s (NIST) &lt;a href="https://pages.nist.gov/OSCAL/" rel="noopener" target="_blank"&gt;Open Security Controls Assessment Language (OSCAL)&lt;/a&gt;, as of June 2026. OSCAL is an open source, machine-readable (JSON) format for security information. The SOC 1 and SOC 2 report package in OSCAL format is now available as a distinct package in AWS Artifact, marking a milestone toward open, standards-based compliance automation. This machine-readable version of the SOC report package enables workflow automation to reduce manual processing time and modernize security and compliance processes. Your use cases for this content are innovative, and we want to hear about them through the contact information found in the OSCAL report package.&lt;/p&gt; 
&lt;p&gt;You can download the Spring 2026 SOC 1 and 2 reports in OSCAL format through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/artifact" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Artifact&lt;/a&gt;&lt;/span&gt;, a self-service portal for on-demand access to AWS compliance reports. Sign in to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://console.aws.amazon.com/artifact" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Artifact in the AWS Management Console&lt;/a&gt;&lt;/span&gt;, or learn more at &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/artifact/getting-started/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Getting Started with AWS Artifact&lt;/a&gt;&lt;/span&gt;. The SOC 3 report can be found on the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/soc-faqs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS SOC Compliance page&lt;/a&gt;&lt;/span&gt; and in AWS Artifact.&lt;/p&gt; 
&lt;p&gt;AWS strives to continuously bring services into the scope of its compliance programs to help customers meet their architectural and regulatory needs. You can view the current list of services in scope on our &lt;a href="https://aws.amazon.com/compliance/services-in-scope/" rel="noopener" target="_blank"&gt;Services in Scope page&lt;/a&gt;. As an AWS customer, you can reach out to your AWS account team if you have any questions or feedback about SOC compliance.&lt;/p&gt; 
&lt;p&gt;To learn more about AWS compliance and security programs, see &lt;a href="https://aws.amazon.com/compliance/programs/" rel="noopener" target="_blank"&gt;AWS Compliance Programs&lt;/a&gt;.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/18/Thomas-Fischer.jpg" alt="Thomas Fischer" width="120" height="160" class="aligncenter size-full wp-image-42642"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Thomas Fischer&lt;/h3&gt; 
  &lt;p&gt;Thomas is a Principal at AWS, focused on scaling product delivery and applications to transform security, risk, and compliance. He has over 20 years of experience in enterprise IT transformation and worked for different consulting companies managing large teams and programs across multiple regulated industries and sectors. Thomas holds CISSP, CCSP, CGEIT, and PMP certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/12/Tushar-Jain-2.jpg" alt="Tushar-Jain" width="120" height="160" class="aligncenter size-full wp-image-42162"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Tushar Jain&lt;/h3&gt; 
  &lt;p&gt;Tushar is a Compliance Program Manager at AWS where he leads multiple security and privacy initiatives. Tushar holds a Master of Business Administration from Indian Institute of Management Shillong, India and a Bachelor of Technology in electronics and telecommunication engineering from Marathwada University, India. He has over 14 years of experience in information security and holds CISM, CCSK and CSXF certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/fritzkunstler.dfk_.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41132"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Fritz Kunstler&lt;/h3&gt; 
  &lt;p&gt;Fritz is a Principal Security Engineer at AWS, currently focused on AI applications to transform security governance, risk, and compliance. Fritz has been an AWS customer since 2008 and an Amazonian since 2016.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/Baj-Bajwa.jpg" alt="Baj Bajwa" width="120" height="160" class="aligncenter size-full wp-image-42455"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Baj Bajwa&lt;/h3&gt; 
  &lt;p&gt;Baj is a Security Assurance Manager at AWS, where he leads the Global Third-Party Assurance product portfolio within the Compliance and Security Assurance (CSA) organization. He has over 15 years of experience in information security, compliance, and risk management, and holds a master’s degree in cybersecurity. Baj maintains CISSP, CISA, PMP, CCSK, GISF, and ICAgile certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Introducing AWS Continuum: Security at machine speed</title>
		<link>https://aws.amazon.com/blogs/security/introducing-aws-continuum-security-at-machine-speed/</link>
					
		
		<dc:creator><![CDATA[Chet Kapoor]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 15:34:05 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">7a7f67e8a5384d88c9199289dc64fc2684c8dcd2</guid>

					<description>What we believe We’ve been thinking deeply about enterprise security. The operating model that served us for the past decade (collect telemetry, store it, query it, build dashboards to watch it) is no longer keeping pace. We need to shift to the new world: telemetry, context, reasoning, and actions. An approach that produces outcomes. The […]</description>
										<content:encoded>&lt;h2&gt;What we believe&lt;/h2&gt; 
&lt;p&gt;We’ve been thinking deeply about enterprise security. The operating model that served us for the past decade (collect telemetry, store it, query it, build dashboards to watch it) is no longer keeping pace. We need to shift to the new world: telemetry, context, reasoning, and actions. An approach that produces outcomes. The latest cybersecurity frontier models further made this shift urgent. Models like Claude Mythos can now find software vulnerabilities and reason through complex attack paths at machine-speed, leading to an exponentially increasing backlog of vulnerabilities.&lt;/p&gt; 
&lt;h2&gt;Introducing AWS Continuum for code vulnerabilities&lt;/h2&gt; 
&lt;p&gt;Today, we’re announcing &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/continuum" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Continuum&lt;/a&gt;&lt;/span&gt; for code vulnerabilities, now available in gated preview. Continuum for code vulnerabilities addresses the full lifecycle of a code vulnerability at machine speed: from discovery through actions. It reasons over your environment, confirms what is real, and drives toward resolution. It’s model agnostic, using multiple frontier models where each performs best, and is built to incorporate the latest and most capable models as they emerge.&lt;/p&gt; 
&lt;p&gt;Continuum is built on lessons learned from running security across AWS and Amazon.com. Securing businesses that operate in different industries required a system that understands business context rather than applying generic rules uniformly.&lt;/p&gt; 
&lt;h2&gt;How it works&lt;/h2&gt; 
&lt;p&gt;Continuum for code vulnerabilities reasons over your full environment. This context includes structured data already living in &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Service (AWS)&lt;/a&gt;&lt;/span&gt; (your infrastructure, permissions, network topology, code) and the unstructured data that captures how your organization operates and your risk profile (your documents, communications, business priorities).&lt;/p&gt; 
&lt;p&gt;Continuum for code vulnerabilities operates in four continuous phases.&lt;/p&gt; 
&lt;ol id="rte-ab8465a0-68eb-11f1-958a-f5961b598a52" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;&lt;b&gt;Discovery: &lt;/b&gt;Security teams tackle a backlog of vulnerabilities, and many are already using frontier models to find more. Continuum starts by ingesting that existing backlog and performing its own vulnerability scan of your environment. This creates a more comprehensive view of vulnerabilities and the associated attack paths.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Prioritization: &lt;/b&gt;Continuum uses context to evaluate, enrich, and prioritize every finding. Is the affected component deployed, is it reachable, is it in a production path, and what would the business impact be if exploited? The result is an evidence-backed list of priorities, allowing Continuum and your team to focus on what’s most important.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Validation: &lt;/b&gt;Continuum validates findings to surface false positives before they waste your team’s time. It contextualizes vulnerabilities against your environment. It then constructs working exploit examples in a sandboxed environment that provide concrete, reproducible evidence of the issue.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Mitigation and remediation: &lt;/b&gt;Continuum assesses existing defenses around a validated issue, including blocking and compensating controls along with detection mechanisms. It then draws on its understanding of the codebase, context, and findings to recommend mitigation or remediation of the vulnerability with a network change, policy change, or code patch. The patch recommendation is validated using the same system that confirmed the vulnerability. It also provides blast radius visibility and rollback paths where feasible.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This is just the beginning. We’re starting with code (1&lt;sup&gt;st&lt;/sup&gt; and 3&lt;sup&gt;rd&lt;/sup&gt; party) and then expanding to other aspects of security.&lt;/p&gt; 
&lt;h2&gt;Trust is graduated&lt;/h2&gt; 
&lt;p&gt;Continuum starts in learn mode with a human in the loop. Every recommendation includes the reasoning behind it. As you gain confidence, you can graduate Continuum to enforce mode, enabling remediation that can be increasingly automated based on categories and risk profiles you define.&lt;/p&gt; 
&lt;h2&gt;Continuum capabilities&lt;/h2&gt; 
&lt;p&gt;In addition to Continuum for code vulnerabilities, Continuum includes capabilities you might already know. The &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-agent" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Agent&lt;/a&gt;&lt;/span&gt; penetration testing and code scanning functionality is now part of Continuum as Continuum pen testing and Continuum code scanning (Preview). We’re also launching Continuum threat modeling in preview, which automatically generates comprehensive threat models from design documents or source code and outputs results in STRIDE format. These capabilities serve as detection and analysis sources that feed into the broader Continuum loop of discovery, prioritization, validation, and remediation.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;We’re working with customers across financial services, automotive, and technology to shape AWS Continuum. Customer feedback confirms the direction: security teams want tools that earn trust and take action.&lt;/p&gt; 
&lt;p&gt;AWS Continuum for code vulnerabilities is available in gated preview. Sign up to request access at &lt;a href="https://pages.awscloud.com/global-ln-gc-aws-continuum-interest.html?trk=274c9c25-85f4-42e0-953e-347c044a17bc&amp;amp;sc_channel=el" rel="noopener" target="_blank"&gt;AWS Continuum&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below. &lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/Chet-Kapoor-headshot.jpg" alt="Chet Kapoor" width="120" height="160" class="aligncenter size-full wp-image-42623"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Chet Kapoor&lt;/h3&gt; 
  &lt;p&gt;Chet is Vice President of Search, Security, and Observability at Amazon Web Services. With more than two decades in enterprise technology, he has led companies through some of the industry’s most consequential platform shifts — from APIs and open source to cloud and AI — building and scaling businesses through periods of rapid growth, transformation, acquisition, and IPO. He brings a builder’s mindset, deep operational experience, and a strong customer orientation to helping organizations adopt emerging technologies securely and at scale.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Threat tactic spotlight: Subdomain takeover</title>
		<link>https://aws.amazon.com/blogs/security/threat-tactic-spotlight-subdomain-takeover/</link>
					
		
		<dc:creator><![CDATA[Matt Gurr]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 17:53:20 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[Amazon SNS]]></category>
		<category><![CDATA[AWS Config]]></category>
		<category><![CDATA[AWS KMS]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Security Hub]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">42690451945a594204b4f5049660b08446daa590</guid>

					<description>In this blog post you’ll learn how to detect and prevent subdomain takeover – a tactic where threat actors exploit dangling DNS records to redirect traffic to attacker-controlled resources. We’ll explain the issue, how the situation arises, and how you can use various AWS features and services to help mitigate the impact of this tactic. […]</description>
										<content:encoded>&lt;p&gt;In this blog post you’ll learn how to detect and prevent subdomain takeover – a tactic where threat actors exploit dangling DNS records to redirect traffic to attacker-controlled resources. We’ll explain the issue, how the situation arises, and how you can use various AWS features and services to help mitigate the impact of this tactic.&lt;/p&gt; 
&lt;p&gt;Under the &lt;a href="https://aws.amazon.com/compliance/shared-responsibility-model/" target="_blank" rel="noopener noreferrer"&gt;shared responsibility model&lt;/a&gt;, securing configurations in the cloud is your responsibility. AWS supports you through strong defaults, guidance in the &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html" target="_blank" rel="noopener noreferrer"&gt;Security Pillar of the Well-Architected Framework&lt;/a&gt;, and security services to help you meet that responsibility. The AWS Customer Incident Response Team (AWS CIRT) also monitors for new and trending tactics that threat actors use to exploit specific customer configurations, so that you can make informed design decisions and improve your response plans.&lt;/p&gt; 
&lt;p&gt;AWS CIRT has observed threat actors actively scanning for public DNS CNAME records that point to resources that no longer exist, looking for subdomain takeover opportunities.&lt;/p&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The subdomain takeover tactic does not leverage vulnerabilities of AWS services. It exploits a dangling DNS record to redirect traffic to an attacker-controlled resource.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h2&gt;&lt;strong&gt;Quick DNS Primer&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;CNAME Records:&lt;/strong&gt; A CNAME (Canonical Name) record is a DNS entry that points one domain name to another. For example, api.example.com can be configured to point to api.example.s3-website-us-east-1.amazonaws.com. This feature of DNS enables users to configure a memorable, human-friendly domain name while the actual resource lives at a longer, machine-generated AWS hostname. A security issue emerges when the target resource is deleted but the CNAME record pointing to it remains – creating a “dangling” record.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Dangling Records: &lt;/strong&gt;When a resource (like an S3 bucket) is deleted but the DNS record pointing to it is left behind, that DNS record becomes “dangling”, pointing to a resource that no longer exists. For resources in globally shared namespaces, threat actors can potentially reclaim the name of your deleted resource and serve malicious content through your DNS record.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;What is subdomain takeover?&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;A subdomain is a prefix added to a domain that allows you to organize access to your resources. A subdomain takeover occurs when you delete the underlying resource and a threat actor creates a new resource with the same name to take advantage of the DNS records still pointing to it.&lt;/p&gt; 
&lt;p&gt;A subdomain takeover is possible when a CNAME record points to an AWS resource that uses a globally shared DNS namespace where the resource name can be chosen by any AWS customer. The following AWS resources meet these criteria:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Amazon S3 (global namespace):&lt;/strong&gt; Bucket names like mybucket.s3.amazonaws.com are globally unique and can be claimed by any account if the bucket is deleted. Note: S3 buckets created with &lt;a href="https://aws.amazon.com/blogs/aws/introducing-account-regional-namespaces-for-amazon-s3-general-purpose-buckets/" target="_blank" rel="noopener noreferrer"&gt;account regional namespaces&lt;/a&gt; (launched March 2026) are scoped to your account and are not subject to this issue.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Amazon CloudFront:&lt;/strong&gt; Distribution domain names like d111111abcdef8.cloudfront.net are assigned by AWS and cannot be chosen by an attacker. However, if you delete a distribution and another customer creates one that happens to receive the same domain name, a dangling CNAME could resolve to their content.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;AWS Elastic Beanstalk:&lt;/strong&gt; Environment names like myapp.elasticbeanstalk.com are globally unique and can be claimed by any account if the environment is terminated.&lt;/p&gt; 
&lt;p&gt;Resources like Amazon VPC, Amazon EC2 instances, or private hosted zones are not subject to this tactic because they do not expose globally claimable DNS namespaces.&lt;/p&gt; 
&lt;p&gt;MITRE ATT&amp;amp;CK classifies this technique under &lt;a href="https://attack.mitre.org/techniques/T1584/001/" target="_blank" rel="noopener noreferrer"&gt;T1584.001: Compromise Infrastructure – Domains&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Analyzing an example scenario&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Consider the following scenario:&lt;/p&gt; 
&lt;p&gt;You create a DNS CNAME record pointing to your S3 website endpoint. The subdomain subdomain.example.com now resolves to subdomain.example.s3-website-us-east-1.amazonaws.com, which serves content from the S3 bucket named subdomain.example. If your team deletes the bucket and forgets to delete the DNS record, users that navigate to the site will see an error stating that the bucket doesn’t exist. However, at this point, if a threat actor sees this error and moves in to claim the bucket name, they will be able to set up their own site that users will see when they navigate to the subdomain.example.com site.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Figure 1&lt;/strong&gt; shows an S3 bucket named subdomain.example (a globally unique bucket name) configured to host a static website, with the S3 website endpoint subdomain.example.s3-website-us-east-1.amazonaws.com.&lt;/p&gt; 
&lt;div id="attachment_42559" style="width: 402px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42559" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/prevent-cname-hacking1.png" alt="Figure 1: S3 bucket configured as a static website" width="392" height="236" class="size-full wp-image-42559"&gt;
 &lt;p id="caption-attachment-42559" class="wp-caption-text"&gt;Figure 1: S3 bucket configured as a static website&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;As shown in &lt;strong&gt;Figure 2&lt;/strong&gt;, we use Amazon Route 53 to create a CNAME record to resolve to our Amazon domain name; to give users a friendly name and so they do not have to remember the long S3 website name in URLs.&lt;/p&gt; 
&lt;div id="attachment_42600" style="width: 525px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42600" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/prevent-cname-hacking2rev.png" alt="Figure 2: DNS Resolver configured with CNAME record pointing to origin bucket" width="515" height="240" class="size-full wp-image-42600"&gt;
 &lt;p id="caption-attachment-42600" class="wp-caption-text"&gt;Figure 2: DNS Resolver configured with CNAME record pointing to origin bucket&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The customer’s AWS administrator decides to stop serving content from the S3 bucket and deletes it, as shown in &lt;strong&gt;Figure 3&lt;/strong&gt;.&lt;/p&gt; 
&lt;div id="attachment_42596" style="width: 744px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42596" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/prevent-cname-hacking3-1.png" alt="Figure 3: Resource deleted without removing the CNAME record" width="734" height="271" class="size-full wp-image-42596"&gt;
 &lt;p id="caption-attachment-42596" class="wp-caption-text"&gt;Figure 3: Resource deleted without removing the CNAME record&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;With the S3 bucket deleted and the CNAME record still in place, the DNS record is now dangling. A threat actor identifies this situation and creates a new S3 bucket with the same global name subdomain.example in an AWS account that the threat actor controls, as shown in &lt;strong&gt;Figure 4&lt;/strong&gt;. The threat actor can now serve content from this new bucket, including potentially malicious content. End users remain unaware of this switch and continue to access subdomain.example.com, trusting the content because it appears to originate from a URL they recognize.&lt;/p&gt; 
&lt;div id="attachment_42597" style="width: 782px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42597" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/prevent-cname-hacking4.png" alt="Figure 4: Subdomain takeover happens" width="772" height="390" class="size-full wp-image-42597"&gt;
 &lt;p id="caption-attachment-42597" class="wp-caption-text"&gt;Figure 4: Subdomain takeover happens&lt;/p&gt;
&lt;/div&gt; 
&lt;h2&gt;&lt;strong&gt;Potential impacts of a sub-domain takeover&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Consider these potential impacts:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Reputation risk:&lt;/strong&gt; There is a potential risk to your organization’s reputation, because you don’t control the content being served from the threat actor’s site that your DNS record points to.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Potential exposure to phishing campaigns:&lt;/strong&gt; Users within your organization might have the subdomain bookmarked in their browser, not knowing the resource is no longer available, then unsuspectingly navigate to the site that now hosts malware or is used to phish user credentials.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Blocking:&lt;/strong&gt; If the subdomain is flagged by security vendors for malicious activity, it could impact your business operations.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Financial loss:&lt;/strong&gt; Subdomain takeover incidents can result in a financial impact due to the potential disruption to service delivery as you deal with the event.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Proactive detection &lt;/strong&gt;&lt;/h2&gt; 
&lt;h3&gt;&lt;strong&gt;AWS Config for proactive detection&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;For proactive detection, you can use AWS Config to continuously monitor your Route 53 CNAME records and verify that the target resources exist in your account.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; This approach requires AWS Config recorder to be enabled for the resource types you want to monitor (S3 buckets, CloudFront distributions, Elastic Beanstalk environments). If Config isn’t recording a resource type, it won’t appear in the inventory check. For more information, see &lt;a href="https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html" target="_blank" rel="noopener noreferrer"&gt;Setting up AWS Config with the console&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Why use AWS Config inventory instead of DNS resolution checks?&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;A common approach is to check whether a CNAME resolves to a valid endpoint. However, this method has a critical flaw: if an attacker has already claimed the resource, DNS resolution will succeed – to their resource, not yours. You would have no indication that you don’t own what’s responding.&lt;/p&gt; 
&lt;p&gt;By querying AWS Config’s recorded configuration items, you’re checking whether the resource exists in &lt;em&gt;your&lt;/em&gt; account inventory, not just whether &lt;em&gt;something&lt;/em&gt; responds at that DNS name. This approach correctly identifies dangling CNAMEs even after a takeover has occurred.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Implementation approach:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Account-level vs. organization-level scope&lt;/p&gt; 
&lt;p&gt;The reference implementation queries AWS Config inventory within a single account. This means that if a CNAME record in Account A points to a resource that legitimately exists in Account B within the same AWS organization, the rule will flag it as NON_COMPLIANT.&lt;/p&gt; 
&lt;p&gt;For organizations that share resources across accounts, you can modify the solution to use an AWS Config Aggregator, which queries resource inventory across all accounts in your organization. This is similar to how IAM Access Analyzer supports both account-level and organization-level scopes. To use this approach, you need an organization-level Config Aggregator already configured, and the Lambda function’s IAM role needs the config:SelectAggregateResourceConfig permission.&lt;/p&gt; 
&lt;p&gt;We recommend starting with account-level scope for simplicity, then expanding to organization-level if your environment includes cross-account resource sharing.&lt;/p&gt; 
&lt;p&gt;The main idea is to create a custom AWS Config rule that queries your Route 53 hosted zones for CNAME records, then parses each CNAME target to determine whether it points to a known AWS resource pattern such as S3, CloudFront, or Elastic Beanstalk. For each match, the rule cross-references the target against your AWS Config inventory to verify that the resource actually exists in your account. If the resource isn’t found, the rule marks the CNAME record as NON_COMPLIANT, surfacing it for review.&lt;/p&gt; 
&lt;p&gt;The Config rule should focus on known AWS resource patterns:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;S3: *.s3.amazonaws.com, *.s3-website-&amp;lt;region&amp;gt;.amazonaws.com&lt;/li&gt; 
 &lt;li&gt;CloudFront: *.cloudfront.net&lt;/li&gt; 
 &lt;li&gt;Elastic Beanstalk: *.elasticbeanstalk.com&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; CNAME records pointing to external third-party services are outside the scope of this detection mechanism, as those resources won’t appear in your AWS Config inventory.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;NON_COMPLIANT findings from your Config rule can be routed to AWS Security Hub for centralized visibility, or trigger SNS notifications to alert your security team.&lt;/p&gt; 
&lt;div id="attachment_42598" style="width: 2392px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42598" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/16/CNAME-Figure-5.png" alt="Figure 5: Dangling DNS Detection Solution" width="2382" height="1338" class="size-full wp-image-42598"&gt;
 &lt;p id="caption-attachment-42598" class="wp-caption-text"&gt;Figure 5: Dangling DNS Detection Solution&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Reference implementation:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;We’ve published a complete implementation of this detection approach as an open-source solution. The solution deploys a Lambda function that discovers CNAME records across all your Route 53 hosted zones and uses pattern matching to identify targets pointing to S3, CloudFront, and Elastic Beanstalk. It then queries your AWS Config inventory to verify whether each target resource still exists in your account. When a dangling record is detected, the solution generates a HIGH severity finding in Security Hub and can optionally send SNS notifications to alert your security team. A CloudWatch metrics dashboard is also included for ongoing compliance tracking.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt;&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;# Clone the repository
git clone https://github.com/aws-samples/sample-dangling-dns-detection
cd sample-dangling-dns-detection

# Build the Lambda deployment package
./scripts/package.sh

# Upload to S3
aws s3 cp dist/dangling-dns-detection.zip s3://YOUR_BUCKET/

# Deploy the CloudFormation stack
aws cloudformation deploy \
  --template-file infrastructure/template.yaml \
  --stack-name dangling-dns-detection \
  --parameter-overrides \
      LambdaCodeS3Bucket=YOUR_BUCKET \
      EvaluationFrequency=TwentyFour_Hours \
  --capabilities CAPABILITY_NAMED_IAM
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The stack creates an AWS Config custom rule that runs on your specified schedule (default: every 24 hours), evaluating all CNAME records and reporting compliance status.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Mitigating the effects&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Mitigating subdomain takeover requires both preventive procedures and responsive capabilities.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Prevention: Standard operating procedure&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;The most effective mitigation is a standard operating procedure for resource deprovisioning that ensures DNS records are removed before the underlying resource:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Within your DNS zone, delete the CNAME record that points to the fully qualified domain name (FQDN) of the resource that you plan to deprovision.&lt;/li&gt; 
 &lt;li&gt;Wait for the DNS TTL to expire before deleting the resource. DNS resolvers cache records for the duration of the TTL (for example, a TTL of 3600 means resolvers may serve the old record for up to one hour). If you delete the resource before the TTL expires, a threat actor could claim the resource name while cached CNAME entries are still directing traffic to it.&lt;/li&gt; 
 &lt;li&gt;Deprovision the resource that you no longer want to use.&lt;/li&gt; 
 &lt;li&gt;Run a DNS check of the CNAME record that you removed to verify that the resource is no longer resolving.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Key principle: Always delete DNS first, wait for the TTL to expire, then delete the resource. This order eliminates the window where a dangling record could be exploited.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Prevention: S3 account regional namespaces&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;As mentioned earlier, AWS introduced &lt;a href="https://aws.amazon.com/blogs/aws/introducing-account-regional-namespaces-for-amazon-s3-general-purpose-buckets/" target="_blank" rel="noopener noreferrer"&gt;account regional namespaces for Amazon S3 general purpose buckets&lt;/a&gt; in March 2026. While this is a meaningful step toward mitigating the S3-specific takeover vector, there are important operational limitations to be aware of:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Existing buckets are unaffected.&lt;/strong&gt; Buckets already created in the global namespace cannot be migrated to an account regional namespace. The bucket names remain globally unique and claimable by anyone if the bucket is deleted.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Global namespace is still the default.&lt;/strong&gt; When creating a new bucket through the console, CLI, or SDK, the global namespace remains the default selection. Users who aren’t aware of the new option will continue creating globally-scoped buckets.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Existing IaC templates require updates.&lt;/strong&gt; Existing infrastructure-as-code templates (CloudFormation, CDK, Terraform) that don’t explicitly opt in to the account regional namespace will continue provisioning buckets in the global namespace. For CloudFormation, this means setting the BucketNamespace property to account-regional. For other IaC tools, consult their documentation for the equivalent configuration. Organizations need to audit and update their templates to opt in.&lt;/p&gt; 
&lt;p&gt;For these reasons, the dangling DNS detection approach described in this post remains critical – particularly for organizations with existing S3 infrastructure, and for CloudFront, and Elastic Beanstalk resources where no equivalent namespace scoping exists.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Response: Notification and remediation&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;When a dangling DNS record is detected, the reference solution described in the Detection section automatically creates a HIGH severity finding in AWS Security Hub and reports the CNAME record as NON_COMPLIANT in AWS Config. If you provide an SNS topic ARN during deployment, the solution also sends notifications to alert your security or operations team via email, Slack, or other channels. For production environments, consider a human-in-the-loop workflow where these notifications are reviewed by a team member who approves the DNS record deletion before it’s executed. This prevents accidental deletion of legitimate records during transient issues.&lt;/p&gt; 
&lt;p&gt;The reference solution also includes a CloudWatch dashboard for tracking compliance status and evaluation metrics over time, giving your team ongoing visibility into DNS health across your hosted zones.&lt;/p&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Fully automated remediation (auto-deleting DNS records) carries risk – a false positive could disrupt legitimate services. We recommend starting with detection and notification, then evaluating automation based on your detection accuracy and operational maturity.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Subdomain takeover is a preventable misconfiguration that can have significant impact on your organization. A layered defense approach provides the best protection:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Prevention:&lt;/strong&gt; Implement a standard operating procedure that deletes DNS records before deprovisioning the underlying resource.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Detection:&lt;/strong&gt; Use AWS Config custom rules to proactively identify CNAME records pointing to resources that no longer exist in your account.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Response:&lt;/strong&gt; Configure notifications through SNS or Security Hub so your team can respond quickly when dangling records are detected.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Monitoring:&lt;/strong&gt; Maintain ongoing visibility through CloudWatch dashboards to track DNS health and compliance status.&lt;/p&gt; 
&lt;p&gt;The key insight is that good DNS hygiene – knowing when your CNAME records point to a nonexistent resource – is your first line of defense. Automated detection through AWS Config provides a safety net when operational procedures fail. And if you detect an issue, having a playbook ready to enact your response can lower the impact and your mean time to recovery.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/Matt-Gurr.jpg" alt="Matt Gurr" width="120" height="160" class="aligncenter size-full wp-image-42571"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Matthew Gurr&lt;/h3&gt; 
  &lt;p&gt;Matthew is the Senior Incident Response lead in the Asia-Pacific region for the AWS Customer Incident Response Team (AWS CIRT). He has a passion for helping customers proactively prepare for a security event. In his spare time, he enjoys cycling, music, and reading.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2023/01/19/Luis-Pastor.jpg" alt="Luis Pastor" width="120" height="160" class="aligncenter size-full wp-image-28338"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Luis Pastor&lt;/h3&gt; 
  &lt;p&gt;Luis is a Senior Security Solutions Architect at AWS leading the Infrastructure Security and Compliance Technical Field Communities. He drives security architecture for enterprise customers across financial services, healthcare, and retail, specializing in cloud security transformation and regulatory compliance frameworks. Before AWS, Luis architected security solutions in hybrid cloud environments.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2022/08/01/Geoff-Sweet.jpg" alt="Geoff Sweet" width="120" height="160" class="aligncenter size-full wp-image-26645"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Geoff Sweet&lt;/h3&gt; 
  &lt;p&gt;Geoff has been in industry since the late 1990s. He began his career in electrical engineering. Starting in IT during the dot-com boom, he has held a variety of diverse roles, such as systems architect, network architect, and, for the past several years, security architect. Geoff specializes in infrastructure security.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/15/Ariam-Michael.jpg" alt="Ariam Michael" width="120" height="160" class="aligncenter size-full wp-image-42573"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ariam Michael&lt;/h3&gt; 
  &lt;p&gt;Ariam is a Solutions Architect at AWS. She has supported various customers in the Worldwide Public Sector, specifically SLG and Federal Civilian customers. She is passionate about security, specifically Data Protection helping customers implement encryption and best practices.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>ICYMI: May 2026 @AWS Security</title>
		<link>https://aws.amazon.com/blogs/security/icymi-may-2026-aws-security/</link>
					
		
		<dc:creator><![CDATA[Rodolfo Brenes]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 21:00:11 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">e07bd1f6fd1975a5839bda584e628dd13d453837</guid>

					<description>Read all about the latest AWS security features, compliance updates, and hands-on resources in our new, monthly digest posts. You’ll find expert blog posts, new service capabilities, code samples, and workshops. AWS Security Blog posts This month’s AWS Security Blog posts covered AI security, network protection, identity management, compliance frameworks, and supply chain security. Read […]</description>
										<content:encoded>&lt;p&gt;Read all about the latest AWS security features, compliance updates, and hands-on resources in our new, monthly digest posts. You’ll find expert blog posts, new service capabilities, code samples, and workshops.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;AWS Security Blog posts&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;This month’s AWS Security Blog posts covered AI security, network protection, identity management, compliance frameworks, and supply chain security. Read on for practical guidance on securing agentic AI workflows, filtering network traffic by category, defending against supply chain attacks, and more.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;AI Security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/security-posture-improvement-in-the-ai-era/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Security posture improvement in the AI era&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Celeste Bishop | Published: May 1, 2026&lt;/i&gt;&lt;br&gt; Learn to use the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-health-improvement-program/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Security Health Improvement Program (SHIP)&lt;/a&gt;&lt;/span&gt; to strengthen security fundamentals across 10 core use cases for confident AI adoption.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/enabling-ai-sovereignty-on-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Enabling AI sovereignty on AWS&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Stéphane Israël | Published: May 12, 2026&lt;/i&gt;&lt;br&gt; Learn how AWS delivers control and choice across the AI stack to help customers meet digital and AI sovereignty requirements.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/the-aws-ai-security-framework-securing-ai-with-the-right-controls-at-the-right-layers-at-the-right-phases/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;The AWS AI Security Framework: Securing AI with the right controls, at the right layers, at the right phases&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Riggs Goodman III, Christopher Rae | May 15, 2026&lt;/i&gt;&lt;br&gt; A structured framework that helps security leaders align the right security controls to the right AI use case, at the right layer, at the right deployment phase.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/why-policy-in-amazon-bedrock-agentcore-chose-cedar-for-securing-agentic-workflows/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Why Policy in Amazon Bedrock AgentCore chose Cedar for securing agentic workflows&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Liana Hadarean, Jean-Baptiste Tristan | May 20, 2026&lt;/i&gt;&lt;br&gt; Learn how Cedar’s deterministic authorization, automated reasoning, and formal verification capabilities secure agentic AI tool invocations through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/bedrock/agentcore/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Bedrock AgentCore &lt;/a&gt;&lt;/span&gt;Gateway.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Infrastructure security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/securing-open-proxies-in-your-aws-environment/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Securing open proxies in your AWS environment&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Dodd Mitchell | Published: May 4, 2026&lt;/i&gt;&lt;br&gt; Learn to identify and secure open proxies in your AWS environment to prevent abuse, protect your IP reputation, and control costs.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/introducing-ai-traffic-analysis-dashboards-for-aws-waf/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Introducing AI traffic analysis dashboards for AWS WAF&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Christopher Jen, Eitav Arditti, Kaustubh Phatak | Published: May 5, 2026&lt;/i&gt;&lt;br&gt; A new dashboard providing visibility into AI bot and agent activity including bot identification, intent classification, and access pattern analysis.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/simplifying-policy-management-with-url-and-domain-category-filtering-on-aws-network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Simplifying policy management with URL and Domain Category filtering on AWS Network Firewall&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Lawton Pittenger, Sofía Aluma-Santos, Eric Fortenbery, Mostafa Elkhouly | May 28, 2026&lt;/i&gt;&lt;br&gt; Learn to use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Network Firewall’s&lt;/a&gt;&lt;/span&gt; URL and domain category filtering to control access to website categories like AI services, manage exceptions for approved domains, and monitor traffic patterns with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudwatch/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch&lt;/a&gt;&lt;/span&gt; Logs Insights.&lt;/p&gt; 
&lt;ul id="rte-6a119710-5fd0-11f1-b75b-bb4a08d77e1c" class="qs:text-body-default" style="border: 0px solid;margin: 1rem 0px;padding: 0px;font-size: 14px;line-height: 1.42857;letter-spacing: 0.15px;font-weight: 400;color: #000000;font-family: 'Amazon Ember', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif;font-style: normal;text-align: start;text-indent: 0px;text-transform: none;background-color: #f8f8fa"&gt;&lt;/ul&gt; 
&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/why-and-how-to-migrate-to-a-transit-gateway-attached-aws-network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Why and how to migrate to a Transit Gateway-attached AWS Network Firewall&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;
&lt;br&gt; 
&lt;i&gt;Authors: Frank Phillis, Lawton Pittenger | May 28, 2026&lt;/i&gt;
&lt;br&gt; Learn to migrate your centralized AWS Network Firewall deployment to a 
&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/transit-gateway/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Transit Gateway&lt;/a&gt;&lt;/span&gt;-attached model, eliminating the inspection 
&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon VPC&lt;/a&gt;&lt;/span&gt; and enabling flexible cost allocation.
&lt;p&gt;&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Identity&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/regional-routing-for-aws-access-portals-implementing-custom-vanity-domains-for-iam-identity-center/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Regional routing for AWS access portals: Implementing custom vanity domains for IAM Identity Center&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Georgi Baghdasaryan, Laura Reith, Sowjanya Rajavaram | May 14, 2026&lt;/i&gt;&lt;br&gt; Learn to build a custom vanity domain with latency-based routing and automated failover for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam/identity-center/" target="_blank" rel="noopener" data-cms-ai="0"&gt;IAM Identity Center &lt;/a&gt;&lt;/span&gt;multi-Region access portals.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/automating-identity-lifecycle-and-security-with-aws-directory-service-apis/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Automating identity lifecycle and security with AWS Directory Service APIs&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Ali Alzand, Kevin Sookhan | May 21, 2026&lt;/i&gt;&lt;br&gt; Learn to use the new &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_directory_service_data.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Directory Service Data&lt;/a&gt;&lt;/span&gt; APIs with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/step-functions/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Step Functions&lt;/a&gt;&lt;/span&gt; to automate identity lifecycle management and respond to security threats.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Governance and compliance&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/announcing-the-iso-310002018-risk-management-on-aws-compliance-guide/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Announcing the ISO 31000:2018 Risk Management on AWS compliance guide&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Jesse McMahan, Akanksha Chaturvedi, Mayur Jadhav, Juan Rodriguez, Sana Rahman | Published: May 1, 2026&lt;/i&gt;&lt;br&gt; A compliance guide providing practical guidance for establishing a risk management program using ISO 31000:2018 principles in AWS environments.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/new-compliance-guide-available-iso-iec-420012023-on-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;New compliance guide available: ISO/IEC 42001:2023 on AWS&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Abdul Javid, Amber Welch, Muhammad Sharief, Jonathan Jenkyn, Satish Uppalapati | Published: May 6, 2026&lt;/i&gt;&lt;br&gt; A compliance guide providing practical guidance for designing and operating an Artificial Intelligence Management System (AIMS) using AWS services.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/introducing-the-updated-aws-user-guide-to-governance-risk-and-compliance-for-responsible-ai-adoption/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Introducing the updated AWS User Guide to Governance, Risk, and Compliance for Responsible AI Adoption&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Krish De, Stephen James Martin, Brenda Fong, Kelvin Leung | May 13, 2026&lt;/i&gt;&lt;br&gt; An updated guide providing FSI customers practical considerations for responsible AI adoption across governance, risk management, compliance, data management, and AI agent management.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/governing-infrastructure-as-code-using-pattern-based-policy-as-code/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Governing infrastructure as code using pattern-based policy as code&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Guptaji Teegela, Paul Keastead | May 19, 2026&lt;/i&gt;&lt;br&gt; Learn to use Open Policy Agent (OPA) in CI/CD pipelines to validate AWS infrastructure changes before deployment using recurring control patterns.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/mt/aws-cloudtrail-lake-import-historical-data-to-amazon-cloudwatch/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Import historical data from AWS CloudTrail Lake to Amazon CloudWatch&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Isaiah Salinas, Erik Weber|Published: May 6, 2026&lt;/i&gt;&lt;br&gt; Learn to import historical data from &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudTrail &lt;/a&gt;&lt;/span&gt;Lake into Amazon CloudWatch for centralized log analysis.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Data protection&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/automating-post-quantum-cryptography-readiness-using-aws-config/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Automating post-quantum cryptography readiness using AWS Config&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Pravin Nair | May 14, 2026&lt;/i&gt;&lt;br&gt; Learn to use the PQC Readiness Scanner to inventory your &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/elasticloadbalancing/application-load-balancer/" target="_blank" rel="noopener" data-cms-ai="0"&gt;ALB&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/elasticloadbalancing/network-load-balancer/" target="_blank" rel="noopener" data-cms-ai="0"&gt;NLB&lt;/a&gt;&lt;/span&gt;, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/api-gateway/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon API Gateway &lt;/a&gt;&lt;/span&gt;endpoints and continuously monitor their TLS configurations for post-quantum cryptography readiness.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Threat detection and response&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/detecting-and-preventing-crypto-mining-in-your-aws-environment/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Detecting and preventing crypto mining in your AWS environment&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Jason Palmer, Nadia Mahmood | May 13, 2026&lt;/i&gt;&lt;br&gt; Learn to use Amazon GuardDuty to identify and mitigate cryptocurrency mining threats in your AWS environment with a multi-layered defense strategy.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/well-architected-best-practices-for-software-supply-chain-security/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Well-architected best practices for software supply chain security&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Trevor Schiavone, Desiree Brunner | May 26, 2026&lt;/i&gt;&lt;br&gt; Learn to apply &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/architecture/well-architected/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Well-Architected Framework &lt;/a&gt;&lt;/span&gt;security best practices to defend against software supply chain attacks like Shai-Hulud using temporary credentials, centralized dependency management, artifact signing, and continuous scanning.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/aws-security-hub-extended-why-enterprise-security-products-should-sell-themselves/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;AWS Security Hub Extended: Why enterprise security products should sell themselves&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Michael Fuller | May 20, 2026&lt;/i&gt;&lt;br&gt; A thought leadership piece on how &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-hub/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Hub&lt;/a&gt;&lt;/span&gt; Extended enables frictionless, pay-as-you-go adoption of curated partner security solutions alongside AWS-native services.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Application Security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/five-ways-to-use-kiro-and-amazon-q-to-strengthen-your-security-posture/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Five ways to use Kiro and Amazon Q to strengthen your security posture&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Roger Nem | Published: May 5, 2026&lt;/i&gt;&lt;br&gt; Learn to use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://kiro.dev/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Kiro&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/q/developer/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Q Developer&lt;/a&gt;&lt;/span&gt; for security finding triage, infrastructure remediation, security reviews, and service control policies (SCP) development.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/aws-security-agent-full-repository-code-scanning-feature-now-available-in-preview/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;AWS Security Agent full repository code scanning feature now available in preview&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Authors: Ayush Singh, Daniele Bonadiman | May 12, 2026&lt;/i&gt;&lt;br&gt; Learn to use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-agent/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Agent’s &lt;/a&gt;&lt;/span&gt;full repository code review to perform deep, context-aware security analysis of your entire code base.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Training and enablement&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/complimentary-virtual-training-get-hands-on-with-aws-security-services/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Complimentary virtual training: Get hands-on with AWS Security services&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; &lt;i&gt;Author: Ashley Nelson | Published: May 11, 2026&lt;/i&gt;&lt;br&gt; Security Activation Days are free 3–6 hour virtual workshops providing hands-on practice with AWS security services guided by specialists.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;May Security Bulletins&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Investigations of reported security vulnerabilities affecting Amazon and AWS services, software, and products.&lt;/p&gt; 
&lt;ul id="rte-4bc1b092-610d-11f1-ae7f-8794d7a3347a" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-030-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Ongoing updates on Copy.fail and variants&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-025-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-7791 – Local Privilege Escalation via TOCTOU Race Condition in Amazon WorkSpaces Skylight Agent&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-028-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-8178 – Remote Code Execution via Unsafe Class Loading in Amazon Redshift JDBC Driver&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-031-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-8596 &amp;amp; CVE-2026-8597: Issue with Amazon SageMaker Python SDK – Model artifact integrity verification issues&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-032-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-8686 – Heap out-of-bounds read in coreMQTT MQTT5 property parsing&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-033-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-8838 – Remote Code Execution in amazon-redshift-python-driver&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-034-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-9133 – Arbitrary file read in rabbitmq-aws plugin&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-035-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-9255 – Tool Execution Without Authorization via Piped Stdin in Kiro CLI&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-036-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-9291 – Insecure Deserialization in Amazon Braket SDK Job Results Processing&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-037-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-10591 – Kiro IDE Insufficient File Write Restrictions to Execution-Sensitive Paths&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/2026-038-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CVE-2026-10584 – HTTPS Fallback to HTTP in Graph Explorer&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;AWS Samples&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;This month brings 8 new AWS samples spanning application security, data protection, infrastructure security, governance, and AI security. From AI-powered security agents on Amazon Bedrock AgentCore to centralized &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/config/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Config&lt;/a&gt;&lt;/span&gt; monitoring at scale, these repositories help you implement security best practices across your AWS environment.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Application Security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-schedule-securityagent-pentest" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Schedule AWS Security Agent penetration test&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudformation/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudFormation&lt;/a&gt;&lt;/span&gt; template that uses &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/eventbridge/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon EventBridge&lt;/a&gt;&lt;/span&gt; and AWS Step Functions to schedule recurring AWS Security Agent penetration tests with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/sns/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Notification Service&lt;/a&gt;&lt;/span&gt;&lt;br&gt; (SNS) notifications on completion.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-security-review-assistant" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Security review assistant&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy a multi-agent system on Amazon Bedrock AgentCore that automates Deliverable Security Reviews by combining architecture analysis, IaC code review, ASH vulnerability scanning, and compliance assessment into a single pipeline.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-security-agent-recorder" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;AWS Security Agent Recorder&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to use a cross-browser extension that records the unique domains your web app contacts and auto-fills them into the AWS Security Agent penetration test configuration.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Data Protection&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-kms-access-audit" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;KMS access audit&lt;/b&gt; &lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to resolve and report who can use your &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/kms/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Key Management Service&lt;/a&gt;&lt;/span&gt; (KMS) keys across IAM policies, key policies, and grants, with IAM Identity Center resolution to identify the humans behind SSO roles.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Infrastructure security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-building-a-conversational-ai-agent-for-aws-waf-analysis-with-agentcore" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Building a conversational AI agent for AWS WAF analysis with AgentCore&lt;/b&gt; &lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy an AI-powered agent using Amazon Bedrock AgentCore and Strands SDK that investigates &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/waf/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS WAF&lt;/a&gt;&lt;/span&gt; security incidents, detects bypasses, and generates security reports through natural language.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Governance&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="//github.com/aws-samples/sample-centralized-aws-config-ci-monitoring-with-amazon-cloudwatch" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Centralized AWS Config CI monitoring with Amazon CloudWatch&lt;/b&gt; &lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to centrally monitor AWS Config Configuration Item recording across all accounts in an &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/organizations/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Organization&lt;/a&gt;&lt;/span&gt; using CloudWatch Cross-Account Observability, with dashboards showing top resource types, per-account volume, and conformance pack compliance.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-cfn-guard-security-analyzer" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;CloudFormation Guard security analyzer&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy an AI agent powered by Amazon Bedrock AgentCore that scans CloudFormation resource documentation, identifies security-critical properties with risk levels, and generates ready-to-use cfn-guard 3.x rules for your CI/CD pipeline.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;AI Security&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-guarded-user-controlled-attested-runtime-deployment" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;Guarded user-controlled attested runtime deployment (Guardian Platform)&lt;/b&gt; &lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy LLM models securely in consumer &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/accounts/latest/reference/accounts-welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS accounts&lt;/a&gt;&lt;/span&gt; while protecting model weights using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ec2/nitro/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Nitro &lt;/a&gt;&lt;/span&gt;TPM attestation, KMS envelope encryption, and Zero Operator Access with immutable AMIs.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;AWS Labs&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;This month brings 1 new AWS Labs repository focused on governance, helping research institutions deploy secure, tagged infrastructure with self-service access and multi-account controls.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/awslabs/researchstack-on-aws" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;b&gt;ResearchStack on AWS&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Learn to deploy research computing infrastructure on AWS in minutes — &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ec2/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon EC2&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3/" target="_blank" rel="noopener" data-cms-ai="0"&gt;S3&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/efs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;EFS&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/sagemaker/ai/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon SageMaker AI&lt;/a&gt;&lt;/span&gt;, and ParallelCluster — with built-in security, cost tracking, and governance using CloudFormation templates and optional &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/servicecatalog/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Service Catalog&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;May 2026 shows AI security maturing from model-level controls to full-stack protection of agentic workflows. The posts and samples provide patterns for policy-based authorization with Cedar, network traffic filtering by category, and cross-account compliance monitoring. The security bulletins address vulnerabilities in SDKs, drivers, and developer tooling. Each resource includes deployment steps or runnable code so you can validate in your own environment before adopting. Subscribe to the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/rss/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Blog RSS&lt;/a&gt;&lt;/span&gt; feed to receive updates as they publish, and revisit this digest monthly for a consolidated view of what changed and what to act on.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/08/Rodolfo-Brenes-author.jpeg" alt="" width="202" height="269" class="aligncenter size-full wp-image-39833"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Rodolfo Brenes&lt;/h3&gt; 
  &lt;p&gt;Rodolfo is a Principal Solutions Architect focused on Cloud Governance and Compliance. With over 18 years of experience, he currently leads a technical field community in AWS helping customers scale and improve their security and governance frameworks. Besides work, Rodolfo enjoys video games, playing with his four cats, and won’t say no to a good outdoor adventure. &lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/08/Anna-Brinkmann.jpg" alt="" width="200" height="200" class="aligncenter size-full wp-image-28838"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Anna Brinkmann&lt;/h3&gt; 
  &lt;p&gt;Anna has 18 years of experience in the technical content space and has spent the last 6 years managing the AWS Security Blog. Outside of work, she enjoys spending time with her family.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Operationalizing AWS security: A maturity roadmap</title>
		<link>https://aws.amazon.com/blogs/security/operationalizing-aws-security-a-maturity-roadmap/</link>
					
		
		<dc:creator><![CDATA[Joseph Sadler]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 16:18:04 +0000</pubDate>
				<category><![CDATA[Amazon GuardDuty]]></category>
		<category><![CDATA[AWS Security Hub]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">b8ce1aee248e2908bc7f44e8391e88311ffbeae5</guid>

					<description>Enabling security tooling is the starting point. Making it operational—where findings drive decisions, response times are measurable, and your security posture improves week over week—is where most organizations struggle. This blog post provides a phased maturity roadmap for organizations that have already enabled AWS Security Hub and Amazon GuardDuty. These two services form the foundation […]</description>
										<content:encoded>&lt;p&gt;Enabling security tooling is the starting point. Making it &lt;i&gt;operational&lt;/i&gt;—where findings drive decisions, response times are measurable, and your security posture improves week over week—is where most organizations struggle.&lt;/p&gt; 
&lt;p&gt;This blog post provides a phased maturity roadmap for organizations that have already enabled &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-hub" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Hub&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty&lt;/a&gt;&lt;/span&gt;. These two services form the foundation of a cloud-centered security operations capability on AWS. Security Hub provides centralized security posture management and aggregates findings from multiple AWS security services, while GuardDuty provides intelligent threat detection by continuously monitoring for malicious activity and unauthorized behavior. For any production or enterprise AWS environment, having both services enabled across all accounts and AWS Regions is a baseline expectation; not because they’re optional add-ons, but because effective security operations require both the ability to detect threats and the ability to understand your overall security posture. If you haven’t yet enabled them, the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Security Hub documentation&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/" target="_blank" rel="noopener" data-cms-ai="0"&gt;GuardDuty documentation&lt;/a&gt;&lt;/span&gt; provide setup guidance, including multi-account deployment with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/organizations" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Organizations&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;Customers consistently tell us that while individual AWS security service documentation is thorough, what’s missing is a consolidated operational playbook—one resource that ties the services together into a working security operations practice with clear phases, progression criteria, and an operational cadence. That’s the gap this post fills. Rather than covering &lt;i&gt;how&lt;/i&gt; each feature works (the documentation does that well), this post focuses on &lt;i&gt;when&lt;/i&gt; and &lt;i&gt;why&lt;/i&gt; to use each capability, and how to build the organizational habits that make them effective.&lt;/p&gt; 
&lt;p&gt;What follows is a six-phase roadmap for moving from &lt;i&gt;these services are active&lt;/i&gt; to &lt;i&gt;these services are driving our security operations&lt;/i&gt;. Each phase builds on the previous one, and each is designed to deliver tangible, measurable improvement.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 0: Assess your current state&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; Understand what’s working before changing anything.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Estimated timeline:&lt;/b&gt; 1–2 weeks&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Move to Phase 1 when:&lt;/b&gt; You have a documented current-state assessment covering all the following items.&lt;/p&gt; 
&lt;p&gt;Before introducing new processes or automation, establish a clear picture of the current environment. This assessment informs every decision that follows.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Actions:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-5610dbe0-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Findings inventory:&lt;/b&gt; Review existing active GuardDuty findings to determine how many there are, the severity distribution, and how old the oldest findings are. A large backlog of untouched HIGH or CRITICAL findings that have been sitting for weeks is a strong signal about where to focus first.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Security Hub score baseline:&lt;/b&gt; Determine your current compliance score against &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/fsbp-standard.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Foundational Security Best Practices (FSBP)&lt;/a&gt;&lt;/span&gt; and The &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/cis-aws-foundations-benchmark.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;CIS AWS Foundations Benchmark&lt;/a&gt;&lt;/span&gt;. Check to see which standards are enabled; if multiple standards are enabled, review for overlapping standards (creating noise) or unused standards.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Multi-account and multi-Region check:&lt;/b&gt; Look to see if GuardDuty is enabled in every account and every Region, or only in Regions with active workloads. Threat actors frequently operate in Regions that organizations don’t actively monitor. Also check to see if Security Hub aggregation is configured with a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;delegated administrator account&lt;/a&gt;&lt;/span&gt; or if each account is being managed independently.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Integration check:&lt;/b&gt; Determine if GuardDuty findings are flowing into Security Hub and if &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/inspector/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Inspector&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/macie/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Macie&lt;/a&gt;&lt;/span&gt; are enabled and feeding findings in. Without integration, Security Hub might be only surfacing its own compliance checks.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Notification check:&lt;/b&gt; See if there’s an &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/eventbridge/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon EventBridge&lt;/a&gt;&lt;/span&gt; rule configured for notifications and if so, how findings are being routed and to whom. Know if notifications are being sent using an &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/sns/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Notification Service (Amazon SNS)&lt;/a&gt;&lt;/span&gt; topic or a chat channel integration. Without a clear notification and response workflow, findings can accumulate silently in the console with no one looking at them.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;b&gt;Deliverable:&lt;/b&gt; A one-page current state assessment that identifies what’s enabled, what’s flowing where, who’s looking at it, and what’s in the existing backlog.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 1: Reduce the noise&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; Make the signal meaningful before asking anyone to act on it.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Estimated timeline:&lt;/b&gt; 2–3 weeks&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Move to Phase 2 when:&lt;/b&gt; Remaining findings represent items requiring real decisions, compliance scores reflect actual posture, and you can articulate why every suppression rule and disabled control exists.&lt;/p&gt; 
&lt;p&gt;This is the single most important phase. If this step is skipped in favor of jumping straight to automation, the result is automated chaos. Alert fatigue is the primary reason security tooling is ignored, and addressing it first is what makes everything that follows sustainable.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;GuardDuty tuning:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-561102f0-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Create &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;suppression rules&lt;/a&gt;&lt;/span&gt;&lt;b&gt; for known-benign findings.&lt;/b&gt; The goal is to suppress activity you’ve already evaluated and accepted—such as expected traffic from corporate egress IPs (based on &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;trusted IP lists&lt;/a&gt;&lt;/span&gt;), internal tools that trigger DNS-based findings, or internet-facing resources that naturally receive port scanning. The principle: if you’ve investigated a finding and it’s expected, suppress it so your team can focus on what matters.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Triage every active HIGH and CRITICAL finding&lt;/b&gt; into three categories: &lt;i&gt;needs immediate investigation&lt;/i&gt; (real threat, not yet reviewed), &lt;i&gt;true positive, already addressed&lt;/i&gt; (archive using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/finding-workflow-status.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;workflow status&lt;/a&gt;&lt;/span&gt;), or &lt;i&gt;false positive or expected behavior&lt;/i&gt; (create a suppression rule). Every finding must be categorized into one of these three states.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Review GuardDuty &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-features-activation-model.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;protection plans&lt;/a&gt;&lt;/span&gt; and enable any that are relevant but not yet active. Organizations that enabled GuardDuty years ago might not have activated protection plans released since then (such as Runtime Monitoring, Malware Protection, RDS Protection, and Lambda Protection). Evaluate each against your workload profile and enable what applies.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;b&gt;Security Hub tuning:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-561102f5-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Disable controls that aren’t relevant to the environment.&lt;/b&gt; This is the highest-value quick win. If a service isn’t in use, disable its controls. If a control is addressed by an alternative solution, disable it. A 47% compliance score where half the failures are irrelevant trains teams to ignore the dashboard entirely. See the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-controls-reference.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Security Hub controls reference&lt;/a&gt;&lt;/span&gt; for the full list.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Choose a primary standard.&lt;/b&gt; AWS Foundational Security Best Practices is a strong default. The CIS AWS Foundations Benchmark adds value when there’s a specific compliance mandate. Avoid enabling PCI DSS or NIST 800-53 standards unless there’s a reporting requirement—they add significant volume without proportional signal for most organizations.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Configure &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/finding-aggregation.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;cross-Region aggregation&lt;/a&gt;&lt;/span&gt; to the delegated administrator account if not already in place. A single aggregated view eliminates the need to check findings across multiple Regional consoles.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Use the &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/finding-workflow-status.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;workflow status&lt;/a&gt;&lt;/span&gt;&lt;b&gt; field operationally.&lt;/b&gt; Findings should progress from NEW to NOTIFIED to RESOLVED or SUPPRESSED. If everything remains in NEW indefinitely, the system carries no operational meaning.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;b&gt;Deliverable:&lt;/b&gt; A tuned environment where remaining findings represent items that require real decisions. Compliance scores should now reflect your organization’s actual security posture rather than noise.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 2: Build the notification and routing layer&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; Get the right findings to the right people at the right time.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Estimated timeline:&lt;/b&gt; 2–3 weeks&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Move to Phase 3 when:&lt;/b&gt; CRITICAL and HIGH findings reach the security team within minutes, MEDIUM findings create tracked tickets, and notifications include enriched context. No action is taken until a person or an automation is informed that something needs attention.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Architecture:&lt;/b&gt; Security Hub to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cwe-integration-types.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;EventBridge rule&lt;/a&gt;&lt;/span&gt; to routing logic to destination&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Tiered notification strategy:&lt;/b&gt;&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;CRITICAL&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Page on-call immediately&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;PagerDuty or Opsgenie&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;15 minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;HIGH&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Alert security team channel&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Slack or Teams channel and ticket creation&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;4 hours&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;MEDIUM&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Create ticket for review&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Jira or ServiceNow&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;48 hours&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;LOW or INFORMATIONAL&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Batch digest&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Weekly email summary or dashboard review&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Next review cycle&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;b&gt;Key design decisions:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-56115110-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Route from Security Hub, not individual services.&lt;/b&gt; Because findings from GuardDuty, Inspector, Macie, and Security Hub compliance checks all aggregate in Security Hub, build your &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cwe-integration-types.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;EventBridge rules&lt;/a&gt;&lt;/span&gt; there for centralized management.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Create a fast path for the most dangerous finding types.&lt;/b&gt; Certain GuardDuty findings, particularly those involving credential exfiltration, cryptocurrency activity, trojans, and active compromises, warrant a separate, faster routing path that bypasses normal triage. Identify these based on your threat model and the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;GuardDuty finding types reference&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Enrich notifications before delivery.&lt;/b&gt; A raw JSON finding in a chat channel provides little actionable context. Use an &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/lambda/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Lambda&lt;/a&gt;&lt;/span&gt; function to format notifications with the information responders need: account alias, Region, Amazon Resource Name (ARN), finding type, severity, a console deep link, and a plain-language description. The &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cwe-integration-types.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Security Hub CloudWatch Events integration guide&lt;/a&gt;&lt;/span&gt; describes the event format.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;b&gt;Deliverable:&lt;/b&gt; A working notification pipeline where CRITICAL and HIGH findings reach the security team within minutes, MEDIUM findings create tracked work items, and LOW and INFORMATIONAL findings are batched for periodic review.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 3: Build automated remediation for high-confidence findings&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; For findings where the correct response is deterministic, remove the human from the loop.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Estimated timeline:&lt;/b&gt; 3–4 weeks&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Move to Phase 4 when:&lt;/b&gt; At least 3–5 high-confidence finding types have automated responses deployed with audit trails, and the team has established a process for evaluating new auto-remediation candidates.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;The guiding principle:&lt;/b&gt; Only auto-remediate when &lt;i&gt;all three conditions&lt;/i&gt; are met: the finding is high-confidence, the response is deterministic, and the blast radius of the automated action is limited. Automated remediation must not create the risk of a production outage.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Decision framework:&lt;/b&gt;&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Confidence level&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;High – no false positive risk&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Medium – context-dependent&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Low – requires investigation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Response complexity&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Single, well-defined action&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Multiple steps or judgment calls&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Requires forensic analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Blast radius&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Limited to one resource&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Could affect dependent services&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Production-wide impact&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Rollback difficulty&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Straightforward to reverse&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Moderate effort to reverse&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Difficult or impossible to reverse&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;b&gt;Common auto-remediation categories:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-56117820-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Instance isolation&lt;/b&gt; for confirmed compromise findings (cryptocurrency mining, malware, and trojans): Replace the security group, snapshot volumes for forensics, and notify.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Credential revocation&lt;/b&gt; for confirmed credential compromise: Attach deny-all policies, revoke sessions, and deactivate access keys as appropriate to the credential type.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Compliance drift correction&lt;/b&gt; for deterministic misconfigurations: Re-enable &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;&lt;/span&gt; Block Public Access, revoke overly permissive security group rules, and re-enable AWS CloudTrail logging.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Notification-only escalation&lt;/b&gt; for findings that require human judgment before action: &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ebs" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Block Store (Amazon EBS)&lt;/a&gt;&lt;/span&gt; encryption gaps (require migration) and access key rotation (requires coordination with the key owner).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For implementation, AWS provides &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/solutions/implementations/automated-security-response-on-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Security Hub Automated Response and Remediation (SHARR)&lt;/a&gt;&lt;/span&gt;, a solution that includes pre-built remediation playbooks deployed as &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/step-functions/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Step Functions&lt;/a&gt;&lt;/span&gt; workflows triggered by EventBridge. This is a strong starting point—evaluate the provided playbooks, enable the ones that fit, and extend with custom remediations as needed.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; For findings that recur because the environment lacks preventive guardrails, the best long-term response is often a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;service control policy (SCP)&lt;/a&gt;&lt;/span&gt; that prevents the misconfiguration from occurring in the first place. Phase 5 covers this preventive controls layer.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Deliverable:&lt;/b&gt; A library of automated and semi-automated remediation runbooks with full audit trails, and a documented decision framework the team uses to evaluate new auto-remediation candidates.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 4: Build the operational rhythm&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; Turn security findings management into a sustained organizational practice, not a one-time cleanup.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Estimated timeline:&lt;/b&gt; 4–6 weeks to establish, then ongoing&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Move to Phase 5 when:&lt;/b&gt; The weekly cadence has been running consistently for at least 8 weeks, monthly metrics show positive trends, and the first quarterly review has been completed.&lt;/p&gt; 
&lt;p&gt;This is where many organizations stall, and it’s the most important phase in the entire roadmap. The technology is working, the notifications are flowing, automated remediations are firing, but there’s no organizational habit built around it. Without this phase, everything you’ve built in Phases 0–3 will gradually decay. Suppression rules will go stale, new team members won’t know the system exists, and findings will start accumulating again. The operational rhythm is what converts a security tooling deployment into a security operations practice.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Weekly security review (30 minutes)&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Attendees:&lt;/b&gt; Security team lead, cloud platform team representative, rotating engineering lead from an application team&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Why the rotating engineering lead matters:&lt;/b&gt; Security findings don’t exist in a vacuum; they’re generated by workloads that engineering teams own. Rotating an engineering representative through this meeting accomplishes three things: it builds security awareness across the organization, ensures findings are routed to people with the context to resolve them, and creates organizational accountability beyond the security team.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Agenda template:&lt;/b&gt;&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5 minutes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Compliance score trend&lt;/b&gt; – Review Security Hub scores by account and standard. Is the trend improving, declining, or flat? If declining, why?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security lead&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Identified regression areas&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5 minutes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Critical and high findings review&lt;/b&gt; – Walk through new HIGH and CRITICAL GuardDuty findings from the past week. Are there any that need immediate escalation?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security lead&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Escalation actions assigned&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;10 minutes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Top five failing controls&lt;/b&gt; – Identify the five Security Hub controls with the most failures. Assign an owner and a target date for each.&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Platform lead&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Owners and dates documented&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5 minutes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Automation review&lt;/b&gt; – Did any auto-remediations fire this week? Did they work correctly? Were there any false triggers?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security lead&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Automation adjustments queued&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5 minutes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Tuning decisions&lt;/b&gt; – Are new suppression rules needed based on this week’s findings? Are any new finding types candidates for auto-remediation?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;All&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Tuning backlog updated&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;b&gt;Running the meeting effectively:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-56117825-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;Keep a running document (such as a wiki page or shared document) that captures decisions and action items week over week. This becomes your institutional memory.&lt;/li&gt; 
 &lt;li&gt;If the compliance score hasn’t moved in over 3 weeks, that’s a signal. Either the assigned work isn’t happening, or the remaining findings are genuinely difficult to address. Both need to be discussed.&lt;/li&gt; 
 &lt;li&gt;Track action items from previous weeks. A review that generates action items but never follows up on them will lose credibility and attendance quickly.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Escalation procedures&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Define clear escalation paths &lt;i&gt;before&lt;/i&gt; they’re needed:&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;CRITICAL finding not acknowledged within the SLA&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Auto-escalate to security team manager&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;15 minutes after SLA breach&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;HIGH finding not resolved within the SLA&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Escalate to finding owner’s manager&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;4 hours after SLA breach&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Compliance score drops more than 5 points in a week&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Escalate to cloud platform team lead for investigation&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Next business day&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Auto-remediation failure&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Page security on-call&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Immediate&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;New finding type not covered by existing runbooks&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Add to weekly review agenda for triage and runbook development&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Next weekly review&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Monthly metrics report&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Compile these metrics monthly and review them with security and engineering leadership. The goal is to tell a story about whether the organization’s security posture is improving, stable, or degrading, and why.&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Mean time to acknowledge (MTTA) for CRITICAL findings&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Are findings being seen promptly?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Decreasing month over month&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Mean time to resolve (MTTR) for CRITICAL and HIGH findings&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Are findings being acted on?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Decreasing month over month&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security Hub compliance score by standard, by account&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;What is the posture trend over time?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Increasing month over month&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Number of active GuardDuty findings by severity&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Is the backlog growing or shrinking?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Decreasing for HIGH and CRITICAL&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Findings auto-remediated compared to manually resolved&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Is automation delivering value?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Auto-remediation ratio increasing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Number of suppressed findings (with quarterly justification review)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Is noise being managed, or are problems being hidden?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Stable or decreasing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;New findings introduced compared to resolved this month&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Is the organization getting ahead or falling behind?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;More finding resolved than introduced&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;SLA adherence rate by severity&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Are response commitments being met?&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;More than 95% for CRITICAL, and more than 90% for HIGH&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;b&gt;Building the dashboard:&lt;/b&gt; Use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch dashboards&lt;/a&gt;&lt;/span&gt; for real-time operational visibility or &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/quicksight/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon QuickSight&lt;/a&gt;&lt;/span&gt; connected to Security Hub findings through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/security-lake/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Security Lake&lt;/a&gt;&lt;/span&gt; for historical trend analysis and executive reporting. The dashboard should be visible to—and regularly viewed by—everyone in the weekly review, not locked in a security team tool.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Quarterly reviews&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;The quarterly review is a deeper inspection of the system itself; not just the findings, but the machinery processing them.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Quarterly review checklist:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-5611c644-44b9-11f1-af1d-0567e47078c8" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Suppression rules audit:&lt;/b&gt; Review every active suppression rule to determine if the underlying condition is still present and the suppression is still justified. Document the review outcome for each rule.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Disabled controls audit:&lt;/b&gt; Review every disabled Security Hub control. Check that the justification is still valid and if the environment changed (for example, a service that wasn’t in use is now in use).&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Automation audit:&lt;/b&gt; Review &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&lt;/span&gt; roles used by remediation functions and verify least privilege. Review execution logs for any anomalies or failures that weren’t caught.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;New capabilities review:&lt;/b&gt; Evaluate newly released GuardDuty protection plans and Security Hub controls from that quarter. AWS releases new detection and compliance capabilities regularly. If you’re not reviewing them quarterly, you’re accumulating blind spots.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Process effectiveness review:&lt;/b&gt; Determine if the weekly meeting is well-attended and if action items are being completed. Make sure SLAs are being met. If attendance, action item completion, and SLA compliance aren’t where they should be, explore structural changes to address the gaps.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Operational maturity scoring&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Use this rubric to assess the maturity of your operational rhythm itself. Score each dimension 1–3 and use the total to track progress over time.&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Review cadence&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;One time reviews when someone remembers&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Weekly review happens, but attendance is inconsistent&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Weekly review is consistently attended with documented outcomes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Metrics tracking&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No metrics captured&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Metrics are collected monthly but not acted on&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Metrics drive decisions and declining trends trigger specific actions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Finding ownership&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Findings sit in queue with no owner&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Findings are assigned to teams but SLAs aren’t tracked&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Every finding has an owner, SLAs are tracked, and breaches are escalated&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Automation management&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Set-and-forget automations&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Automation logs are reviewed periodically&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Automation is reviewed weekly, and new candidates are evaluated continuously&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Tuning lifecycle&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Suppression rules created but never reviewed&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Annual review of suppressions and disabled controls&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Quarterly reviews with documented justification for every rule&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Cross-team engagement&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security team works in isolation&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Platform team participates&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Engineering teams actively participate and own remediation&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;b&gt;Scoring &lt;/b&gt;(revisit quarterly)&lt;b&gt;:&lt;/b&gt;&lt;/p&gt; 
&lt;ul id="rte-77d45772-53a5-11f1-a01b-01a4cd2c20bc" class="rte2-style-ul"&gt; 
 &lt;li&gt;Beginning: 6–9&lt;/li&gt; 
 &lt;li&gt;Established: 10–14&lt;/li&gt; 
 &lt;li&gt;Optimized: 15–18&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;b&gt;Deliverable:&lt;/b&gt; A documented operational cadence with clear ownership (consider a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://en.wikipedia.org/wiki/Responsibility_assignment_matrix" target="_blank" rel="noopener" data-cms-ai="0"&gt;RACI matrix&lt;/a&gt;&lt;/span&gt;), metrics dashboards, escalation procedures, and a continuous improvement loop. The cadence should survive team member turnover—if it depends on one person remembering to run it, it’s not yet operational.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Phase 5: Mature the architecture&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;b&gt;Goal:&lt;/b&gt; Fill remaining gaps and build toward a comprehensive security operations capability. &lt;b&gt;Estimated timeline:&lt;/b&gt; Ongoing. Prioritize based on organizational risk profile and compliance requirements.&lt;/p&gt; 
&lt;ul id="rte-be0d7182-4ee7-11f1-a27e-f3909eb5e640" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Amazon Inspector integration:&lt;/b&gt; Enable &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/inspector/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Inspector&lt;/a&gt;&lt;/span&gt; for Amazon Elastic Compute Cloud (Amazon EC2) instances, Lambda functions, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ecr" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Container Registry (Amazon ECR)&lt;/a&gt;&lt;/span&gt; container images. Findings flow into Security Hub automatically, adding vulnerability management alongside threat detection and posture management. Prioritize this if you have Amazon EC2 or container workloads without an existing vulnerability scanning solution.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Amazon Macie:&lt;/b&gt; Enable &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/macie/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Macie&lt;/a&gt;&lt;/span&gt; for S3 buckets containing potentially sensitive data. Particularly important for organizations with compliance requirements around personally identifiable information (PII), protected health information (PHI), or Payment Card Industry (PCI) data. Configure &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/macie/latest/user/discovery-asdd.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;automated sensitive data discovery&lt;/a&gt;&lt;/span&gt; and route findings to Security Hub.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Amazon Security Lake: &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/security-lake/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Security Lake&lt;/a&gt;&lt;/span&gt; centralizes security-relevant logs in OCSF format for long-term retention, forensic investigation, and threat hunting. This is valuable when you need historical analysis beyond the Security Hub retention window, or when feeding a third-party Security Information and Event Management (SIEM) tool.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Preventive controls layer:&lt;/b&gt; Convert recurring detective findings into preventive policies. Use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SCPs&lt;/a&gt;&lt;/span&gt; to prevent disabling GuardDuty, Security Hub, and CloudTrail, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;IAM permission boundaries&lt;/a&gt;&lt;/span&gt; on developer roles, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS WAF&lt;/a&gt;&lt;/span&gt; on public endpoints, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Network Firewall&lt;/a&gt;&lt;/span&gt; for VPC traffic inspection. The pattern is to make recurring misconfigurations impossible to introduce.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Detective controls expansion:&lt;/b&gt; Use&lt;b&gt; &lt;/b&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS IAM Access Analyzer&lt;/a&gt;&lt;/span&gt; for external access and unused access findings, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudTrail Lake&lt;/a&gt;&lt;/span&gt; for long-term queryable audit logs, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Config custom rules&lt;/a&gt;&lt;/span&gt; for organization-specific compliance checks.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Incident response readiness:&lt;/b&gt; Have incident response playbooks referencing specific GuardDuty finding types, pre-built forensics infrastructure (isolated VPC, forensic AMIs, and pre-configured IAM roles), regular tabletop exercises, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cloudformation/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudFormation&lt;/a&gt;&lt;/span&gt; templates to deploy isolation infrastructure on demand. See the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Incident Response Guide&lt;/a&gt;&lt;/span&gt; for a comprehensive framework.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;In this post, I provided a six-phase roadmap for operationalizing Security Hub and GuardDuty and showed that it isn’t a single project, but a progression. Phase 0 and Phase 1 can typically be completed in 3–5 weeks and deliver immediate clarity. Phases 2 and 3 build the response infrastructure that turns findings into action over the following 5–7 weeks. Phase 4 is what makes everything sustainable and is where you should invest the most attention. And Phase 5 expands the aperture from Security Hub and GuardDuty into a comprehensive security operations capability.&lt;/p&gt; 
&lt;p&gt;If you walked away from this post and did one thing, run the Phase 0 assessment this week. That single deliverable tells you exactly where to focus next. Use the following self-assessment checklist to identify your current phase, then focus on the next one. A tuned environment with working notifications and a weekly review cadence is dramatically more effective than a fully featured but neglected deployment. Start where you are, reduce the noise, build the habits, and iterate. To learn more, explore the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Hub User Guide&lt;/a&gt;&lt;/span&gt;, the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty User Guide&lt;/a&gt;&lt;/span&gt;, and the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Incident Response Guide&lt;/a&gt;&lt;/span&gt;. If you’ve implemented a similar operational cadence, or have questions about any phase, share your experience in the comments.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Self-assessment checklist&lt;/h2&gt; 
&lt;/div&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 0&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;We know how many active GuardDuty findings exist across all accounts&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;We know our current Security Hub compliance score&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;We know whether GuardDuty is enabled in every account and region&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;We know who (if anyone) is reviewing findings today&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 1&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;GuardDuty suppression rules exist for known-benign activity&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Irrelevant Security Hub controls have been disabled with documented justification&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;All active HIGH and CRITICAL findings have been triaged&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security Hub compliance scores reflect actual posture, not noise&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 2&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;HIGH and CRITICAL findings generate real-time notifications to the security team&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;MEDIUM findings automatically create tracked work items&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Notifications include enriched context (account alias, resource ARN, and console link)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 3&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;At least three high-confidence finding types trigger automated remediation&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Auto-remediation actions have full audit trails&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Remediation runbooks are documented and version-controlled&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 4&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;A weekly security review meeting occurs with defined attendees and agenda&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;MTTA and MTTR are tracked monthly for CRITICAL and HIGH findings&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Suppression rules and disabled controls are reviewed quarterly&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Security metrics trend positively over the past 3 months&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Phase 5&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Amazon Inspector, Macie, or Security Lake are integrated&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Preventive controls (SCPs, permission boundaries) address recurring findings&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Incident response playbooks exist and are tested through tabletop exercises&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;☐&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/04/Joseph-Sadler.jpg" alt="Joseph Sadler" width="120" height="160" class="aligncenter size-full wp-image-42538"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Joseph Sadler&lt;/h3&gt; 
  &lt;p&gt;Joseph is a Senior Solutions Architect on the Worldwide Public Sector team at AWS, specializing in cybersecurity and machine learning. With public and private sector experience, he has expertise in cloud security, artificial intelligence, threat detection, and incident response. His diverse background helps him architect robust, secure solutions that use cutting-edge technologies to safeguard mission-critical systems &lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Building secure B2C applications with fine-grained access control using Amazon Cognito and Amazon Verified Permissions</title>
		<link>https://aws.amazon.com/blogs/security/building-secure-b2c-applications-with-fine-grained-access-control-using-amazon-cognito-and-amazon-verified-permissions/</link>
					
		
		<dc:creator><![CDATA[Sowmya Vemuri]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 17:07:06 +0000</pubDate>
				<category><![CDATA[Amazon Cognito]]></category>
		<category><![CDATA[Amazon Verified Permissions]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Access Control]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[fine-grained authorization]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">ca5865b534f5b114213dfb80089a3674c439d6b5</guid>

					<description>Modern web applications require robust security controls to protect user data and application resources. Authentication and authorization are two fundamental pillars of application security that answer critical questions: Who are you? and What are you allowed to do? Implementing these controls correctly can be challenging for developers, especially when building data-intensive applications with frameworks like […]</description>
										<content:encoded>&lt;p&gt;Modern web applications require robust security controls to protect user data and application resources. Authentication and authorization are two fundamental pillars of application security that answer critical questions: &lt;em&gt;Who are you?&lt;/em&gt; and &lt;em&gt;What are you allowed to do?&lt;/em&gt; Implementing these controls correctly can be challenging for developers, especially when building data-intensive applications with frameworks like Streamlit (an open-source Python framework for building interactive web applications) or when requiring fine-grained access control. Key challenges include protecting access to application resources, implementing application identity with multi-factor authentication (MFA), and implementing usage-based controls.&lt;/p&gt; 
&lt;p&gt;In this post, you will learn how to build fine-grained access controls for a sample Streamlit application using &lt;a href="https://aws.amazon.com/cognito" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito&lt;/a&gt; for authentication and &lt;a href="https://aws.amazon.com/verified-permissions" target="_blank" rel="noopener noreferrer"&gt;Amazon Verified Permissions&lt;/a&gt; with Cedar policies for authorization. This architecture provides enterprise-grade security with minimal development effort, so you can focus on your application’s core functionality. You will learn how to reduce development time for secure applications, implement enterprise-grade authentication, through proper access management, and scale security with growing user bases.&lt;/p&gt; 
&lt;h2&gt;Security architecture overview&lt;/h2&gt; 
&lt;p&gt;The reference architecture follows a&amp;nbsp;layered security design with four key components; separating identity verification, authorization evaluation, application logic, and enforcement boundaries. By assigning clear responsibilities to each layer, the architecture limits blast radius and ensures that a failure in any single control does not compromise the overall system.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Authentication layer&lt;/strong&gt;: Amazon Cognito handles user authentication with secure credential validation and JSON web tokens (JWTs). It provides built-in password policies, account lockout protection, and session management.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Authorization layer&lt;/strong&gt;: Verified Permissions uses the Cedar policy engine to evaluate fine-grained access requests based on centrally stored policies.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Application layer&lt;/strong&gt;: The Streamlit frontend integrates with both services, managing user sessions and enforcing access controls in the user interface.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Security boundaries&lt;/strong&gt;: Multiple layers of security controls protect against unauthorized access, privilege escalation, authentication verification, authorization checks, and input validation.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This separation of concerns enables authentication and authorization to function as complementary security controls, following defense-in-depth principles. Figure 1 illustrates the end-to-end authentication and authorization workflow, showing how a user’s sign-in request flows through Amazon Cognito for identity verification, then through Verified Permissions for Cedar policy-based access decisions, before the application enforces the result.&lt;/p&gt; 
&lt;div id="attachment_42507" style="width: 1657px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42507" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/02/Amazon-Cognito-Amazon-Verified_Permissions-1.png" alt="Figure 1: Solution architecture and workflow" width="1647" height="905" class="size-full wp-image-42507"&gt;
 &lt;p id="caption-attachment-42507" class="wp-caption-text"&gt;Figure 1: Solution architecture and workflow&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The following workflow demonstrates how the three architecture layers work together: the authentication layer (steps 1–3) handles identity verification using Amazon Cognito, the authorization layer (steps 4–6) evaluates Cedar policies using Verified Permissions, and the application layer (steps 7–8) enforces the decision in Streamlit.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;The user sends a sign-in request, which is submitted through Streamlit&lt;/li&gt; 
 &lt;li&gt;The request is authenticated by Amazon Cognito&lt;/li&gt; 
 &lt;li&gt;An access token is sent back to Streamlit&lt;/li&gt; 
 &lt;li&gt;An authorization request is sent to Verified Permissions&lt;/li&gt; 
 &lt;li&gt;The Cedar policy engine evaluates the request&lt;/li&gt; 
 &lt;li&gt;A decision is sent back by the policy engine&lt;/li&gt; 
 &lt;li&gt;The instruction to allow or deny is sent back to Streamlit&lt;/li&gt; 
 &lt;li&gt;If the instruction is to allow, access is provided&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Understanding authorization with Cedar&lt;/h2&gt; 
&lt;p&gt;While authentication establishes user identity, authorization determines what actions users can perform. Verified Permissions provides a scalable authorization service based on &lt;a href="https://www.cedarpolicy.com/" target="_blank" rel="noopener noreferrer"&gt;Cedar&lt;/a&gt;, a policy language specifically designed for fine-grained access control.&lt;/p&gt; 
&lt;p&gt;Cedar policies follow a structured format that defines who can perform which actions on what resources. Let’s examine the anatomy of a Cedar policy:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;permit(
    principal == ?principal,
    action == application::Action::"ViewGrade",
    resource == ?resource
) when {
    principal has role == "Student" &amp;amp;&amp;amp;
    resource.student == principal.entityId
};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Policy components&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Effect&lt;/strong&gt;:&amp;nbsp;&lt;code style="color: #000000"&gt;permit&lt;/code&gt;or&amp;nbsp;&lt;code style="color: #000000"&gt;forbid&lt;/code&gt; determines whether the policy allows or denies access&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Principal&lt;/strong&gt;: The entity (user) making the request, represented by&amp;nbsp;&lt;code style="color: #000000"&gt;?principal&lt;/code&gt;&amp;nbsp;as a variable&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: The operation being performed, scoped to your application namespace&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Resource&lt;/strong&gt;: The target of the action, also represented as a variable&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Conditions&lt;/strong&gt;: The&amp;nbsp;&lt;code style="color: #000000"&gt;when&lt;/code&gt;&amp;nbsp;clause contains logical expressions that must evaluate to &lt;code style="color: #000000"&gt;true&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Advanced Cedar policy patterns&lt;/h2&gt; 
&lt;p&gt;This section describes commonly used Cedar policy patterns for implementing fine-grained authorization with Amazon Verified Permissions. The examples illustrate how to model ownership, role-based access, hierarchical permissions, and administrative controls in real-world applications&lt;/p&gt; 
&lt;h3&gt;Resource ownership control&lt;/h3&gt; 
&lt;p&gt;This pattern helps ensure that users can only access resources they own:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;permit(
    principal == ?principal,
    action == application::Action::"ViewGrade",
    resource == ?resource
) when {
    principal has role == "Student" &amp;amp;&amp;amp;
    resource.student == principal.entityId
};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt; –&amp;nbsp;This policy allows students to view only their own grades by:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Checking that the user has the &lt;code style="color: #000000"&gt;Student&lt;/code&gt; role&lt;/li&gt; 
 &lt;li&gt;Verifying that the grade resource’s&amp;nbsp;student&amp;nbsp;attribute matches the student’s&amp;nbsp;&lt;code style="color: #000000"&gt;entityId&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Preventing students from accessing other students’ grades while allowing access to their own academic performance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Role-based access with resource type&lt;/h3&gt; 
&lt;p&gt;This pattern grants access based on role and resource type:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;permit(
    principal == ?principal,
    action == application::Action::"EditCourse",
    resource == ?resource
) when {
    principal has role == "Faculty" &amp;amp;&amp;amp;
    resource has resourceType == "Course" &amp;amp;&amp;amp;
    resource.instructor == principal.entityId
};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt; –&amp;nbsp;This policy allows faculty members to edit courses they teach by:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Verifying the user has the &lt;code style="color: #000000"&gt;Faculty&lt;/code&gt; role&lt;/li&gt; 
 &lt;li&gt;Confirming the resource is of type &lt;code style="color: #000000"&gt;Course&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Verifying that the course’s&amp;nbsp;instructor&amp;nbsp;attribute matches the faculty member’s&amp;nbsp;&lt;code style="color: #000000"&gt;entityId&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Restricting faculty to modify only their own courses, not courses taught by other instructors&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Hierarchical authorization&lt;/h3&gt; 
&lt;p&gt;This pattern allows department heads to manage faculty in their department:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;permit(
    principal == ?principal,
    action == application::Action::"ManageFaculty",
    resource == ?resource
) when {
    principal has role == "DepartmentHead" &amp;amp;&amp;amp;
    resource has role == "Faculty" &amp;amp;&amp;amp;
    resource.department == principal.department
};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt; –&amp;nbsp;This policy implements departmental hierarchy controls by:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Requiring the user to be a &lt;code style="color: #000000"&gt;DepartmentHead&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Verifying the resource is a faculty member&lt;/li&gt; 
 &lt;li&gt;Matching the faculty member’s department with the department head’s department&lt;/li&gt; 
 &lt;li&gt;Preventing department heads from managing faculty in other departments&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Administrative override&lt;/h3&gt; 
&lt;p&gt;This pattern provides emergency access with proper justification:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;permit(
    principal == ?principal,
    action == ?action,
    resource == ?resource
) when {
    principal has role == "Administrator" &amp;amp;&amp;amp;
    context has emergencyAccess == true &amp;amp;&amp;amp;
    context has justification
};&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt; –&amp;nbsp;This policy provides emergency access capabilities by:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Allowing administrators to perform any action on any resource&lt;/li&gt; 
 &lt;li&gt;Requiring an emergency access flag to be set to &lt;code style="color: #000000"&gt;true&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Requiring a justification for emergency access&lt;/li&gt; 
 &lt;li&gt;Supporting accountability through required documentation while enabling emergency operations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Cedar policy evaluation flow&lt;/h2&gt; 
&lt;p&gt;Understanding how policies are evaluated helps design effective authorization systems. Figure 2 shows a common evaluation pattern for an academic scenario&lt;/p&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: A policy match evaluates to the policy’s effect (permit or forbid). Forbid policies take precedence: if any forbid policy matches, access is denied regardless of permit policies.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;div id="attachment_42526" style="width: 1645px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42526" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/04/Amazon-Cognito-Amazon-Verified_Permissions-2r.png" alt="Figure 2: Policy evaluation process" width="1635" height="268" class="size-full wp-image-42526"&gt;
 &lt;p id="caption-attachment-42526" class="wp-caption-text"&gt;Figure 2: Policy evaluation process&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The policy evaluation process follows these steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;User attempts to access a protected resource&lt;/li&gt; 
 &lt;li&gt;Application sends an authorization request to Verified Permissions&lt;/li&gt; 
 &lt;li&gt;Verified Permissions retrieves applicable Cedar policies from the policy store&lt;/li&gt; 
 &lt;li&gt;The Cedar policy engine evaluates each policy against the request&lt;/li&gt; 
 &lt;li&gt;If any&amp;nbsp;&lt;code style="color: #000000"&gt;forbid&lt;/code&gt;&amp;nbsp;policy matches, access is denied immediately&lt;/li&gt; 
 &lt;li&gt;If any&amp;nbsp;&lt;code style="color: #000000"&gt;permit&lt;/code&gt;&amp;nbsp;policy matches and no&amp;nbsp;&lt;code style="color: #000000"&gt;forbid&lt;/code&gt;&amp;nbsp;policies match, access is allowed&lt;/li&gt; 
 &lt;li&gt;If no policies match, access is denied by default&lt;/li&gt; 
 &lt;li&gt;The evaluation result (&lt;code style="color: #000000"&gt;ALLOW&lt;/code&gt; or &lt;code style="color: #000000"&gt;DENY&lt;/code&gt;) is returned to the application&lt;/li&gt; 
 &lt;li&gt;Application enforces the authorization decision&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Cedar policy language&lt;/h3&gt; 
&lt;p&gt;Cedar is an Amazon open source policy language designed for fine-grained authorization. Every policy defines who (principal) can perform what action on which resource under what conditions, as shown in Figure 3.&lt;/p&gt; 
&lt;div id="attachment_42509" style="width: 1427px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42509" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/02/Amazon-Cognito-Amazon-Verified_Permissions-3.png" alt="Figure 3: Cedar policy definitions" width="1417" height="400" class="size-full wp-image-42509"&gt;
 &lt;p id="caption-attachment-42509" class="wp-caption-text"&gt;Figure 3: Cedar policy definitions&lt;/p&gt;
&lt;/div&gt; 
&lt;h3&gt;Policy interaction&lt;/h3&gt; 
&lt;p&gt;The following table shows how different policies interact in complex scenarios where multiple policies could apply:&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Student policy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Faculty policy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Department head policy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Admin policy&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Student accessing own grade&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Permit&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Override&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Faculty editing course&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Permit&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Override&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Department head managing faculty&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Permit&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Override&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Emergency admin access&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Permit&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Legend:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Permit&lt;/strong&gt; – Policy allows access&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;N/A&lt;/strong&gt; – Policy doesn’t apply&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Override&lt;/strong&gt; – Emergency admin access&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The preceding table shows how each role’s policy applies to different scenarios, with admin access having override capabilities across most situations except for emergency admin access where it’s the primary permit authority. The Override column specifically indicates that the administrator’s emergency access policy can supersede other role-specific policies, but only when the &lt;code style="color: #000000"&gt;emergencyAccess&lt;/code&gt; context flag is explicitly set and a justification is provided. This is not an automatic override.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Policy optimization tips:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Order conditions by likelihood of success&lt;/strong&gt; – Place the most frequently true conditions first in your when clause to enable short-circuit evaluation. For example, check role before resource ownership, because role mismatches are caught earlier. See &lt;a href="https://docs.cedarpolicy.com/overview/best-practices.html" target="_blank" rel="noopener noreferrer"&gt;Cedar best practices&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use indexed attributes for faster lookups&lt;/strong&gt; – Use entity attributes that Verified Permissions indexes natively (&lt;code style="color: #000000"&gt;entityId&lt;/code&gt;, &lt;code style="color: #000000"&gt;role&lt;/code&gt;, &lt;code style="color: #000000"&gt;resource type&lt;/code&gt;) as primary conditions. &lt;a href="https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/design-authz-strategy.html" target="_blank" rel="noopener noreferrer"&gt;Best practices for designing an authorization model&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Cache policy evaluations when appropriate&lt;/li&gt; 
 &lt;li&gt;Monitor evaluation metrics and performance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Real-world application: Academic system&lt;/h2&gt; 
&lt;p&gt;Consider an academic system with different user roles and their corresponding permissions:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Student&lt;/strong&gt;: View own grades&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Policy helps ensure students can only access grade resources where they are listed as the student&lt;/li&gt; 
 &lt;li&gt;The policy verifies the student’s role and matches the resource owner to the principal’s entity ID&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Faculty&lt;/strong&gt;: Edit course content, manage grades&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Policy allows faculty to edit courses they teach&lt;/li&gt; 
 &lt;li&gt;Faculty can view and modify grades for students in their courses&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Teaching assistant (TA)&lt;/strong&gt;: Grade management and course support&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Policy permits TAs to manage grades for courses they assist with&lt;/li&gt; 
 &lt;li&gt;Access is limited to specific courses assigned to the TA&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Department head&lt;/strong&gt;: Manage faculty assignments&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Policy allows department heads to manage faculty in their department&lt;/li&gt; 
 &lt;li&gt;Access is scoped to the department hierarchy&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Administrator&lt;/strong&gt;: System-wide access&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Policy provides emergency access with proper justification&lt;/li&gt; 
 &lt;li&gt;Administrative actions are logged and audited&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;p&gt;To implement the preceding Academic system application, you need an active AWS account, Python 3.8 or later, basic Streamlit knowledge, and &lt;a href="https://aws.amazon.com/iam" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt; permissions for Amazon Cognito and Verified Permissions.&lt;/p&gt; 
&lt;h3&gt;Run the sample and extend the solution&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Download the code base: &lt;/strong&gt;Start by downloading the code base from &lt;a href="https://github.com/aws-samples/sample-blog-avp-streamlit" target="_blank" rel="noopener noreferrer"&gt;the avp streamlit samples repository&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Set up your development environment&lt;/strong&gt;: Install the &lt;a href="https://aws.amazon.com/sdk-for-python/" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Python (boto3)&lt;/a&gt; and configure your AWS credentials. 
  &lt;ul&gt; 
   &lt;li&gt;Install the AWS SDK for Python: 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-text"&gt;pip install boto3
&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/li&gt; 
   &lt;li&gt;Log in to your AWS account: 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-text"&gt;aws login --region $REGION&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/li&gt; 
   &lt;li&gt;Verify that your &lt;a href="https://aws.amazon.com/cli" target="_blank" rel="noopener noreferrer"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt;, Python, and dependencies are correctly configured. 
    &lt;div class="hide-language"&gt; 
     &lt;pre&gt;&lt;code class="lang-text"&gt;./verify-setup.sh&lt;/code&gt;&lt;/pre&gt; 
    &lt;/div&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Create your AWS resources&lt;/strong&gt;: Use the AWS Management Console or infrastructure as code (IaC) tools to provision your &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito user pool&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html" target="_blank" rel="noopener noreferrer"&gt;Verified Permissions policy store&lt;/a&gt;. 
  &lt;div class="hide-language"&gt; 
   &lt;pre&gt;&lt;code class="lang-text"&gt;./deploy-demo-environment.sh
Do you want to start the demo now? (Y/N): Y&lt;/code&gt;&lt;/pre&gt; 
  &lt;/div&gt; &lt;p&gt; This provisions an Amazon Cognito user pool, a Verified Permissions policy store, and any sample resources needed for the demo.&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Verify the login screen: &lt;/strong&gt;&lt;br&gt; 
  &lt;div id="attachment_42510" style="width: 1657px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42510" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/02/Amazon-Cognito-Amazon-Verified_Permissions-4.png" alt="Figure 4: Verify login credentials" width="1647" height="727" class="size-full wp-image-42510" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42510" class="wp-caption-text"&gt;Figure 4: Verify login credentials&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Demo walkthrough and shut down&lt;/strong&gt;: Interact with the demo and test the policies and features. When you’re ready to exit, press &lt;code style="color: #000000"&gt;Ctrl+C&lt;/code&gt; to shut down and stop.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Define your Cedar policies&lt;/strong&gt;: Start with basic policies and gradually add complexity as you understand the evaluation model.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Implement authentication&lt;/strong&gt;: Integrate Amazon Cognito authentication into your application with proper error handling.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Add authorization checks&lt;/strong&gt;: Implement authorization checks at critical access points in your application. For authentication, implement proper error handling for expired tokens, failed MFA challenges, and account lockouts. Use the Amazon Cognito built-in token refresh flow. For authorization, place Verified Permissions checks at every API endpoint and UI component that accesses protected resources.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Test thoroughly&lt;/strong&gt;: Create test scenarios for each user role and permission combination.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Monitor and iterate&lt;/strong&gt;: Set up &lt;a href="https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/monitoring-cloudtrail.html" rel="noopener" target="_blank"&gt;AWS CloudTrail logging&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" rel="noopener" target="_blank"&gt;Amazon CloudWatch alarms&lt;/a&gt; to monitor your security controls and refine them based on real-world usage.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Security best practices&lt;/h2&gt; 
&lt;p&gt;When implementing this architecture, follow these best practices to support security:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Layer your security controls&lt;/strong&gt;: Use both authentication and authorization as complementary controls rather than relying on a single mechanism.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Follow least privilege principles&lt;/strong&gt;: Grant only the permissions needed for specific user roles. Start with minimal permissions and add more as needed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Implement proper session management&lt;/strong&gt;: Set appropriate token expiration and refresh policies. Amazon Cognito handles much of this automatically, but you should configure timeouts based on your security requirements.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Validate all inputs&lt;/strong&gt;: Sanitize user inputs to prevent injection attacks. Don’t rely on client-side validation alone.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Monitor authentication events&lt;/strong&gt;: Set up logging and alerts for suspicious activities such as repeated failed login attempts or unusual access patterns.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Conduct regular security reviews&lt;/strong&gt;: Periodically audit your policies and security configurations to verify they still meet your requirements and follow current best practices.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Implement secure error handling&lt;/strong&gt;: Avoid information disclosure through error messages. Provide helpful feedback to users without revealing system details that could aid attackers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Implementing proper authentication and authorization is critical for application security. By using Amazon Cognito and Amazon Verified Permissions, you can build robust security controls without complex custom code. Through this approach, you can implement enterprise-grade authentication with minimal effort, define and enforce fine-grained authorization policies, scale your security controls as your application grows, and centrally manage and audit security policies.&lt;/p&gt; 
&lt;p&gt;To get started with your implementation, create your AWS resources including an Amazon Cognito user pool and Verified Permissions policy store. Define your Cedar policies based on your application’s access requirements. Integrate authentication and authorization checks into your application flow. Test thoroughly with different user roles and access scenarios. Finally, monitor and refine your security controls based on usage patterns.&lt;/p&gt; 
&lt;p&gt;For additional resources, check out the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cognito/" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito documentation&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/verifiedpermissions/" target="_blank" rel="noopener noreferrer"&gt;Amazon Verified Permissions documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/02/Sowmya-Vemuri.jpeg" alt="Sowmya Vemuri" width="120" height="160" class="aligncenter size-full wp-image-42504"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sowmya Vemuri&lt;/h3&gt; 
  &lt;p&gt;Sowmya is a Senior Technical Customer Solutions Manager at AWS, where she partners with AWS’s largest customers to drive agentic AI transformation, cloud security strategy, and compute modernization at scale. She has 14+ years of engineering, product, and technical leadership experience building and scaling distributed systems across the stack: bare-metal servers, data platforms, enterprise and consumer applications, and autonomous cloud architectures with zero human operator access.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Amazon Cognito unlocks advanced capabilities with next-generation infrastructure</title>
		<link>https://aws.amazon.com/blogs/security/amazon-cognito-unlocks-advanced-capabilities-with-next-generation-infrastructure/</link>
					
		
		<dc:creator><![CDATA[Howie Li]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 21:45:42 +0000</pubDate>
				<category><![CDATA[Amazon Cognito]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">0b966f68943611e3ab8195246928258f7483a0c1</guid>

					<description>Amazon Cognito recently introduced high-throughput performance for demanding workloads, customer-managed keys for full control over data encryption at rest, and multi- Region replication for business continuity improvement. These capabilities were made possible through a next-generation storage infrastructure designed for extensibility and scale. To deliver this, we migrated hundreds of millions of user profiles, and you […]</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://aws.amazon.com/cognito" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito&lt;/a&gt; recently introduced high-throughput performance for demanding workloads, customer-managed keys for full control over data encryption at rest, and multi- Region replication for business continuity improvement. These capabilities were made possible through a next-generation storage infrastructure designed for extensibility and scale. To deliver this, we migrated hundreds of millions of user profiles, and you probably didn’t even notice. In this post, we walk through what’s new, the architecture behind it, and how we got here with a zero-downtime migration that kept your applications running.&lt;/p&gt; 
&lt;h2&gt;New capabilities now available on Cognito&lt;/h2&gt; 
&lt;p&gt;The migration to the new infrastructure wasn’t just about maintaining existing functionality—it created the foundation for delivering capabilities that solve customer challenges while positioning Amazon Cognito for continuous improvements.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;High-throughput performance&lt;/strong&gt;: The new architecture supports the higher request volumes and scale requirements of modern applications while maintaining the low latency performance that your applications depend on—able to support tens of millions of users per user pool and thousands of transactions per second (TPS).&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/data-protection.html" target="_blank" rel="noopener noreferrer"&gt;Customer-managed keys&lt;/a&gt;: Customers can now use their own encryption keys stored in &lt;a href="https://aws.amazon.com/kms/" target="_blank" rel="noopener noreferrer"&gt;AWS Key Management Service (AWS KMS)&lt;/a&gt; for encrypting data at rest. This provides enhanced security control and capabilities, giving customers full ownership over their encryption key lifecycle.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/blogs/aws/improve-your-application-resilience-with-amazon-cognito-multi-region-replication" target="_blank" rel="noopener noreferrer"&gt;Multi-Region replication&lt;/a&gt;: Customers can now synchronize their entire user pool data, including user passwords, attributes, and configurations to another user pool in another Region of their choice. This means that customers can implement business continuity strategies and maintain authentication availability in case of a Regional failover, helping their applications remain accessible to users even during unexpected disruptions.&lt;/p&gt; 
&lt;h2&gt;An architecture for innovation&lt;/h2&gt; 
&lt;p&gt;The new architecture uses a purpose-built storage layer designed for extensibility and scale of identity operations. We anchored the new architecture around a set of design tenets:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Identity-first design&lt;/strong&gt;: The storage layer understands user identities. There’s no client-specific business logic and no generalizations beyond identity management; keeping the system focused, portable, and optimized.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Avoid one-way doors&lt;/strong&gt;: Deliver value incrementally while keeping architectural choices reversible, so we can evolve as new needs arise.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Backward compatible&lt;/strong&gt;: Changes to the underlying infrastructure should never break customers’ applications.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These tenets shaped every architectural decision. The architecture separates into independently deployable domains. Previously, while using &lt;a href="https://aws.amazon.com/cloud-directory" target="_blank" rel="noopener noreferrer"&gt;Amazon Cloud Directory&lt;/a&gt;, the service architecture relied on a single data store to persist all customer information. This provided straightforward data traversal mechanisms but required multi-service coordination to adjust database schema when new features were required. The new architecture uses different datasets, allowing them to evolve independently for faster feature iterations.&lt;/p&gt; 
&lt;h2&gt;Migration with zero-downtime&lt;/h2&gt; 
&lt;p&gt;Migrating users requires extreme precautions and a strategy designed to maintain zero downtime and ensure data integrity at every step. Our approach prioritizes both immediate stability and long-term flexibility through the following measures:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Shadow mode validation&lt;/strong&gt;: We ran customer API requests through both old and new infrastructures simultaneously, comparing response structures, status codes, and behavioral characteristics. The validation was designed so that sensitive information was never exposed in plaintext during comparison. We accounted for known variances—for example, timestamps could differ slightly between systems—so that only meaningful discrepancies surfaced as actionable alerts.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Data backfill:&lt;/strong&gt; Before switching a user pool to the new infrastructure, we performed a bulk backfill of all existing user records from the legacy system into the new storage. The backfill ran alongside live traffic with dual-write capturing any changes made during the backfill window, ensuring no data loss or stale data. Shadow mode served as the validation layer for the backfill; as we addressed more edge cases in data syncing, shadow mode match rates increased, confirming data completeness before we proceeded to the switchover.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Dual-write architecture&lt;/strong&gt;: We implemented a system where all identity operations were simultaneously written to both legacy and new services, with comprehensive validation to ensure consistency. Even when a dual-write to the new infrastructure failed, the operation still succeeded in the legacy system, preserving all customer-initiated requests. This means any dual-write failure was contained as an internal consistency issue and not customer-impacting.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Anti&lt;/strong&gt;–&lt;strong&gt;entropy validation&lt;/strong&gt;: We implemented a data validation and correction system that continuously compared records across old and new infrastructures, detecting and resolving any data divergence. Anti-entropy scans compared user attributes, credential hashes, group memberships, and configurations, among other records. When true discrepancies were found, the system automatically reconciled them using the legacy system as the source of truth. This layer was able to catch edge cases that shadow mode and dual writes alone could not cover.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Incremental rollout with rollback capability&lt;/strong&gt;: We established controlled deployment phases with immediate rollback capabilities. After switching a user pool to the new infrastructure, we continued replicating all writes back to the legacy system, ensuring we can revert any user pool to the legacy infrastructure at any point without data loss. If a rollback was needed during migration, an orchestrator replayed entries in timestamp order, syncing user profiles back to the legacy system.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Lessons learned for infrastructure modernization&lt;/h2&gt; 
&lt;p&gt;This modernization taught us valuable principles that apply to any large-scale infrastructure project, therefore we choose to share these learnings to help you perform similar migrations.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Customer access patterns drive architecture decisions&lt;/strong&gt;: Analyzing actual customer access patterns revealed that identity workloads follow predictable patterns, which meant we could adopt a synchronous dual-write approach that balanced completeness with operational simplicity. This principle applies to any domain-specific migration: understand your workload’s actual access patterns before reaching for general-purpose solutions.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Behavioral preservation requires techniques beyond traditional testing&lt;/strong&gt;: Ensuring equivalent functionality across old and new systems was straightforward. Preserving identical API behavior was not. Functional tests validate intended behaviors, but we identified scenarios where customers had built applications around specific API behaviors such that a change could have silently broken their applications. For example, concurrent writes to the same user could resolve to different final states between old and new systems where writes all succeed but outcome diverges slightly. Similarly, customers who write an attribute and immediately read it are affected by the consistency window. Subtle timing differences in when updates become visible could cause stale reads. These aren’t functional failures, but behavior under real traffic patterns can vary. Shadow mode verification surfaced edge cases that automated tests alone would have missed. Invest in these techniques early.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Gradual validation builds confidence that testing alone cannot&lt;/strong&gt;: Layer multiple independent validation techniques, such as shadow mode, dual writes, and anti-entropy scans—each covering a different access pattern. No single approach will catch everything, and the gaps between them are where production issues hide. Incremental rollout with immediate rollback capability lets you validate each step while maintaining the ability to revert quickly.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Key principles for your own modernization projects&lt;/strong&gt;: Invest in purpose-built solutions, design for extensibility, and implement gradual validation. Or use managed services so your infrastructure improves without effort on your part while your applications keep running; helping you focus on your business needs.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we shared the high-level approach and learnings from the Amazon Cognito infrastructure modernization that create a foundation for modern identity management capabilities. The new Cognito infrastructure is live, delivering capabilities such as customer-managed keys and multi-Region replication. As the migration continues, all Cognito customers will gain access to these capabilities on the same service they rely on today, with no action required.&lt;/p&gt; 
&lt;p&gt;Ready to modernize your authentication infrastructure? Visit &lt;a href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito&lt;/a&gt; to learn more.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-42275" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Howie-Li.jpg" alt="Howie Li" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Howie Li&lt;/h3&gt; 
  &lt;p&gt;Howie is a Product Manager at Amazon Web Services, where he strives to make auth easy by default. Outside of work, Howie enjoys exploring cultures and food through travels and making new ice cream flavors inspired by them.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-42033" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/01/georgibaghdasaryan.baghdasa.jpg" alt="Georgi Baghdasaryan" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Georgi Baghdasaryan&lt;/h3&gt; 
  &lt;p&gt;Georgi is a Principal Engineer at Amazon Web Services, where he builds identity systems that help organizations securely manage access and authentication at scale. His broader focus is on reliable, high-impact infrastructure that enables customers to operate confidently in the cloud. Outside of work, Georgi enjoys experimenting with new matcha latte recipes and going on long bike rides.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Gain visibility into DDoS attacks with flow logs in AWS Shield Advanced</title>
		<link>https://aws.amazon.com/blogs/security/gain-visibility-into-ddos-attacks-with-flow-logs-in-aws-shield-advanced/</link>
					
		
		<dc:creator><![CDATA[Ken Kitts]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 19:21:34 +0000</pubDate>
				<category><![CDATA[AWS Shield]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[AWS Shield Advanced]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">514ee0011c519b8ead8c0710a4c05dc4d454f9ad</guid>

					<description>Reconstructing distributed denial of service (DDoS) attack traffic used to mean combining data from multiple sources after the fact. AWS Shield Advanced attack flow logs change that—they capture traffic metadata during attacks so you can pinpoint sources, verify mitigations, and feed your existing analysis pipelines. Shield publishes logs to Amazon Simple Storage Service (Amazon S3), […]</description>
										<content:encoded>&lt;p&gt;Reconstructing distributed denial of service (DDoS) attack traffic used to mean combining data from multiple sources after the fact. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/ddos-advanced-summary.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Shield Advanced&lt;/a&gt;&lt;/span&gt; attack flow logs change that—they capture traffic metadata during attacks so you can pinpoint sources, verify mitigations, and feed your existing analysis pipelines.&lt;/p&gt; 
&lt;p&gt;Shield publishes logs to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch Logs&lt;/a&gt;&lt;/span&gt;, or &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Data Firehose&lt;/a&gt;&lt;/span&gt; using the same CloudWatch Logs delivery infrastructure as other AWS flow logs, so they fit directly into the monitoring and analysis tools you already use.&lt;/p&gt; 
&lt;p&gt;In this post, you will learn how &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/ddos-flow-logs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Shield Advanced attack flow logs&lt;/a&gt;&lt;/span&gt; capture metadata during DDoS events, what each field in a flow log entry means, and how to enable and configure flow logging for your protected resources.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;How DDoS attacks affect your applications&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;A DDoS attack floods an application with traffic, making it unavailable to users. Infrastructure-layer attacks saturate bandwidth and exhaust connection tables—you see packet loss and timeouts.&lt;/p&gt; 
&lt;p&gt;Shield Advanced is a managed DDoS protection service that detects and mitigates attacks for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudfront" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudFront&lt;/a&gt;&lt;/span&gt; distributions, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/elasticloadbalancing/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Elastic Load Balancing&lt;/a&gt;&lt;/span&gt; load balancers, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/route53" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Route 53&lt;/a&gt;&lt;/span&gt; hosted zones, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/global-accelerator" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Global Accelerator&lt;/a&gt;&lt;/span&gt; standard accelerators, and Elastic IP (EIP) addresses. See the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/ddos-advanced-summary-protected-resources.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Shield Advanced documentation&lt;/a&gt;&lt;/span&gt; for full coverage details. Initially, Shield Advanced will provide infrastructure-layer attack flow logs for EIP protections, with support for additional resource types to follow.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Key benefits&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Flow logs help you understand attacks in several ways:&lt;/p&gt; 
&lt;ul id="rte-1f8ea570-4f31-11f1-9983-4308628cc935" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Reconstruct traffic patterns&lt;/b&gt; – Query logs after an attack to analyze volume, source distribution, and protocol mix without relying only on aggregate CloudWatch metrics.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Identify attack origins &lt;/b&gt;– The &lt;code class="CodeInline" style="color: #000"&gt;srccountry&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;location&lt;/code&gt; fields show where traffic originated and which AWS edge location it entered.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Verify mitigation behavior&lt;/b&gt; – The action field records what Shield did with each flow.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Logs go to Amazon S3, CloudWatch Logs, or Data Firehose. You can then query them with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/athena/latest/ug/what-is.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Athena&lt;/a&gt;&lt;/span&gt; (a serverless query service for analyzing data in Amazon S3), route them to third-party Security Information and Event Management (SIEM) platforms or build &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudWatch Logs Insights&lt;/a&gt;&lt;/span&gt; queries (an interactive log analysis feature) without deploying new infrastructure.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;What attack flow logs capture&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Log records capture source and destination IP addresses and ports, protocol, packet and byte counts, the action Shield Advanced took, and TCP flags. They also include the AWS ingress location where traffic entered and a two-letter country code for the traffic source when available. Logs are written at 5-minute intervals and are available during an active attack and after it concludes.&lt;/p&gt; 
&lt;p&gt;The maximum file size is 75 MB. If a file reaches that limit within the 5-minute window, the file will be closed, published, and a new file will start. Flow logs support JSON, plain text, W3C, and Parquet output formats and contain the following fields:&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Field&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;protection_arn&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Amazon Resource Name (ARN) of the Shield protection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;event_timestamp&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Timestamp of log generation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;version&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Flow log version number&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;srcaddr&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Source IP address&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;dstaddr&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Destination IP address&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;srcport&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Source port&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;dstport&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Destination port&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;protocol&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;IP protocol number&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;packets&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Packet count within the aggregation window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;bytes&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Byte count within the aggregation window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;starttime&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Aggregation window start time&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;endtime&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Aggregation window end time&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;action&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Action taken by Shield&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;location&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS ingress location&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;sampling_rate&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Sampling rate used during packet processing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;tcp_flags&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;TCP flags from the packet&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;srccountry&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Two-letter country code for the traffic source&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;How to configure flow logs for Shield Advanced protected resources&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The following steps walk you through creating the CloudWatch Logs delivery resources that connect a Shield Advanced protection to your preferred log destination.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Before configuring flow logs, make sure you have:&lt;/p&gt; 
&lt;ul id="rte-800947d2-4f17-11f1-98ec-9d25e5ea47aa" class="rte2-style-ul"&gt; 
 &lt;li&gt;An active &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/enable-ddos-prem.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Shield Advanced subscription&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;At least one existing &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/ddos-choose-resources.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Shield Advanced protection&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&lt;/span&gt; permissions to create CloudWatch Logs delivery resources (&lt;code class="CodeInline" style="color: #000"&gt;logs:PutDeliverySource&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;logs:PutDeliveryDestination&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;logs:CreateDelivery&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Flow logs incur standard CloudWatch Logs vended log charges, and the destination resources (S3 bucket storage, CloudWatch Logs log group storage, or Firehose data processing) incur separate charges. Review the Vended Logs entry on the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudwatch/pricing/" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudWatch pricing page&lt;/a&gt;&lt;/span&gt; and the pricing for your chosen destination service before enabling flow logs on high-traffic resources.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;How it works&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Log delivery requires three objects:&lt;/p&gt; 
&lt;ul id="rte-1f8ecc80-4f31-11f1-9983-4308628cc935" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;DeliverySource&lt;/b&gt; – Represents the Shield Advanced protection that produces the logs&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;DeliveryDestination&lt;/b&gt; – Represents where logs should be sent (Amazon S3, CloudWatch Logs, or Amazon Data Firehose)&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Delivery&lt;/b&gt; – Connects the source to the destination&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This three-object model lets you reuse destinations across multiple sources and manage delivery pipelines independently. For example, you can send logs from multiple Shield protections to the same S3 bucket by creating multiple &lt;code class="CodeInline" style="color: #000"&gt;DeliverySource&lt;/code&gt; objects that reference the same &lt;code class="CodeInline" style="color: #000"&gt;DeliveryDestination&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Because Shield Advanced attack flow logs use the CloudWatch Logs delivery infrastructure, you can aggregate them across accounts and Regions just like other vended logs. Deliver directly to a centralized &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-S3.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;S3 bucket with a cross-account policy&lt;/a&gt;&lt;/span&gt;, replicate CloudWatch Logs log groups using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs_Centralization.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;cross-account cross-Region centralization rules&lt;/a&gt;&lt;/span&gt;, or stream to a shared Firehose stream using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CrossAccountSubscriptions.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;cross-account subscriptions&lt;/a&gt;&lt;/span&gt;. Explore these options to build a unified view of DDoS attack traffic across your multi-account, multi-Region footprint.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 1: Create your destination resource&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Choose a destination:&lt;/p&gt; 
&lt;ul id="rte-1f8ecc81-4f31-11f1-9983-4308628cc935" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Option A – S3 bucket&lt;/b&gt;: Best for long-term storage and Athena queries. See &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Creating an S3 bucket&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Option B – CloudWatch Logs log group&lt;/b&gt;: Best for real-time monitoring and CloudWatch Logs Insights. See &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group" target="_blank" rel="noopener" data-cms-ai="0"&gt;Create a log group in CloudWatch Logs&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Option C – Data Firehose delivery stream&lt;/b&gt;: Best for streaming to third-party tools and SIEMs. See &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Create a Firehose stream&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 2: Configure the destination resource policy (if needed)&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;The destination resource needs a policy that grants the CloudWatch Logs delivery service write permissions. The policy varies by destination type. For more information, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-S3.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Logs sent to Amazon S3&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-CloudWatchLogs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Logs sent to CloudWatch Logs&lt;/a&gt;&lt;/span&gt;, or &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-Firehose.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Logs sent to Firehose&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;For Amazon S3 destinations, you have two options:&lt;/p&gt; 
&lt;ul id="rte-1f8ecc82-4f31-11f1-9983-4308628cc935" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Automatic policy creation:&lt;/b&gt; If your bucket has no existing resource policy and you have the &lt;code class="CodeInline" style="color: #000"&gt;s3:GetBucketPolicy&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;s3:PutBucketPolicy&lt;/code&gt; permissions, AWS automatically creates the required policy when you create the delivery in step 6. You can skip to step 3.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Manual policy update:&lt;/b&gt; If you need to customize the policy or your organization requires pre-approved policies, create the policy manually by following the instructions for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-S3.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Logs sent to Amazon S3&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 3: Get your protection ARN&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Shield Advanced is a global service and uses the us-east-1 AWS Region for management. Run the following command to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cli/latest/reference/shield/list-protections.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;list your Shield Advanced protections&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws shield list-protections \
  --region us-east-1&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;In the output, copy the &lt;code class="CodeInline" style="color: #000"&gt;ProtectionArn&lt;/code&gt; value for the protection you want to log.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 4: Create a delivery source&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following command to create the delivery source, replace &lt;code class="CodeInline" style="color: #000"&gt;&amp;lt;protection-arn&amp;gt;&lt;/code&gt; with the &lt;code class="CodeInline" style="color: #000"&gt;ProtectionArn&lt;/code&gt; value from step 3.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs put-delivery-source \
  --name my-shield-delivery-source \
  --resource-arn &amp;lt;protection-arn&amp;gt; \
  --log-type FLOW_LOGS \
  --region us-east-1
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;The &lt;code class="CodeInline" style="color: #000"&gt;--resource-arn&lt;/code&gt; is the ARN of your Shield Advanced protection—not the protected resource itself. Shield Advanced creates a separate protection object that wraps your resource, and flow logs are generated by that protection layer rather than the underlying resource.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 5: Create a delivery destination&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following command to create the delivery destination, replace &lt;code class="CodeInline" style="color: #000"&gt;&amp;lt;resource-arn&amp;gt;&lt;/code&gt; with the ARN of the destination resource you created in step 1.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs put-delivery-destination \
  --name my-shield-delivery-destination \
  --output-format plain \
  --delivery-destination-configuration '{"destinationResourceArn":"&amp;lt;resource-arn&amp;gt;"}' \
  --region us-east-1
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;The &lt;code class="CodeInline" style="color: #000"&gt;--delivery-destination-configuration&lt;/code&gt; parameter takes a JSON object with a &lt;code class="CodeInline" style="color: #000"&gt;destinationResourceArn&lt;/code&gt; key whose value is the ARN of your S3 bucket, log group, or Firehose stream.&lt;/p&gt; 
&lt;p&gt;In the output, copy the value of the top-level ARN field—this is the delivery destination ARN (different from the bucket ARN). You will use this in step 6.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 6: Create the delivery&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following command to connect the delivery source to the delivery destination, replace &lt;code class="CodeInline" style="color: #000"&gt;&amp;lt;delivery-destination-arn&amp;gt;&lt;/code&gt; with the delivery destination ARN from step 5.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs create-delivery \
  --delivery-source-name my-shield-delivery-source \
  --delivery-destination-arn &amp;lt;delivery-destination-arn&amp;gt; \
  --region us-east-1
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 7: Verify the delivery&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Run the following command to confirm the delivery is active.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs describe-deliveries \
  --region us-east-1&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;After delivery is active, Shield Advanced publishes flow log records to your destination during DDoS events.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Clean up&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To avoid ongoing charges, delete the resources you created.&lt;/p&gt; 
&lt;ol id="rte-f298e601-554f-11f1-9d53-8b5d8abd8a51" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Delete the delivery: 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs delete-delivery \
  --id &amp;lt;delivery-id&amp;gt; \
  --region us-east-1&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Delete the delivery source: 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs delete-delivery-source \
  --name my-shield-delivery-source \
  --region us-east-1&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Delete the delivery destination: 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs delete-delivery-destination \
  --name my-shield-delivery-destination \
  --region us-east-1&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;(Optional) Back up flow log data if you need to retain logs for compliance or analysis.&lt;/li&gt; 
 &lt;li&gt;Delete the destination resource. &lt;b&gt;Warning:&lt;/b&gt; Deleting the destination resource will permanently delete all flow log data. &lt;p&gt;For an S3 bucket:&lt;/p&gt; 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws s3 rb s3://&amp;lt;bucket-name&amp;gt; \
  --force \
  --region &amp;lt;region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;p&gt;For a CloudWatch Logs log group:&lt;/p&gt; 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws logs delete-log-group \
  --log-group-name &amp;lt;log-group-name&amp;gt; \
  --region &amp;lt;region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;p&gt;For a Firehose stream:&lt;/p&gt; 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws firehose delete-delivery-stream \
  --delivery-stream-name &amp;lt;stream-name&amp;gt; \
  --region &amp;lt;region&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Shield Advanced attack flow logs provide the visibility you need to understand and respond to DDoS attacks effectively. By integrating with your existing observability infrastructure, they deliver actionable insights without requiring new tooling or complex setup. Enable flow logs on your Shield Advanced protections today to gain immediate visibility into attack patterns and strengthen your DDoS defense posture.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Next steps:&lt;/h2&gt; 
&lt;/div&gt; 
&lt;ul id="rte-8fe16aa0-5577-11f1-9d53-8b5d8abd8a51" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Build an Athena table to query logs in Amazon S3&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Interactively search and analyze your log data in Amazon CloudWatch Logs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-Alarms.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Create CloudWatch alarms on attack patterns&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For the full reference about flow log configuration, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/waf/latest/developerguide/ddos-advanced-summary.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Shield Advanced documentation&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/04/Ken-Kitts.jpg" alt="Ken Kitts" width="120" height="160" class="aligncenter size-full wp-image-42521"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ken Kitts&lt;/h3&gt; 
  &lt;p&gt;Ken is a Technical Account Manager at Amazon Web Services (AWS) with over 20 years of experience in computer networking, including software-defined networking in the financial technology sector. Outside of work, Ken is an avid traveler who enjoys exploring archaeological sites and museums, with Teotihuacan in Mexico as a favorite.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Customize federated sign-in with new Amazon Cognito Lambda trigger</title>
		<link>https://aws.amazon.com/blogs/security/customize-federated-sign-in-with-new-amazon-cognito-lambda-trigger/</link>
					
		
		<dc:creator><![CDATA[Abrom Douglas]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 15:49:15 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon Cognito]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">b494098b1dabf44589d40845f34b3700f303809a</guid>

					<description>You can use Amazon Cognito user pools to add sign-up and sign-in functionality to your web and mobile applications. You can authenticate users directly with Amazon Cognito managed accounts using passwords, passwordless flows, or custom authentication flows, or let users federate in through external identity providers (IdP) using SAML, OpenID Connect, or social providers such […]</description>
										<content:encoded>&lt;p&gt;You can use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Cognito&lt;/a&gt;&lt;/span&gt; user pools to add sign-up and sign-in functionality to your web and mobile applications. You can authenticate users directly with Amazon Cognito managed accounts using passwords, passwordless flows, or custom authentication flows, or let users federate in through external identity providers (IdP) using SAML, OpenID Connect, or social providers such as Google, Facebook, Sign in with Apple, or Login with Amazon. For consumers, identity federation means fewer passwords to remember and a smoother sign-in experience. For business-to-business (B2B) software as a service (SaaS) providers, it means your tenants’ organizations keep control of their own identities rather than managing credentials on their behalf. But federation can also introduce challenges for enterprises and application developers. What happens when your enterprise customer’s SAML provider sends hundreds of group memberships that exceed attribute size limits? Or when your ecommerce customer forgets they already have an account and tries to sign in with a different social provider, creating duplicate records?&lt;/p&gt; 
&lt;p&gt;In this blog post, I introduce the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/about-aws/whats-new/2026/01/amazon-cognito-inbound-federation-lambda-trigger/" target="_blank" rel="noopener" data-cms-ai="0"&gt;inbound federation Lambda trigger&lt;/a&gt;&lt;/span&gt; for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Cognito&lt;/a&gt;&lt;/span&gt;, a new feature that gives you programmatic control over federated authentication flows. This &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/lambda" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Lambda&lt;/a&gt;&lt;/span&gt; trigger intercepts the federated authentication response immediately after your external identity provider responds to Cognito, so you can transform, filter, and enrich user attributes before the user profile is created and user attributes are mapped in your user pool.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Understanding the inbound federation Lambda trigger&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The inbound federation Lambda trigger is invoked after your Amazon Cognito user pool has received and verified the response from the external IdP. The request payload for the federated IdP response is then sent from Cognito to your Lambda function and you will receive the following information:&lt;/p&gt; 
&lt;ul id="rte-82b48de2-3e51-11f1-81ca-31414339fb0c" class="rte2-style-ul"&gt; 
 &lt;li&gt;The &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared" target="_blank" rel="noopener" data-cms-ai="0"&gt;common parameters&lt;/a&gt;&lt;/span&gt; of Amazon Cognito Lambda triggers (including &lt;code class="CodeInline" style="color: #000"&gt;userPoolId&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;clientId)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Which external IdP was used (for example, &lt;code class="CodeInline" style="color: #000"&gt;providerName&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;The &lt;code class="CodeInline" style="color: #000"&gt;providerType&lt;/code&gt; (SAML, OIDC, Login with Amazon, and so on)&lt;/li&gt; 
 &lt;li&gt;Attribute data from the external IdP specific to the user signing in&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The specific format of this attribute data depends on the provider type, view the Inbound federation Lambda trigger &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-inbound-federation.html#cognito-user-pools-lambda-trigger-syntax-inbound-federation" target="_blank" rel="noopener" data-cms-ai="0"&gt;parameters section&lt;/a&gt;&lt;/span&gt; in the docs to learn more. If the external IdP is a SAML provider, you will receive a JSON key-pair listing of the user’s attributes from the IdP assertion. If the external IdP is an OIDC provider (or social provider), you will receive the access token and attribute data from the &lt;code class="CodeInline" style="color: #000"&gt;/userinfo&lt;/code&gt; endpoint, along with an ID token if one was provided. See Figure 1 for a detailed flow of a federated sign-in with an Amazon Cognito user pool configured to use the inbound federation Lambda trigger.&lt;/p&gt; 
&lt;div id="attachment_42429" style="width: 1610px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42429" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/figure1v3.png" alt="Figure 1: Sequence flow of a federated login configured with the inbound federation Lambda trigger" width="1600" height="1566" class="size-full wp-image-42429"&gt;
 &lt;p id="caption-attachment-42429" class="wp-caption-text"&gt;Figure 1: Sequence flow of a federated login configured with the inbound federation Lambda trigger&lt;/p&gt;
&lt;/div&gt; 
&lt;ol id="rte-4e82d200-3e53-11f1-81ca-31414339fb0c" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;The user begins using the application but is required to sign in first.&lt;/li&gt; 
 &lt;li&gt;The managed login is rendered, and the user can select which IdP they want to sign in with. If &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managing-saml-idp-naming.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;identifiers&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; are used with SAML or OIDC providers, the user enters their email address and Amazon Cognito looks up the domain of their provided email and routes them to the appropriate IdP.&lt;/li&gt; 
 &lt;li&gt;Alternatively, the managed login can be bypassed by the client providing the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html#get-authorize" target="_blank" rel="noopener" data-cms-ai="0"&gt;identity_provider&lt;/a&gt;&lt;/span&gt; request parameter.&lt;/li&gt; 
 &lt;li&gt;Amazon Cognito sends the authentication request to the appropriate IdP.&lt;/li&gt; 
 &lt;li&gt;The external IdP challenges the user to sign in.&lt;/li&gt; 
 &lt;li&gt;The user completes the sign-in process required by the external identity provider.&lt;/li&gt; 
 &lt;li&gt;The challenge response is sent to the external IdP.&lt;/li&gt; 
 &lt;li&gt;The IdP verifies that the sign-in is successful. If there are any subsequent challenges, such as multi-factor authentication (MFA), additional rounds of authentication challenges and responses take place. This is determined by the configuration and settings of the external IdP.&lt;/li&gt; 
 &lt;li&gt;The external IdP sends a response to the Amazon Cognito user pool, and Cognito validates the cryptographic signature and that it hasn’t been tampered with.&lt;/li&gt; 
 &lt;li&gt;Amazon Cognito sends attribute data from the IdP to the inbound federation Lambda function&lt;/li&gt; 
 &lt;li&gt;Attribute data for the authenticated user and the common parameters for Amazon Cognito are available for the Lambda function to add, modify, or suppress according to your requirements.&lt;/li&gt; 
 &lt;li&gt;Your added, modified, or suppressed attributes are returned to Amazon Cognito. These are attribute values that map to the user’s profile in Cognito—whether the user profile was just created or is being updated for a returning user.&lt;/li&gt; 
 &lt;li&gt;Continuing the OAuth 2.0 authorization code grant, Amazon Cognito sends an authorization code to the client.&lt;/li&gt; 
 &lt;li&gt;The client then calls the &lt;code class="CodeInline" style="color: #000"&gt;/token&lt;/code&gt; endpoint with the authorization code.&lt;br&gt; &lt;b&gt;Note: &lt;/b&gt;It’s a security best practice to use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-security-best-practices.html#user-pool-security-best-practices-client-secret" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;confidential clients&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; and to use OAuth 2.0 &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/using-pkce-in-authorization-code.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Proof Key for Code Exchange (PKCE)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; extension whenever possible.&lt;/li&gt; 
 &lt;li&gt;An access, ID, and refresh token is returned to the client.&lt;/li&gt; 
 &lt;li&gt;The user has signed into the application. ID tokens can be used to identify who the user is (authentication), and access tokens can be used to determine what the user can do (authorization).&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Common federation challenges and use cases&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Federation introduces complexity that varies depending on your use case. For B2B and SaaS applications, you’re often not in control of your customers’ IdPs, including what attributes they send or how they format them. As an example, an enterprise customer will configure their SAML response to include every group a user belongs to. This could be hundreds of groups or long group identifiers, and if the group membership of the user is mapped to an Amazon Cognito attribute, this can lead to a scenario where the Cognito attribute size limit is exceeded, causing federated sign-ins to fail.&lt;/p&gt; 
&lt;p&gt;Challenges for business-to-customer (B2C) applications can differ from B2B use cases. For B2C applications, organizations shouldn’t be required to think about identity providers. The ability to sign-up and sign-in should be seamless for consumer-facing applications. Customers visiting a consumer-facing application might create an account with email and password, forget they created created it, and then later try signing in with Facebook (or other social provider). Without proper account linking in Amazon Cognito, you then have multiple user records for the same user, which could lead to fragmented purchase history and a frustrating customer experience.&lt;/p&gt; 
&lt;p&gt;Both B2B and B2C use cases might need to look up external data just prior to completing the sign-in process, such as additional roles and access for B2B users or looking up active orders for B2C users. Another example could be the need to normalize data just prior to storing it in the user profile within the Amazon Cognito user pool or even discarding personally identifiable information (PII) prior to storing it in your Cognito user pool.&lt;/p&gt; 
&lt;p&gt;With the inbound federation Lambda trigger, you can handle these B2B and B2C use cases programmatically, and do so without requiring modification of your applications or coordinating IdP-specific changes with external IdPs. In this section, I dive deeper into two common use cases: oversized group attributes, common with B2B customers, and automated account linking, common with B2C customers.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Use case 1: Filtering oversized group attributes&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;If you have B2B and SaaS use cases, it’s a common practice to use group membership from the IdP to determine the level of access you have within the SaaS service. This is a great way to still provide some access control back to the enterprise customers themselves. The groups can be used to represent the roles a user will have or for some form of coarse-grained authorization. However, your customers might inadvertently send a large number of groups a user is a member of, thus leading to an oversized attribute payload.&lt;/p&gt; 
&lt;p&gt;Another common scenario is where the syntax and format of group name a user belongs to can arrive in various formats across different IdPs; such as a canonical name (for example, &lt;code class="CodeInline" style="color: #000"&gt;example.com/groups/myApp-readOnly&lt;/code&gt;), a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://datatracker.ietf.org/doc/html/rfc4514" target="_blank" rel="noopener" data-cms-ai="0"&gt;distinguished name&lt;/a&gt;&lt;/span&gt; (common with LDAP based systems and such as &lt;code class="CodeInline" style="color: #000"&gt;cn=myApp-readOnly,OU=groups,DC=example,DC=com&lt;/code&gt;), or a plain text string (such as &lt;code class="CodeInline" style="color: #000"&gt;myApp-readOnly&lt;/code&gt;). Instead of having downstream authorization logic to accommodate different variations of a group name, you can now normalize how groups are represented prior to storing the user’s attribute data using the inbound federation Lambda trigger.&lt;/p&gt; 
&lt;p&gt;To expand this, imagine your enterprise customer uses a SAML IdP, such as Active Directory Federation Services (AD FS), in front of Active Directory (AD). When their users authenticate, AD FS sends a &lt;code class="CodeInline" style="color: #000"&gt;groups&lt;/code&gt; attribute containing every AD group the user belongs to. For users in large organizations, this can be hundreds of groups, and the attribute is mapped to an Amazon Cognito attribute, this could result in a string that exceeds 2,048-character limit per attribute of Cognito. Authentication would fail in this scenario, ultimately leading to support tickets because enterprise customers would be unable to sign in. Even if certain users didn’t exceed this limit, because of a smaller number of group memberships, this would result in the collection and storing of unnecessary data in your Cognito user pool.&lt;/p&gt; 
&lt;p&gt;Previously, you would need to work with your customer’s IT department to modify their SAML configuration to filter groups at the source—a process that could take weeks and require multiple approval cycles because it involves a change to the federation configuration. Especially for SaaS customers, this isn’t a scalable approach because you could integrate with hundreds of external IdPs. With the inbound federation Lambda trigger, you can solve this by filtering the groups to only those relevant to your application and normalizing the nomenclature of these groups. The following Lambda function filters the groups attribute to include only groups relevant to your application and normalizes the names of groups.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;// Configure the group prefix to filter on (e.g. "App1-", "myApp-", etc.)
// Change this to match the prefix your IdP uses for relevant group names.
const GROUP_PREFIX = process.env.GROUP_PREFIX || 'myApp-';

// The SAML attribute/claim name that contains group membership.
// Common values: "groups", "memberOf", "http://schemas.xmlsoap.org/claims/Group", etc.
const GROUP_ATTRIBUTE = process.env.GROUP_ATTRIBUTE || 'groups';

/**
 * Extracts the short group name from common IdP formats:
 *   - Plain text:       "myApp-readOnly"
 *   - Leading slash:    "/myApp-readOnly"
 *   - Canonical/URL:    "example.com/groups/myApp-readOnly"
 *   - Distinguished name (DN): "cn=myApp-readOnly,OU=groups,DC=example,DC=com"
 * Returns the last meaningful segment so all formats normalize to "myApp-readOnly".
 */

function extractGroupName(raw) {
  let name = raw.trim();

  // Some IdPs prefix group names with "/" to indicate a top level group — strip it before format detection
  if (name.startsWith('/')) {
    name = name.substring(1);
  }

  // DN format — extract the CN (common name) value
  if (/^cn=/i.test(name) || /,\s*(ou|dc)=/i.test(name)) {
    const cnMatch = name.match(/^cn=([^,]+)/i);
    return cnMatch ? cnMatch[1].trim() : name;
  }

  // URL / path format — take the last segment after the final "/"
  if (name.includes('/')) {
    const segments = name.split('/').filter(Boolean);
    return segments[segments.length - 1];
  }

  return name;
}
export const handler = async (event) =&amp;gt; {
  try {
    console.log('Full event:', JSON.stringify(event, null, 2));
    console.log('Provider type:', event.request?.providerType);

    // Initialize the response structure
    event.response = event.response || {};

    if (event.request?.providerType?.toLowerCase() === "saml") {
      const samlResponse = event.request.attributes?.samlResponse;

      if (samlResponse) {
        console.log('Original SAML Attributes:', JSON.stringify(samlResponse, null, 2));

        // Build the attribute map — you MUST include every attribute you want Cognito to retain. Anything omitted from userAttributesToMap is dropped.
        const mappedAttributes = {};

        Object.keys(samlResponse).forEach(key =&amp;gt; {
          if (key === GROUP_ATTRIBUTE) {
            // Parse the groups JSON string from the SAML assertion
            let groupsArray = [];
            try {
              groupsArray = JSON.parse(samlResponse[GROUP_ATTRIBUTE]);
            } catch (error) {
              console.error(`Error parsing ${GROUP_ATTRIBUTE}:`, error);
            }

            // Normalize each group name, then filter to the configured prefix
            const normalizedGroups = groupsArray.map(extractGroupName);
            const filteredGroups = normalizedGroups.filter(group =&amp;gt;
              group.startsWith(GROUP_PREFIX)
            );

            console.log(`Original ${GROUP_ATTRIBUTE}:`, groupsArray);
            console.log(`Normalized ${GROUP_ATTRIBUTE}:`, normalizedGroups);
            console.log(`Filtered ${GROUP_ATTRIBUTE}:`, filteredGroups);

            // Only include the groups attribute if there are matching groups
            if (filteredGroups.length &amp;gt; 0) {
              mappedAttributes[GROUP_ATTRIBUTE] = filteredGroups.map(group =&amp;gt; `'${group}'`).join(', ');
            }
          } else {
            // Pass all other SAML attributes through unchanged
            mappedAttributes[key] = samlResponse[key];
          }
        });

        event.response.userAttributesToMap = mappedAttributes;
        console.log('Response to Cognito:', JSON.stringify(event.response, null, 2));
      }
    }

    // For any unhandled provider type (or missing samlResponse), this intentionally does NOT set userAttributesToMap and tells Cognito to keep all original IdP attributes unchanged (no-op).

    // To handle OIDC or social providers, add additional logic here using event.request.attributes.idToken, .userInfo, and/or .tokenResponse.

    return event;
  } catch (error) {
    console.error('Error in Lambda:', error);
    throw error;
  }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;This approach reduces a large group list to only what is applicable to your application. Authentication succeeds, and you maintain control over your user pool’s data without depending on external configuration changes.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Use case 2: Automatic account linking&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;The second use case addresses a challenge that’s particularly common in B2C facing ecommerce or any consumer-facing applications; although it can also be applicable to B2B scenarios. Imagine you’re running an online retail store. A customer creates an account with their email and password to make a purchase. A few months later, they return to your site but forgot they already created an account and they see the &lt;i&gt;Login with Amazon&lt;/i&gt; button and decide to sign in this way. Without account linking, Amazon Cognito creates a new federated user because these are technically distinct accounts, and now this customer has two separate accounts with different purchase histories and saved preferences.&lt;/p&gt; 
&lt;p&gt;This fragmentation creates a poor customer experience and complicates your business operations. You can’t see the customer’s complete purchase history, loyalty points are split across accounts, and your analytics show two distinct customers instead of one.&lt;/p&gt; 
&lt;p&gt;The inbound federation Lambda trigger can be used to solve this by automatically linking federated identities to existing local accounts based on email address. While account linking can also be implemented in a pre-sign-up Lambda trigger, the inbound federation trigger runs on every federated sign-in, not just the first, giving you access to the latest IdP attributes and the ability to apply linking logic continuously rather than only at initial account creation. If no local Amazon Cognito account exists, you can create one and then link the social provider account to it. The local account can serve as the primary identity, ensuring consistent JSON Web Tokens (JWTs) regardless of how the user signs in. The following is an example of an inbound federation Lambda trigger that can help address this use case.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;import { 
  CognitoIdentityProviderClient, 
  ListUsersCommand,
  AdminCreateUserCommand,
  AdminLinkProviderForUserCommand
} from "@aws-sdk/client-cognito-identity-provider";

const client = new CognitoIdentityProviderClient();

export const handler = async (event) =&amp;gt; {
  try {
    console.log('Full event:', JSON.stringify(event, null, 2));
    
    const { userPoolId, request, userName } = event;
    const { providerName, providerType, attributes } = request;
    
    // Extract email and profile attributes based on provider type
    const { email, givenName, surname } = extractAttributes(providerType, attributes);
    
    if (!email) {
      console.error('No email found in federated response');
      return event;
    }
    
    console.log(`Processing federated login for email: ${email}, provider: ${providerName} (${providerType})`);
    
    // Check if a local user exists with this email
    const existingUser = await findLocalUserByEmail(userPoolId, email);
    
    if (existingUser) {
      console.log(`Found existing local user: ${existingUser.Username}`);
      if (isAlreadyLinked(existingUser, providerName, userName)) {
        console.log(`Federated identity ${providerName}:${userName} is already linked to ${existingUser.Username}, skipping link`);
      } else {
        await linkFederatedUser(userPoolId, existingUser.Username, providerName, userName);
      }
    } else {
      console.log('No existing local user found, creating new one');
      const newUsername = await createLocalUser(userPoolId, email, givenName, surname);
      await linkFederatedUser(userPoolId, newUsername, providerName, userName);
    }
    
    return event;
    
  } catch (error) {
    console.error('Error in account linking Lambda:', error);
    throw error;
  }
};


/**
 * Check if the federated identity is already linked to the local user by inspecting the identities attribute from the ListUsers response.
 */
function isAlreadyLinked(user, providerName, federatedUsername) {
  const identities = user.Attributes?.find(a =&amp;gt; a.Name === 'identities');
  if (!identities?.Value) return false;

  try {
    const parsed = JSON.parse(identities.Value);
    return parsed.some(id =&amp;gt; id.providerName === providerName &amp;amp;&amp;amp; id.userId === federatedUsername);
  } catch {
    return false;
  }
}

/**
 * Extract email and profile attributes based on provider type.
 * - SAML: attributes come from samlResponse
 * - OIDC/Social: attributes come from userInfo, falling back to idToken (if one exists)
 */
function extractAttributes(providerType, attributes) {
  if (providerType?.toLowerCase() === 'saml') {
    const saml = attributes?.samlResponse;
    return {
      email: saml?.email || null,
      givenName: saml?.givenName || '',
      surname: saml?.surname || ''
    };
  }

  // OIDC and social providers: prefer userInfo, fall back to idToken
  const userInfo = attributes?.userInfo;
  const idToken = attributes?.idToken;

  const source = userInfo?.email ? userInfo : idToken;

  return {
    email: source?.email || null,
    givenName: source?.given_name || '',
    surname: source?.family_name || ''
  };
}

/**
 * Find a local Cognito user (not EXTERNAL_PROVIDER) by email address.
 */
async function findLocalUserByEmail(userPoolId, email) {
  try {
    const command = new ListUsersCommand({
      UserPoolId: userPoolId,
      Filter: `email = "${email}"`
    });
    
    const response = await client.send(command);
    console.log('ListUsers response:', JSON.stringify(response, null, 2));
    
    if (!response.Users || response.Users.length === 0) {
      return null;
    }

    // Find the first user that is a true local account (not a federated-only profile)
    const localUser = response.Users.find(u =&amp;gt; u.UserStatus !== 'EXTERNAL_PROVIDER');
    return localUser || null;
  } catch (error) {
    console.error('Error finding user by email:', error);
    throw error;
  }
}

/**
 * Create a new local Cognito user without a password.
 * With passwordless (email OTP) enabled on the user pool, the user is created with UserStatus=CONFIRMED and no FORCE_CHANGE_PASSWORD state.
 */
async function createLocalUser(userPoolId, email, givenName, surname) {
  try {
    const userAttributes = [
      { Name: 'email', Value: email }
    ];

    if (givenName) userAttributes.push({ Name: 'given_name', Value: givenName });
    if (surname) userAttributes.push({ Name: 'family_name', Value: surname });

    const command = new AdminCreateUserCommand({
      UserPoolId: userPoolId,
      Username: email,
      UserAttributes: userAttributes,
      MessageAction: 'SUPPRESS'
    });
    
    const response = await client.send(command);
    console.log(`Created local user: ${email}`, JSON.stringify(response, null, 2));
    
    return email;
  } catch (error) {
    console.error('Error creating local user:', error);
    throw error;
  }
}

/**
 * Link a federated user identity to a local Cognito user.
 * The local user becomes the primary profile — all future JWTs will represent this local user regardless of sign-in method.
 */
async function linkFederatedUser(userPoolId, localUsername, providerName, federatedUsername) {
  try {
    const command = new AdminLinkProviderForUserCommand({
      UserPoolId: userPoolId,
      DestinationUser: {
        ProviderName: 'Cognito',
        ProviderAttributeValue: localUsername
      },
      SourceUser: {
        ProviderName: providerName,
        ProviderAttributeName: 'Cognito_Subject',
        ProviderAttributeValue: federatedUsername
      }
    });
    
    const response = await client.send(command);
    console.log(`Linked federated user ${federatedUsername} to local user ${localUsername}`);
    console.log('Link response:', JSON.stringify(response, null, 2));
    
    return response;
  } catch (error) {
    if (error.name === 'AliasExistsException' || error.message?.includes('already linked')) {
      console.log(`User already linked: ${error.message}`);
      return;
    }
    console.error('Error linking federated user:', error);
    throw error;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Every federated sign-in will invoke the inbound federation Lambda trigger, and the logic is straightforward. When a user authenticates with an external identity provider, the trigger extracts their email from the federated response and searches the user pool for a local Cognito account with that same email. If one exists—such as if the user originally signed up with email and password—the Lambda function links the federated identity to that existing local account. If no local account exists, the trigger creates one on the fly as a passwordless account (confirmed, suppressing any emails, and ready for passwordless email one-time passcode (OTP) sign-in), then links the federated identity to it. In both cases, the local account is set as the primary profile. This means the user’s JWTs always carry the same sub-claim regardless of how they sign in—directly, or through Google, Facebook, or SAML—your application sees one consistent identity. The preceding Lambda trigger is also smart enough to check whether a linked account already exists before making the call, so returning users who’ve already been linked don’t generate unnecessary API calls. And because the local account supports passwordless authentication, a user who first arrived through federation can later sign in directly with an emailed OTP—or even add a password later through your applications account settings. The local account is always the anchor.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Best practices&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;As you implement these patterns, keep a few best practices in mind. Your Lambda function must be completed within 5 seconds, so optimize for speed to help ensure the federated sign-in process is able to successfully complete. If you’re making external calls within the inbound federation Lambda function, like &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/dynamodb" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon DynamoDB&lt;/a&gt;&lt;/span&gt; queries or API requests, implement caching where possible. Handle errors gracefully—if your Lambda function throws an exception or an error, authentication could fail for the user. Consider logging the error and returning the original event back to Amazon Cognito rather than failing authentication for a legitimate user attempting to sign in. Here are some additional best practices for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;working with Lambda functions&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;For the account linking use case, automatic linking relies on matching the email from the federated identity to a local account. However, there are scenarios where this match won’t exist. For example, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://support.apple.com/en-us/105078" target="_blank" rel="noopener" data-cms-ai="0"&gt;Apple’s Hide My Email&lt;/a&gt;&lt;/span&gt; feature generates a unique alias for each app, so the federated email won’t match any existing local account. This is an effective privacy feature but it also blocks the ability to automatically link accounts. In cases like these, your application will need to implement a user-initiated account linking flow, such as prompting the user to verify ownership of both email addresses before calling the &lt;code class="CodeInline" style="color: #000"&gt;AdminLinkProviderForUser&lt;/code&gt; API to complete the link.&lt;/p&gt; 
&lt;p&gt;Monitor your Lambda function performance using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch metrics&lt;/a&gt;&lt;/span&gt;. Set up alarms for errors, timeouts, and throttling so you can respond quickly if issues arise. I also recommend capturing sample event payloads from a &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudWatch log group&lt;/a&gt;&lt;/span&gt; during your initial development and deployment—these will be valuable for local testing and debugging which can lead to quicker resolution if issues arise in your production environment. This is especially important as different IdPs (namely SAML and OIDC providers) may respond with varying attribute and value syntaxes. Consider implementing &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Alarms.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudWatch alarms&lt;/a&gt;&lt;/span&gt; to alert your security and operational teams if authentication failures spike, which could indicate an attempted attack, misconfiguration, or provide insight into further optimization of your inbound federation Lambda trigger.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;In this post, you learned about the new inbound federation Lambda trigger for Amazon Cognito and how it can solve various use cases. You walked through two common federation challenges and reviewed some sample code to help resolve those challenges. For B2B and SaaS applications, the inbound federation Lambda trigger gives you control when dealing with oversized attributes from external identity providers (such as group membership) without requiring coordination with enterprise IT teams. For B2C and consumer-facing applications, it enables seamless account linking across multiple authentication methods, creating a unified customer experience.&lt;/p&gt; 
&lt;p&gt;The new Lambda trigger works with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-saml-idp.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SAML&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;OIDC&lt;/a&gt;&lt;/span&gt;, and supported &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-social-idp.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;social providers&lt;/a&gt;&lt;/span&gt;, and is available now in AWS Regions where Amazon Cognito is available. To learn more about the new Lambda trigger and others, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cognito/latest/developerguide/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Cognito Developer Guide&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;What federation challenges are you facing in your applications? I’d love to hear about your use cases in the comments below and over at &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://repost.aws/tags/TAkhAE7QaGSoKZwd6utGhGDA/amazon-cognito" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS re:Post&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/abrom-headshot.jpg" alt="Abrom-Douglas-author" width="500" height="600" class="aligncenter size-full wp-image-38911"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Abrom Douglas&lt;/h3&gt; 
  &lt;p&gt;Abrom is a Senior Solutions Architect within AWS Identity with over 20 years of software engineering and security experience, specializing in the identity and access management space. He loves speaking with customers about how identity and access management can provide secure outcomes that enable both business and technology initiatives. In his free time, he enjoys cheering for Arsenal FC, photography, travel, volunteering, and competing in duathlons. &lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Identify unused AWS KMS keys and prevent accidental key deletions</title>
		<link>https://aws.amazon.com/blogs/security/identify-unused-aws-kms-keys-and-prevent-accidental-key-deletions/</link>
					
		
		<dc:creator><![CDATA[Andrea Rossi]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 19:01:54 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[AWS Key Management Service]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Cloud Cost Optimization]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[AWS KMS]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">a7aaf95f4215db113508774715fb63a504f27162</guid>

					<description>As you scale your use of Amazon Web Services (AWS), managing KMS keys becomes increasingly important. Whether you manage a handful of keys or thousands across multiple AWS accounts and AWS Regions, there’s often a need to audit key usage to help you meet compliance requirements, evaluate your risk posture, and optimize key management costs. […]</description>
										<content:encoded>&lt;p&gt;As you scale your use of &lt;a href="https://aws.amazon.com" target="_blank" rel="noopener noreferrer"&gt;Amazon Web Services (AWS)&lt;/a&gt;, managing KMS keys becomes increasingly important. Whether you manage a handful of keys or thousands across multiple AWS accounts and AWS Regions, there’s often a need to audit key usage to help you meet compliance requirements, evaluate your risk posture, and optimize key management costs. However, determining which keys are actively in use and which have been sitting idle can be a time consuming and complex task.&lt;/p&gt; 
&lt;p&gt;To help with this, &lt;a href="https://aws.amazon.com/kms" target="_blank" rel="noopener noreferrer"&gt;AWS Key Management Service (AWS KMS)&lt;/a&gt; has launched the &lt;code style="color: #000000"&gt;GetKeyLastUsage&lt;/code&gt; API, a new feature that you can use to quickly determine when each key was last used for a cryptographic operation, significantly enhancing your audit capabilities and key lifecycle management. For more information, see &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-keys-determining-usage.html" target="_blank" rel="noopener noreferrer"&gt;Determine past usage of a KMS key&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Before this launch, the primary way to audit key usage was through &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html" target="_blank" rel="noopener noreferrer"&gt;AWS CloudTrail logs&lt;/a&gt;. CloudTrail captures every cryptographic operation by default, so the data is available. The difficulty is turning that data into actionable insight. You need to identify which keys to examine, query the right logs, and repeat that process frequently enough to maintain an accurate view. For the most recent 90 days, CloudTrail event history makes this manageable. Beyond that, you need to create a dedicated trail to deliver logs to &lt;a href="https://aws.amazon.com/s3" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt; for long-term retention, then query those logs using tools such as &lt;a href="https://aws.amazon.com/athena" target="_blank" rel="noopener noreferrer"&gt;Amazon Athena&lt;/a&gt; to determine when a key was last used.&lt;/p&gt; 
&lt;h2&gt;Determine when a key was last used&lt;/h2&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/kms" target="_blank" rel="noopener noreferrer"&gt;AWS KMS&lt;/a&gt; now provides a direct way to see when a key was last used for cryptographic operations. You can also see this information using the AWS Management Console for AWS KMS and the &lt;a href="https://aws.amazon.com/cli" target="_blank" rel="noopener noreferrer"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;code style="color: #000000"&gt;GetKeyLastUsage&lt;/code&gt; API returns the date and time of the most recent cryptographic operation performed with a KMS key, without requiring you to search through CloudTrail logs. The API returns the date and time of the last key operation, the type of operation performed, CloudTrail event ID, and KMS request ID. You can access this information for all customer-managed keys and AWS managed keys irrespective of key spec, key origin, key store, or key usage type.&lt;/p&gt; 
&lt;p&gt;In addition, you can restrict a key from being disabled or scheduled for deletion if it was recently used, by incorporating this usage information as a condition within the KMS key policy. See the &lt;strong&gt;Preventing accidental key deletion with policy controls&lt;/strong&gt; section for implementation details.&lt;/p&gt; 
&lt;h2&gt;About the tracking period&lt;/h2&gt; 
&lt;p&gt;One of the important concepts you must understand before relying on the last usage information reported on a KMS key is the tracking period. The tracking period is the date from which AWS KMS began tracking cryptographic activity for the key. Tracking began on April 23, 2026, for most AWS Regions. Understanding the tracking period is critical because it determines whether the absence of usage information means a key has never been used or only hasn’t been used since tracking started.&lt;/p&gt; 
&lt;p&gt;For example, if you have a key created on January 1, 2026, and you check its usage, any cryptographic operations that occurred between January 1 and April 22 wouldn’t be captured in the usage information. Thus, you can’t conclude that it’s never been used, because it might have been used in the months before tracking began.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;There’s nothing to enable or additional configuration required to view usage information on last cryptographic operation performed on your KMS keys.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To view KMS key usage: &lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Go to the &lt;a href="https://console.aws.amazon.com/kms" target="_blank" rel="noopener noreferrer"&gt;AWS KMS&lt;/a&gt; console and choose &lt;strong&gt;Customer-managed keys&lt;/strong&gt; in the navigation pane and select a key. Look for &lt;strong&gt;Last used&lt;/strong&gt; on the general configuration.&lt;br&gt; 
  &lt;div id="attachment_42442" style="width: 1512px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42442" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/image1-4.png" alt="Figure 1: KMS key general configuration page" width="1502" height="647" class="size-full wp-image-42442" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42442" class="wp-caption-text"&gt;Figure 1: KMS key general configuration page&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Choose the link under &lt;strong&gt;Last used &lt;/strong&gt;to see additional details such as &lt;strong&gt;Timestamp&lt;/strong&gt;, &lt;strong&gt;Operation&lt;/strong&gt;, and the &lt;strong&gt;CloudTrail event ID&lt;/strong&gt;. 
  &lt;div id="attachment_42443" style="width: 1560px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42443" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/image2-6.png" alt="Figure 2: View last used details including timestamp, operation, and event ID" width="1550" height="668" class="size-full wp-image-42443" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42443" class="wp-caption-text"&gt;Figure 2: View last used details including timestamp, operation, and event ID&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;The &lt;strong&gt;Last used&lt;/strong&gt; column is also shown when you attempt to schedule key deletion, so that you can make informed decisions.&lt;br&gt; 
  &lt;div id="attachment_42444" style="width: 3022px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42444" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/image3-2.png" alt="Figure 3: Scheduled key deletion warning" width="3012" height="1498" class="size-full wp-image-42444" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42444" class="wp-caption-text"&gt;Figure 3: Scheduled key deletion warning&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;API reference&lt;/h2&gt; 
&lt;p&gt;See the following examples for ideas on how to use the &lt;a href="https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyLastUsage.html" target="_blank" rel="noopener noreferrer"&gt;GetKeyLastUsage API&lt;/a&gt; to better understand KMS key usage.&lt;/p&gt; 
&lt;h3&gt;Use case 1: Cost optimization through unused key cleanup&lt;/h3&gt; 
&lt;p&gt;If you manage thousands of AWS KMS keys distributed across multiple AWS accounts, you might have keys that have remained unused since creation or keys that are no longer needed. By cleaning up these keys, you can reduce operational costs and minimize your security footprint. However, without visibility into which keys are actively performing cryptographic operations, it can be difficult to distinguish between keys protecting critical workloads and those that can be safely decommissioned.&lt;/p&gt; 
&lt;p&gt;Note that there are some precautions that you should take before scheduling key deletion. While the last usage information can help identify unused keys, it shouldn’t be the only factor in deciding whether to delete or disable a key. The last usage information tells you when a key was last used, not whether it will be needed in the future. A key might be unused for months but still required to decrypt files, for compliance scenarios or disaster recovery as shown in figure 4.&lt;/p&gt; 
&lt;p&gt;When you identify a potentially unused key, first disable it using &lt;a href="https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html" target="_blank" rel="noopener noreferrer"&gt;DisableKey&lt;/a&gt; and monitor your applications and services for any encryption or decryption failures.&lt;/p&gt; 
&lt;div id="attachment_42445" style="width: 1211px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42445" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/image4-2.png" alt="Figure 4: A use case where GetKeyLastUsage doesn’t accurately reflect whether a KMS key is still required" width="1201" height="475" class="size-full wp-image-42445" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42445" class="wp-caption-text"&gt;Figure 4: A use case where GetKeyLastUsage doesn’t accurately reflect whether a KMS key is still required&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;As an example, &lt;a href="https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html" target="_blank" rel="noopener noreferrer"&gt;Amazon EBS volumes&lt;/a&gt; only interact with KMS keys during specific lifecycle events like volume creation, attachment, and detachment. After a volume is attached to an &lt;a href="https://aws.amazon.com/ec2" target="_blank" rel="noopener noreferrer"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt; instance, the plaintext data encryption key is cached in the Nitro Card hardware, and all subsequent read/write operations use this cached key without any further AWS KMS API calls. This means a production volume running continuously for months or years will show no KMS activity during that entire period. However, the volume remains completely dependent on that KMS key for any future operations like instance restarts, volume reattachments, or disaster recovery scenarios. If someone deletes the KMS key, the encrypted data key stored with the volume can never be decrypted again, making the volume’s data permanently and irreversibly inaccessible. Before deleting any KMS key, you must verify it has no associated EBS volumes or snapshots, regardless of how long ago the last KMS API call occurred.&lt;/p&gt; 
&lt;p&gt;AWS provides a mechanism where you can create a &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-creating-cloudwatch-alarm.html" target="_blank" rel="noopener noreferrer"&gt;CloudWatch alarm&lt;/a&gt; that notifies you if a key pending deletion is being accessed, giving you an opportunity to cancel the deletion before data becomes inaccessible.&lt;/p&gt; 
&lt;h4&gt;Solution with GetKeyLastUsage API&lt;/h4&gt; 
&lt;p&gt;Here’s a sample script that scans all customer-managed keys in an account and retrieves each key’s last usage date through the &lt;code style="color: #000000"&gt;GetKeyLastUsage&lt;/code&gt; API. It accepts two optional inputs: a threshold in days and an AWS Region. The script filters and displays only keys that haven’t been used within the specified period, presenting results in a table with the key name, AWS account ID, AWS Region, and last usage date. This can help you identify unused encryption keys.&lt;/p&gt; 
&lt;p&gt;The following is an example to scan all keys that haven’t been used in the last 180 days in the us-east-1 Region:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-shell"&gt;./script.sh 180 us-east-1
#!/bin/bash
DAYS=${1:-90}
REGION=${2:-$(aws configure get region)}
CUTOFF=$(date -v-${DAYS}d +%s 2&amp;gt;/dev/null || date -d "-${DAYS} days" +%s)
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
printf "Showing keys not used in the last %s days (Region: %s)\n\n" "$DAYS" "$REGION"
printf "%-50s %-15s %-20s %-15s\n" "Key Name" "Account ID" "Region" "Last Usage Date"
printf "%.0s-" {1..100}
printf "\n"
for key_id in $(aws kms list-keys --region $REGION --query 'Keys[*].KeyId' --output text); do
key_manager=$(aws kms describe-key --region $REGION --key-id $key_id --query 'KeyMetadata.KeyManager' --output text)
if [ "$key_manager" = "CUSTOMER" ]; then
last_usage=$(aws kms get-key-last-usage --region $REGION --key-id $key_id)
timestamp=$(echo $last_usage | jq -r '.KeyLastUsage.TimeStamp // empty')
if [ -z "$timestamp" ]; then
last_epoch=0
else
last_epoch=$(date -jf "%Y-%m-%dT%H:%M:%S" "$(echo $timestamp | cut -d. -f1)" +%s 2&amp;gt;/dev/null || date -d "$timestamp" +%s)
fi
if [ "$last_epoch" -lt "$CUTOFF" ]; then
key_alias=$(aws kms list-aliases --region $REGION --key-id $key_id --query 'Aliases[0].AliasName' --output text)
key_name=${key_alias:-$key_id}
[ "$key_name" = "None" ] &amp;amp;&amp;amp; key_name=$key_id
if [ -z "$timestamp" ]; then
tracking_date=$(echo $last_usage | jq -r '.TrackingStartDate' | cut -d'T' -f1)
last_used="${tracking_date}*"
else
last_used=$(echo $timestamp | cut -d'T' -f1)
fi
printf "%-50s %-15s %-20s %-15s\n" "$key_name" "$ACCOUNT_ID" "$REGION" "$last_used"
fi
fi
done
printf "\n* = No operations performed since tracking started\n"&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Use case 2: Preventing accidental key deletion with policy controls&lt;/h3&gt; 
&lt;p&gt;Organizations frequently face the risk of accidental key deletions, which can have severe operational consequences. Despite precautions and safety measures, accidents can happen. A key might be deleted because someone believes it’s no longer in use, only to discover that critical applications or workloads depend on it. This results in data access failures, application downtime, and emergency recovery procedures. Without visibility into recent key usage, teams lack the information needed to make safe disable decisions or implement effective safeguards.&lt;/p&gt; 
&lt;h4&gt;Solution with policy based controls&lt;/h4&gt; 
&lt;p&gt;To prevent KMS keys from being accidentally Disabled or Deleted use the &lt;code style="color: #000000"&gt;kms:TrailingDaysWithoutKeyUsage&lt;/code&gt; condition key in key policies to automatically block deletion or disabling of recently used keys:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open the &lt;a href="https://console.aws.amazon.com/kms" target="_blank" rel="noopener noreferrer"&gt;AWS KMS console&lt;/a&gt; and choose &lt;strong&gt;Customer managed keys&lt;/strong&gt; in the navigation pane.&lt;/li&gt; 
 &lt;li&gt;Select the key you want to protect.&lt;/li&gt; 
 &lt;li&gt;In the &lt;strong&gt;Key policy&lt;/strong&gt; tab, choose &lt;strong&gt;Edit.&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;In the policy editor, add the following statement:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-css"&gt;{
  "Sid": "PreventDeletionOfRecentlyUsedKeys",
  "Effect": "Deny",
  "Principal": "*",
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:DisableKey"
  ],
  "Resource": "*",
  "Condition": {
    "NumericLessThanEquals": {
      "kms:TrailingDaysWithoutKeyUsage": "365"
    }
  }
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;ol start="5"&gt; 
 &lt;li&gt;Choose &lt;strong&gt;Save changes&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The policy prevents deletion or disabling a key if it was used within the past 365 days. You can adjust the threshold to match your organization’s requirements. For more information about the condition key, see &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-trailing-days-without-key-usage" target="_blank" rel="noopener noreferrer"&gt;kms:TrailingDaysWithoutKeyUsage&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Important considerations&lt;/h2&gt; 
&lt;p&gt;When reviewing key usage for possible deletion, consider the following:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Key deletion is irreversible and makes encrypted data unrecoverable. AWS enforces a 7–30 day waiting period. During this time, monitor usage attempts and cancel the deletion if necessary. Delete a key only if you’re certain that no data has been encrypted or will be encrypted with it. Consider disabling the key first to test the impact of unavailable keys.&lt;/li&gt; 
 &lt;li&gt;CloudTrail remains authoritative because it provides the full audit trail. &lt;code style="color: #000000"&gt;GetKeyLastUsage&lt;/code&gt; quickly tells you when and what operations occurred, but CloudTrail shows you who made the request and with what parameters. Learn more about &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html" target="_blank" rel="noopener noreferrer"&gt;logging KMS API calls with CloudTrail&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;The &lt;code style="color: #000000"&gt;GetKeyLastUsage&lt;/code&gt; API enhances your KMS key management capabilities by providing immediate access to usage data that was previously only present in CloudTrail logs. Start by opening the AWS KMS console and checking the &lt;strong&gt;Last used&lt;/strong&gt; field for any customer-managed keys and AWS managed keys to see this information in action. For broader key auditing, integrate the API into your existing automation scripts using the AWS CLI examples provided.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/Andrea-Rossi.png" alt="Andrea Rossi" width="120" height="160" class="aligncenter size-full wp-image-42449"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Andrea Rossi&lt;/h3&gt; 
  &lt;p&gt;Andrea is the Solutions Architect who always asks “but is it secure?” one more time. Based in Milan, Italy, he works with customers to architect cloud solutions where security is foundational, not an afterthought, from network-level hardening to integrating Generative AI workloads into compliant environments.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/Poojil-Tripathi.png" alt="Poojil Tripathi" width="120" height="160" class="aligncenter size-full wp-image-42450"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Poojil Tripathi&lt;/h3&gt; 
  &lt;p&gt;Poojil is a Solutions Architect based in Austin, TX, who would like to remind you that you should never click on links. He works with customers to design secure-by-design cloud solutions on AWS, specializing in encryption and healthy paranoia.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Secure multi-tenant AI agents with Amazon Bedrock AgentCore resource-based policies</title>
		<link>https://aws.amazon.com/blogs/security/secure-multi-tenant-ai-agents-with-amazon-bedrock-agentcore-resource-based-policies/</link>
					
		
		<dc:creator><![CDATA[Satyen Verma]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 16:00:11 +0000</pubDate>
				<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">2ca6adbd3491f3eca11cd3c72582d49abd761785</guid>

					<description>Software as a service (SaaS) providers building AI-powered applications on Amazon Bedrock AgentCore often need to serve multiple tenants with distinct security requirements from a shared infrastructure. Some tenants require cross-account access from their own Amazon Web Services (AWS) accounts, while others mandate that traffic stay within a private virtual private cloud (VPC) for regulatory […]</description>
										<content:encoded>&lt;p&gt;Software as a service (SaaS) providers building AI-powered applications on &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/bedrock/agentcore/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Bedrock AgentCore&lt;/a&gt;&lt;/span&gt; often need to serve multiple tenants with distinct security requirements from a shared infrastructure. Some tenants require cross-account access from their own &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/span&gt; accounts, while others mandate that traffic stay within a private virtual private cloud (VPC) for regulatory compliance. Without centralized resource-level control, managing these diverse requirements can be complex.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/bedrock/agentcore/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AgentCore&lt;/a&gt;&lt;/span&gt; supports resource-based policies, giving you centralized, resource-level control over who can access your AgentCore Runtime and AgentCore Runtime endpoint resources and under what conditions.&lt;/p&gt; 
&lt;p&gt;In this post, you walk through a multi-tenant AI customer service platform where two tenants need different levels of access to the same agent. You learn how to use resource-based policies on AgentCore to grant cross-account access for one tenant while restricting another to VPC-only traffic—all while sharing the same underlying AgentCore Runtime and AgentCore Runtime endpoint.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;The multi-tenant scenario&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Imagine you’re an SaaS provider who builds and operates an AI-powered customer service platform. You use AgentCore to deploy intelligent agents that handle customer inquiries, answering product questions, processing returns, and escalating complex issues to human agents.&lt;/p&gt; 
&lt;p&gt;You serve multiple enterprise clients (tenants), each with their own AWS account and unique security requirements:&lt;/p&gt; 
&lt;ul id="rte-f6a63972-2703-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Tenant A: &lt;/b&gt;Example Corp is a large retailer operating in AWS account 111122223333. Their development team&lt;b&gt; &lt;/b&gt;is building a customer-facing chat agent that calls your AI agent to answer product questions in real time, and their admin team needs access to test agent behavior and monitor responses. Both roles must invoke the agent directly from Example Corp’s own AWS account without you having to share credentials or create &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&lt;/span&gt; users on their behalf. Example Corp has no network restriction requirements—their teams can invoke the agent from any network path as long as they have valid AWS credentials.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Tenant B: &lt;/b&gt;AnyCompany is a healthcare company operating in AWS account 444455556666. Because of regulatory (HIPAA) requirements, AI agent traffic must originate only from their private VPC (vpc-health1234). Their internal support staff uses the AI agent to assist with patient billing inquiries, which might involve protected health information (PHI). Their compliance team mandates that no API call to the agent can be made from developer laptops, public endpoints, or any network outside the controlled VPC boundary.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Your platform (SaaS provider)&lt;/b&gt; runs in account 555555555555 in the us-west-2 AWS Region. You operate an AgentCore Runtime (&lt;code class="CodeInline" style="color: #000"&gt;support-agent-runtime&lt;/code&gt;) that handles the core customer service logic, and an AgentCore Runtime endpoint (&lt;code class="CodeInline" style="color: #000"&gt;DEFAULT&lt;/code&gt;) that routes requests to the latest version of the support agent. Both tenants share this same agent infrastructure.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can use resource-based policies to define who can access your AgentCore Runtime and AgentCore Runtime endpoint directly on the resources themselves—centralizing access control on the resource side. For cross-account scenarios like Example Corp, both a resource-based policy on your resources and an identity-based policy in the tenant’s account are required. For VPC-restricted scenarios like AnyCompany, you can use specific IAM conditions to enforce that requests originate only from an approved VPC, adding a network-level security boundary on top of identity-based controls.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Solution architecture&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The following diagram shows the architecture for the multi-tenant AI customer service platform with both access patterns. &lt;/p&gt; 
&lt;div id="attachment_42489" style="width: 1592px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42489" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/06/01/3421-Figure-1.png" alt="Figure 1: Architecture for the multi-tenant AI customer service platform with both access patterns" width="1582" height="1120" class="size-full wp-image-42489"&gt;
 &lt;p id="caption-attachment-42489" class="wp-caption-text"&gt;Figure 1: Architecture for the multi-tenant AI customer service platform with both access patterns&lt;/p&gt;
&lt;/div&gt; 
&lt;ul id="rte-027795a0-2704-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;Your account (555555555555) with AgentCore Runtime and AgentCore Runtime endpoint&lt;/li&gt; 
 &lt;li&gt;Example Corp’s account (111122223333) with &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;AnyCompany’s account (444455556666) with VPC boundary and &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Policy enforcement points on both resources&lt;/li&gt; 
 &lt;li&gt;VPC endpoint in AnyCompany’s VPC connecting to AgentCore&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The SaaS provider account (555555555555) hosts the AgentCore Runtime and AgentCore Runtime endpoint that both tenants share. Example Corp (111122223333) accesses the agent cross-account using IAM roles—&lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt;—authenticated with Signature Version 4 (SigV4), the standard AWS request signing protocol. AWS evaluates both the resource-based policy on your resources and the identity-based policy in Example Corp’s account before granting access.&lt;/p&gt; 
&lt;p&gt;AnyCompany (444455556666) also accesses the agent cross-account, but with an additional constraint: all requests must originate from within their private VPC (vpc-health1234) through a VPC endpoint for AgentCore. The resource-based policy on your resources includes an explicit &lt;code class="CodeInline" style="color: #000"&gt;Deny&lt;/code&gt; statement that blocks any request from AnyCompany’s &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt; when it doesn’t originate from the approved VPC.&lt;/p&gt; 
&lt;p&gt;In both cases, resource-based policies must be applied to both the AgentCore Runtime and AgentCore Runtime endpoint. AWS evaluates policies on both resources for &lt;code class="CodeInline" style="color: #000"&gt;InvokeAgentRuntime&lt;/code&gt; operations—if either resource denies access or lacks an explicit &lt;code class="CodeInline" style="color: #000"&gt;Allow&lt;/code&gt;, the request is denied.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Prerequisites&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Before you begin, ensure you have the following:&lt;/p&gt; 
&lt;ul id="rte-027795a1-2704-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;An AWS account with AgentCore access and permissions to call &lt;code class="CodeInline" style="color: #000"&gt;PutResourcePolicy&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;GetResourcePolicy&lt;/code&gt;, and &lt;code class="CodeInline" style="color: #000"&gt;DeleteResourcePolicy&lt;/code&gt; on AgentCore resources&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cli" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt;&lt;/span&gt; v2 installed and configured with the &lt;code class="CodeInline" style="color: #000"&gt;bedrock-agentcore-control&lt;/code&gt; API available&lt;/li&gt; 
 &lt;li&gt;An AgentCore Runtime with SigV4 authentication and a &lt;code class="CodeInline" style="color: #000"&gt;DEFAULT&lt;/code&gt; AgentCore Runtime endpoint pointing to the latest runtime version&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For the VPC-restricted scenario, the tenant must have a VPC endpoint for AgentCore configured in their VPC. An interface VPC endpoint creates a private connection between the tenant’s VPC and the AgentCore service without requiring traffic to traverse the public internet. For more information, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/vpc-interface-endpoints.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Interface VPC endpoints for Amazon Bedrock AgentCore&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Implementation&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Both Example Corp and AnyCompanyoperate in separate AWS accounts from your platform. For cross-account access to AgentCore Runtime, AWS requires that both of the following allow the action:&lt;/p&gt; 
&lt;ul id="rte-027795a3-2704-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;A &lt;i&gt;resource-based policy&lt;/i&gt;&lt;b&gt; &lt;/b&gt;in your platform account applied to both the AgentCore Runtime and its AgentCore Runtime endpoint. InvokeAgentRuntime operations require an explicit &lt;code class="CodeInline" style="color: #000"&gt;Allow&lt;/code&gt; on both resources—if either lacks one, the request is denied.&lt;/li&gt; 
 &lt;li&gt;An &lt;b&gt;identity-based policy&lt;/b&gt; attached to the caller’s IAM role in the tenant’s account.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If either side is missing or denies the action, the request is denied.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Step 1: Configure cross-account access for &lt;/b&gt;Example Corp&lt;b&gt; (Tenant A)&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Example Corp’s &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt; in account 111122223333 need to invoke your AI customer service agent. Without resource-based policies, enabling this cross-account access would typically require Example Corp’s roles to assume a role in your platform account through IAM role chaining—adding operational complexity, introducing temporary credential management, and creating additional IAM roles that must be maintained in your account for each tenant. With resource-based policies, you grant Example Corp’s roles direct access to your AgentCore Runtime and AgentCore Runtime endpoint without role chaining. Example Corp’s roles can invoke the agent directly from their own account using their own credentials, while you maintain centralized control over access on the resource side.&lt;/p&gt; 
&lt;h4&gt;AgentCore Runtime resource-based policy&lt;/h4&gt; 
&lt;p&gt;The following policy grants Example Corp’s &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt; permission to invoke the agent runtime. This is the first of two resource-based policies required—it controls access to the runtime resource itself. Save this as &lt;code class="CodeInline" style="color: #000"&gt;runtime-policy.json&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowExampleCorpCrossAccountAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:role/DeveloperRole",
          "arn:aws:iam::111122223333:role/AdminRole"
        ]
      },
      "Action": "bedrock-agentcore:InvokeAgentRuntime",
      "Resource": "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime"
    }
  ]
}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;h4&gt;AgentCore Runtime endpoint resource-based policy&lt;/h4&gt; 
&lt;p&gt;The following policy grants the same roles permission to invoke the AgentCore Runtime endpoint. Without this second policy, requests are allowed at the runtime level but denied at the endpoint level, and the invocation fails. Save this as &lt;code class="CodeInline" style="color: #000"&gt;endpoint-policy.json&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowExampleCorpCrossAccountAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/DeveloperRole",
                    "arn:aws:iam::111122223333:role/AdminRole"
                ]
            },
            "Action": "bedrock-agentcore:InvokeAgentRuntime",
            "Resource": "arn:aws:bedrock-agentcore:us-west-2:999999999999:runtime/support-agent-runtime/runtime-endpoint/DEFAULT"
        }
    ] 
}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;h4&gt;To apply the resource-based policies&lt;/h4&gt; 
&lt;p&gt;&lt;code class="CodeInline" style="color: #000"&gt;aws bedrock-agentcore-control put-resource-policy \--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime \--policy file://runtime-policy.json \--region us-west-2&lt;/code&gt;&lt;br&gt; &lt;code class="CodeInline" style="color: #000"&gt;aws bedrock-agentcore-control put-resource-policy \--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT \--policy file://endpoint-policy.json \--region us-west-2&lt;/code&gt;&lt;/p&gt; 
&lt;h4&gt;To verify the resource-based policies&lt;/h4&gt; 
&lt;p&gt;&lt;code class="CodeInline" style="color: #000"&gt;aws bedrock-agentcore-control get-resource-policy \--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime \--region us-west-2&lt;/code&gt;&lt;br&gt; &lt;code class="CodeInline" style="color: #000"&gt;aws bedrock-agentcore-control get-resource-policy \--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT \--region us-west-2&lt;/code&gt;&lt;/p&gt; 
&lt;h4&gt;Configure an identity-based policy (Example Corp’s account)&lt;/h4&gt; 
&lt;p&gt;Resource-based policies alone aren’t sufficient for cross-account access. Example Corp must also attach an identity-based policy to &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt; in their account (111122223333) that allows the same action on your resources. Without this policy on the tenant side, IAM denies the cross-account request even though your resource-based policies allow it.&lt;/p&gt; 
&lt;p&gt;Example Corp attaches the following policy to both &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowInvokeAgentRuntime",
            "Effect": "Allow",
            "Action": "bedrock-agentcore:InvokeAgentRuntime",
            "Resource": [
                "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime",
                "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT"
            ]
        }
    ] 
}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;Attach this policy to both &lt;code class="CodeInline" style="color: #000"&gt;DeveloperRole&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;AdminRole&lt;/code&gt; in Example Corp’s account.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Step 2: Configure cross-account with VPC-restricted access for AnyCompany (Tenant B)&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;AnyCompany operates under HIPAA compliance requirements and mandates that all traffic to your agent stays within a private network path. Like Example Corp, AnyCompany needs cross-account access from account 444455556666—but with an additional constraint, requests must originate from their VPC &lt;code class="CodeInline" style="color: #000"&gt;vpc-health1234&lt;/code&gt; through an interface VPC endpoint. Any request from outside this VPC is denied, even if it comes from AnyCompany’s &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;Resource-based policies (your platform account):&lt;/b&gt; To enforce this, you update the resource-based policies on both the AgentCore Runtime and AgentCore Runtime endpoint. Each policy includes an &lt;code class="CodeInline" style="color: #000"&gt;Allow&lt;/code&gt; statement that grants &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt; permission to invoke the agent, paired with a &lt;code class="CodeInline" style="color: #000"&gt;Deny&lt;/code&gt; statement that blocks any request not originating from &lt;code class="CodeInline" style="color: #000"&gt;vpc-health1234&lt;/code&gt;. In the following policy, the &lt;code class="CodeInline" style="color: #000"&gt;Deny&lt;/code&gt; statement uses &lt;code class="CodeInline" style="color: #000"&gt;StringNotEquals&lt;/code&gt; on aws:&lt;code class="CodeInline" style="color: #000"&gt;SourceVpc&lt;/code&gt; . When a request arrives through an interface VPC endpoint, AWS populates this key with the VPC ID. If it doesn’t match &lt;code class="CodeInline" style="color: #000"&gt;vpc-health1234&lt;/code&gt;, or if the key is absent because no VPC endpoint was used, the &lt;code class="CodeInline" style="color: #000"&gt;Deny&lt;/code&gt; takes effect. Because an explicit &lt;code class="CodeInline" style="color: #000"&gt;Deny&lt;/code&gt; overrides any &lt;code class="CodeInline" style="color: #000"&gt;Allow&lt;/code&gt; from any policy, this pattern helps ensure that no other identity-based or resource-based policy can inadvertently grant AnyCompany access from outside the VPC. Add the following statements to &lt;code class="CodeInline" style="color: #000"&gt;runtime-policy-v2.json&lt;/code&gt; alongside the Example Corp statement from Step 1:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-text"&gt;{
  "Sid": "AllowAnyCompanyCrossAccountAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::444455556666:role/ApplicationRole"
  },
  "Action": "bedrock-agentcore:InvokeAgentRuntime",
  "Resource": "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime"
},
{
  "Sid": "DenyAnyCompanyOutsideVpc",
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::444455556666:role/ApplicationRole"
  },
  "Action": "bedrock-agentcore:InvokeAgentRuntime",
  "Resource": "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime",
  "Condition": {
    "StringNotEquals": {
      "aws:SourceVpc": "vpc-health1234"
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h4&gt;AgentCore Runtime endpoint resource-based policy&lt;/h4&gt; 
&lt;p&gt;Add the equivalent statement to &lt;code class="CodeInline" style="color: #000"&gt;endpoint-policy-v2.json&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
    "Sid": "AllowAnyCompanyCrossAccountAccess",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ApplicationRole"
    },
    "Action": "bedrock-agentcore:InvokeAgentRuntime",
    "Resource": "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT"
},
{
    "Sid": "DenyHealthFirstOutsideVpc",
    "Effect": "Deny",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ApplicationRole"
    },
    "Action": "bedrock-agentcore:InvokeAgentRuntime",
    "Resource": "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT",
    "Condition": {
        "StringNotEquals": {
            "aws:SourceVpc": "vpc-health1234"
        }
    }
}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;Because &lt;code class="CodeInline" style="color: #000"&gt;put-resource-policy&lt;/code&gt; replaces the entire policy on a resource, your updated policy files must include both the preceding AnyCompany statments and the Example Corp statements from Step 1.&lt;/p&gt; 
&lt;h4&gt;Apply the updated resource-based policies&lt;/h4&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;aws bedrock-agentcore-control put-resource-policy \
	--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime \
	--policy file://runtime-policy-v2.json \
	--region us-west-2 

aws bedrock-agentcore-control put-resource-policy \
	--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT \
	--policy file://endpoint-policy-v2.json \
	--region us-west-2&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;h4&gt;Verify the updated policies&lt;/h4&gt; 
&lt;p&gt;After applying the final policies, verify them using the &lt;code class="CodeInline" style="color: #000"&gt;get-resource-policy&lt;/code&gt; command:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;# Verify Agent Runtime policy 
aws bedrock-agentcore-control get-resource-policy \
	--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime \
	--region us-west-2 

# Verify Agent Runtime Endpoint policy 
aws bedrock-agentcore-control get-resource-policy \
	--resource-arn arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT \
	--region us-west-2&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;h4&gt;Identity-based policy (AnyCompany’s account)&lt;/h4&gt; 
&lt;p&gt;AnyCompany must attach an identity-based policy to &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt; in their account 444455556666 that allows the same &lt;code class="CodeInline" style="color: #000"&gt;InvokeAgentRuntime&lt;/code&gt; on your resources in account 555555555555. Without this policy on the tenant side, IAM denies the cross-account request even though your resource-based policies allow it.&lt;/p&gt; 
&lt;p&gt;AnyCompany attaches the following policy to &lt;code class="CodeInline" style="color: #000"&gt;ApplicationRole&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowInvokeAgentRuntime",
            "Effect": "Allow",
            "Action": "bedrock-agentcore:InvokeAgentRuntime",
            "Resource": [
                "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime",
                "arn:aws:bedrock-agentcore:us-west-2:555555555555:runtime/support-agent-runtime/runtime-endpoint/DEFAULT"
            ]
        }
    ] 
}&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;The VPC restriction is enforced entirely on resource account through the resource-based policy condition, AnyCompany’s identity-based policy doesn’t need VPC conditions. This keeps the tenant-side configuration straightforward while you maintain centralized network-level control.&lt;/p&gt; 
&lt;h4&gt;OAuth authentication considerations&lt;/h4&gt; 
&lt;p&gt;The policies in this post use SigV4 authentication with specific IAM role principals. If your AgentCore Runtime or AgentCore Gateway is configured with OAuth authentication instead, the principal structure changes. OAuth-authenticated resources require a wildcard principal (&lt;code class="CodeInline" style="color: #000"&gt;“Principal": "*"&lt;/code&gt;) because the caller identity comes from a JSON Web Token (JWT) validated before policy evaluation. Anonymous or unauthenticated requests are rejected before the policy is evaluated, so the wildcard principal doesn’t grant open access. To restrict OAuth-authenticated requests to a specific VPC, combine the wildcard principal with a VPC condition in the resource-based policy. IAM principal-based condition keys such as &lt;code class="CodeInline" style="color: #000"&gt;aws:PrincipalAccount&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;aws:PrincipalOrgID&lt;/code&gt; aren’t populated in the OAuth authentication context—only supported network-level condition keys (such as &lt;code class="CodeInline" style="color: #000"&gt;aws:SourceVpc&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;aws:SourceVpce&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;aws:SourceIp&lt;/code&gt;) are available for use in resource-based policies with OAuth. For more details, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/resource-based-policies.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Resource-based policies for Amazon Bedrock AgentCore&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;h4&gt;Understanding policy evaluation&lt;/h4&gt; 
&lt;p&gt;To understand how AWS evaluates these policies when a request arrives, consider the following scenarios:&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Caller or principal&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Network&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Identity-based policy (tenant side)&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Runtime resource-based policy&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Runtime endpoint resource-based policy&lt;/b&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;b&gt;Final policy evaluation result&lt;/b&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Example Corp&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any network&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allowed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Example Corp&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any network&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allowed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AnyCompany&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;From&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows ( does not match)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows ( does not match)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allowed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AnyCompany&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Outside VPC&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;matches&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;matches&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Denied&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any other cross-account role&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any network&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No matching&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No matching&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Denied&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any other cross-account role&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Any network&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;No policy&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Allows&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Denied&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Conclusion and next steps&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;In this post, you learned how to use resource-based policies on AgentCore to secure a multi-tenant AI platform with distinct access patterns for each tenant:&lt;/p&gt; 
&lt;ul id="rte-0278a710-2704-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Example Corp&lt;/b&gt; gets seamless cross-account integration, their development and admin teams can invoke your AI agent directly from their own AWS account without credential management.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;AnyCompany&lt;/b&gt; gets the strict network-level isolation their compliance team requires, the AI agent is accessible only from within their private VPC, ensuring that interactions involving potential PHI — stay within the controlled network boundary&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Both tenants share the same underlying AgentCore Runtime and AgentCore Runtime endpoint, yet each has tailored security controls enforced at the resource level. his approach avoids per-tenant infrastructure duplication while satisfying each tenant’s security posture, a challenge you likely face when onboarding tenants with different compliance postures. Resource-based policies complement identity-based IAM policies, giving you layered control over which principals can invoke which agents, and from which network paths.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Next steps&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;ul id="rte-0278a711-2704-11f1-911c-79ff20ba2680" class="rte2-style-ul"&gt; 
 &lt;li&gt;Learn more about &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Bedrock AgentCore&lt;/a&gt;&lt;/span&gt; in the official documentation&lt;/li&gt; 
 &lt;li&gt;Review &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/resource-based-policies.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;resource-based policies for Amazon Bedrock AgentCore&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;Explore other &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS global condition keys&lt;/a&gt;&lt;/span&gt; including &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce" target="_blank" rel="noopener" data-cms-ai="0"&gt;aws:SourceVpce&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid" target="_blank" rel="noopener" data-cms-ai="0"&gt;aws:PrincipalOrgID&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;Visit the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Well-Architected Framework Security Pillar&lt;/a&gt;&lt;/span&gt; for multi-tenancy best practices&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below. &lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/28/Satyen-Verma.jpg" alt="Satyen Verma" width="120" height="160" class="aligncenter size-full wp-image-42472"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Satyen Verma&lt;/h3&gt; 
  &lt;p&gt;Satyen is a Software Engineer at AWS building secure and scalable runtime systems for Amazon Bedrock AgentCore. He focuses on enabling reliable, high-performance agentic AI applications for customers worldwide.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/28/Zohreh-Norouzi.jpg" alt="Zohreh Norouzi" width="120" height="160" class="aligncenter size-full wp-image-42473"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Zohreh Norouzi&lt;/h3&gt; 
  &lt;p&gt;Zohreh is a Security Solutions Architect at AWS. She helps customers make good security choices and accelerate their journey to the AWS Cloud. She has been actively involved in generative AI security initiatives across APJ, using her expertise to help customers build secure generative AI solutions at scale.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/28/Vijay-Kumar-Samanthapudi.jpg" alt="Vijay Kumar Samanthapudi" width="120" height="160" class="aligncenter size-full wp-image-42474"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Vijay Kumar Samanthapudi&lt;/h3&gt; 
  &lt;p&gt;Vijay is a Software Engineer at AWS building secure and scalable runtime systems for Amazon Bedrock AgentCore. He focuses on enabling reliable, high-performance agentic AI applications for customers worldwide.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/28/Satveer-Khurpa.jpg" alt="Satveer Khurpa" width="120" height="160" class="aligncenter size-full wp-image-42475"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Satveer Khurpa&lt;/h3&gt; 
  &lt;p&gt;Satveer is a Sr. WW Specialist Solutions Architect, Amazon Bedrock AgentCore at AWS, specializing in agentic AI security with a focus on AgentCore Identity and Security. He uses his expertise in cloud-based architectures to help clients design and deploy secure agentic AI systems across diverse industries.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/28/Prajit-Pabbati.jpg" alt="Prajit Pabbati" width="120" height="160" class="aligncenter size-full wp-image-42476"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Prajit Pabbati&lt;/h3&gt; 
  &lt;p&gt;Prajit is a Software Development Manager at AWS building secure and scalable runtime systems for Amazon Bedrock AgentCore.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Spring 2026 SOC 1, 2, and 3 reports are now available with 188 services in scope</title>
		<link>https://aws.amazon.com/blogs/security/spring-2026-soc-1-2-and-3-reports-are-now-available-with-188-services-in-scope/</link>
					
		
		<dc:creator><![CDATA[Baj Bajwa]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 16:07:48 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<category><![CDATA[SOC]]></category>
		<guid isPermaLink="false">f670bda8a08d9d8e76a3f6bb158c09d8c1f911d6</guid>

					<description>Amazon Web Services (AWS) is pleased to announce that the Spring 2026 System and Organization Controls (SOC) 1, 2, and 3 reports are now available. The reports cover 188 services over the 12-month period from April 1, 2025–March 31, 2026, giving customers a full year of assurance. These reports demonstrate our continuous commitment to adhering […]</description>
										<content:encoded>&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/span&gt; is pleased to announce that the Spring 2026 System and Organization Controls (SOC) 1, 2, and 3 reports are now available. The reports cover 188 services over the 12-month period from April 1, 2025–March 31, 2026, giving customers a full year of assurance. These reports demonstrate our continuous commitment to adhering to the heightened expectations of cloud service providers.&lt;/p&gt; 
&lt;p&gt;Customers can download the Spring 2026 SOC 1 and 2 reports through AWS Artifact, a self-service portal for on-demand access to AWS compliance reports. Sign in to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://console.aws.amazon.com/artifact" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Artifact in the AWS Management Console&lt;/a&gt;&lt;/span&gt;, or learn more at &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/artifact/getting-started/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Getting Started with AWS Artifact&lt;/a&gt;&lt;/span&gt;. The SOC 3 report can be found on the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/soc-faqs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS SOC Compliance Page&lt;/a&gt;&lt;/span&gt; and AWS Artifact.&lt;/p&gt; 
&lt;p&gt;AWS strives to continuously bring services into the scope of its compliance programs to help customers meet their architectural and regulatory needs. You can view the current list of services in scope on our &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/services-in-scope/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Services in Scope page&lt;/a&gt;&lt;/span&gt;. As an AWS customer, you can reach out to your AWS account team if you have any questions or feedback about SOC compliance.&lt;/p&gt; 
&lt;p&gt;To learn more about AWS compliance and security programs, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/programs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Compliance Programs&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/Baj-Bajwa.jpg" alt="Baj Bajwa" width="120" height="160" class="aligncenter size-full wp-image-42455"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Baj Bajwa&lt;/h3&gt; 
  &lt;p&gt;Baj is a Security Assurance Manager at AWS, where he leads the Global Third-Party Assurance product portfolio within the Compliance and Security Assurance (CSA) organization. He has over 15 years of experience in information security, compliance, and risk management, and holds a master’s degree in cybersecurity. Baj maintains CISSP, CISA, PMP, CCSK, GISF, and ICAgile certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/12/Tushar-Jain-2.jpg" alt="Tushar-Jain" width="120" height="160" class="aligncenter size-full wp-image-42162"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Tushar Jain&lt;/h3&gt; 
  &lt;p&gt;Tushar is a Compliance Program Manager at AWS where he leads multiple security and privacy initiatives Tushar holds a Master of Business Administration from Indian Institute of Management Shillong, India and a Bachelor of Technology in electronics and telecommunication engineering from Marathwada University, India. He has over 14 years of experience in information security and holds CISM, CCSK and CSXF certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2025/09/12/michaelmurphy.murphman.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-39816"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Michael Murphy&lt;/h3&gt; 
  &lt;p&gt;Michael is a Compliance Program Manager at AWS where he leads multiple security and privacy initiatives. Michael has over 14 years of experience in information security and holds a master’s degree and a bachelor’s degree in computer engineering from Stevens Institute of Technology. He also holds CISSP, CRISC, CISA, and CISM certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2025/09/12/atulsingpatil.atulspat.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-39814"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Atulsing Patil&lt;/h3&gt; 
  &lt;p&gt;Atulsing is a Compliance Program Manager at AWS and has over 28 years of consulting experience in information technology and information security management. Atulsing holds a Master of Science in Electronics degree and professional certifications such as CCSP, CISSP, CISM, CDPSE, ISO 42001 Lead Auditor, ISO 27001 Lead Auditor, HITRUST CSF, Archer Certified Consultant, and AWS CCP.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/12/jeff-cheung-author.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41845"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Jeff Cheung&lt;/h3&gt; 
  &lt;p&gt;Jeff is a Compliance Program Manager at AWS where he leads multiple security and privacy initiatives across business lines. Jeff has Bachelors degrees in Information Systems, and Economics from SUNY Stony Brook, and has over 20 years of experience in information security and assurance. Jeff has held professional certifications such as CISA, CISM, and PCI-QSA.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/noah-miller-author.jpg" alt="" width="118" height="157" class="aligncenter size-full wp-image-41270"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Noah Miller&lt;/h3&gt; 
  &lt;p&gt;Noah is a Compliance Program Manager at AWS and leads multiple security and privacy initiatives. Noah has 7 years of experience in information security. He has a master’s degree in Cybersecurity Risk Management and a bachelor’s degree in Informatics from Indiana University.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/12/willblack.wblackjr.jpg" alt="" width="118" height="157" class="aligncenter size-full wp-image-41134"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Will Black&lt;/h3&gt; 
  &lt;p&gt;Will is a Compliance Program Manager at AWS where he leads multiple security and compliance initiatives. Will has 10 years of experience in compliance and security assurance and holds a degree in Management Information Systems from Temple University. Additionally, he is a PCI Internal Security Assessor (ISA) for AWS and holds the CCSK and ISO 27001 Lead Implementer certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/allen-beam-author.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41848"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Allen Beam&lt;/h3&gt; 
  &lt;p&gt;Allen is a Compliance Program Manager at AWS supporting third-party security and privacy compliance initiatives. He has over 10 years of experience in external IT security audits, security control design and implementation, and audit readiness and control deficiency remediation. He has a Bachelor’s Degree in Economics and Finance from James Madison University.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/ziv-wand-author.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41843"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ziv Wand&lt;/h3&gt; 
  &lt;p&gt;Ziv is a Compliance Program Manager at AWS and leads multiple security and privacy initiatives. Ziv has over 6 years of experience in information security assurance, external IT security audits, security control design and implementation, and audit readiness. He holds a Bachelor of Science in Management Information Systems from Binghamton University.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/27/shalini-mishra-author.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41842"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Shalini Mishra&lt;/h3&gt; 
  &lt;p&gt;Shalini is a Compliance Program Manager at AWS. She has over 10 years of experience leading end-to-end compliance programs across ISO, SOC, and cloud security frameworks, with deep expertise in third-party risk management and enterprise governance. Shalini holds a Master of Science degree in Information Systems and CRISC certification.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Why and how to migrate to a Transit Gateway-attached AWS Network Firewall</title>
		<link>https://aws.amazon.com/blogs/security/why-and-how-to-migrate-to-a-transit-gateway-attached-aws-network-firewall/</link>
					
		
		<dc:creator><![CDATA[Frank Phillis]]></dc:creator>
		<pubDate>Thu, 28 May 2026 22:44:17 +0000</pubDate>
				<category><![CDATA[Amazon VPC]]></category>
		<category><![CDATA[AWS Network Firewall]]></category>
		<category><![CDATA[AWS Transit Gateway]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">61be58c01d35acef25f8c375bac1bd2d7048a478</guid>

					<description>AWS Network Firewall now supports native attachment to AWS Transit Gateway. Customers commonly use Transit Gateway to route traffic from Amazon Virtual Private Cloud (Amazon VPC) networks to a centralized inspection VPC (a VPC dedicated to hosting firewall endpoints for traffic inspection) where their network firewall endpoints are deployed. This centralized deployment model reduces the […]</description>
										<content:encoded>&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Network Firewall&lt;/a&gt;&lt;/span&gt; now supports native attachment to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/transit-gateway/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Transit Gateway&lt;/a&gt;&lt;/span&gt;. Customers commonly use Transit Gateway to route traffic from &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/vpc/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Virtual Private Cloud (Amazon VPC)&lt;/a&gt;&lt;/span&gt; networks to a centralized inspection VPC (a VPC dedicated to hosting firewall endpoints for traffic inspection) where their network firewall endpoints are deployed. This centralized deployment model reduces the need to have Network Firewall endpoints in each VPC, optimizing costs and providing a centralized point of network security control.&lt;/p&gt; 
&lt;p&gt;Customers deploying Network Firewall in a centralized deployment model using Transit Gateway have traditionally set up a dedicated inspection VPC with firewall subnets and managed the associated routing to direct traffic through the firewall. With native attachment, Network Firewall attaches directly to Transit Gateway, eliminating the need for the inspection VPC and enabling capabilities such as flexible cost allocation through Transit Gateway metering policies.&lt;/p&gt; 
&lt;p&gt;In this post, we explain what a Transit Gateway-attached network firewall is, the technical capabilities it unlocks, reasons to migrate to it, and how to perform the migration. For detailed step-by-step guidance on how to perform the migration using &lt;a href="https://developer.hashicorp.com/terraform" rel="noopener" target="_blank"&gt;Terraform&lt;/a&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudformation/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudFormation&lt;/a&gt;&lt;/span&gt;, or manually in the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/console/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Management Console&lt;/a&gt;&lt;/span&gt;, see the accompanying &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" target="_blank" rel="noopener" data-cms-ai="0"&gt;migration guide repository&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;What is a Transit Gateway-attached network firewall?&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;A &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/tgw-firewall.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Transit Gateway-attached network firewall&lt;/a&gt;&lt;/span&gt; simplifies your network architecture by eliminating the need for a dedicated inspection VPC. Instead of creating an inspection VPC with firewall subnets and configuring the associated routing, you create your network firewall and specify which Transit Gateway instance you want to attach it to. AWS deploys the firewall endpoints into an AWS-managed VPC on your behalf. You don’t own or manage that VPC. From your perspective, the firewall appears as a Transit Gateway network function attachment that you route traffic to, similar to other Transit Gateway attachments.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Why migrate to a Transit Gateway-attached network firewall?&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;You might want to migrate to a Transit Gateway-attached network firewall for the following reasons:&lt;/p&gt; 
&lt;ul id="rte-3ce04240-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Access to flexible cost allocation&lt;/b&gt;: With native attachment, you can use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/tgw/metering-policy.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Transit Gateway metering policies&lt;/a&gt;&lt;/span&gt; to charge back account owners for traffic they send through the centralized firewall. Flexible cost allocation for Network Firewall traffic over a Transit Gateway is only available with a Transit Gateway-attached firewall. Without native attachment, you can only allocate Transit Gateway data processing charges, not the Network Firewall charges.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Reduced architectural complexity&lt;/b&gt;: You can eliminate the inspection VPC, leaving one less VPC to manage along with its associated routing tables and subnets.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Preparing for the change&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Before migrating to a Transit Gateway-attached network firewall, gather the following information and keep these key considerations in mind.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;When you create your new Transit Gateway-attached network firewall, you will need:&lt;/p&gt; 
&lt;ul id="rte-3ce04241-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Transit Gateway ID&lt;/b&gt;: The ID of the Transit Gateway instance you will attach your network firewall to.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Logging configuration&lt;/b&gt;: Create a new logging configuration (such as new &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudwatch/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch&lt;/a&gt;&lt;/span&gt; log groups) for the new firewall. During migration, you will be running both firewalls simultaneously. Keeping the logs separate simplifies monitoring and troubleshooting each firewall during the migration period. After migration is complete, you can point the new firewall to your existing logging destinations.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Firewall policy&lt;/b&gt;: Create a new firewall policy for the new firewall rather than reusing your existing one. During the migration period, a separate policy lets you make changes to the new firewall’s policy without affecting the existing firewall while both are running simultaneously. After migration is complete, you can attach your existing production policy to the new firewall.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Key considerations&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;There are some important considerations to address while planning for this change.&lt;/p&gt; 
&lt;ul id="rte-3ce04242-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Transit Gateway encryption&lt;/b&gt;: Check if you’re using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Transit Gateway encryption support&lt;/a&gt;&lt;/span&gt;. If encryption is enabled and required for your security posture, native attachment to Network Firewall doesn’t currently support this capability. You will need to continue using your current firewall configuration.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;NAT gateway Elastic IPs&lt;/b&gt;: If you need to maintain the same public IPs (for example, for partner allowlisting), plan for this during migration. For more information, see the &lt;a href="#preserve"&gt;Preserving your NAT gateway Elastic IPs during migration&lt;/a&gt; section later in this post.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Maintenance window&lt;/b&gt;: Plan to perform this migration during a dedicated maintenance window. Brief network outages will occur during parts of the process, such as when swapping Transit Gateway route table associations and replacing NAT gateways.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Performing the migration&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Leave your existing Network Firewall setup unchanged while setting up the new Transit Gateway-attached firewall. With this approach, you can minimize potential downtime and test the new configuration before migrating production traffic.&lt;/p&gt; 
&lt;p&gt;The migration process varies depending on your current architecture. The following sections walk through the two most common centralized Network Firewall architectures and the high-level migration process for each. For detailed step-by-step guidance on how to perform the migration using Terraform, CloudFormation, or manually in the console, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" target="_blank" rel="noopener" data-cms-ai="0"&gt;migration guide repository&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Architecture 1: Dedicated inspection VPC with separate egress VPC&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;In this architecture, shown in the following diagram, you have a dedicated inspection VPC with your network firewall endpoints, and a separate dedicated egress VPC with your NAT gateways.&lt;/p&gt; 
&lt;div id="attachment_42413" style="width: 3290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42413" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/updated-figure-1.png" alt="Figure 1: Centralized egress traffic inspection with Network Firewall and Transit Gateway, with inspection and egress separated into two VPCs." width="3280" height="1524" class="size-full wp-image-42413"&gt;
 &lt;p id="caption-attachment-42413" class="wp-caption-text"&gt;Figure 1: Centralized egress traffic inspection with Network Firewall and Transit Gateway, with inspection and egress separated into two VPCs.&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The high-level migration process for this architecture is:&lt;/p&gt; 
&lt;ol id="rte-3ce06950-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Deploy a new egress VPC with a temporary NAT gateway. Creating a new VPC lets you leave the existing deployment unchanged while working on the migration.&lt;/li&gt; 
 &lt;li&gt;Create your new network firewall with native attachment to your Transit Gateway.&lt;/li&gt; 
 &lt;li&gt;Configure three new Transit Gateway route tables to define the traffic path through the new firewall: an inspection route table (associated with the new firewall), an egress route table (associated with the new egress VPC), and a temporary migrated spoke route table (for testing individual spoke VPCs on the new path).&lt;/li&gt; 
 &lt;li&gt;Test the new firewall by moving a single spoke VPC to the new path. Verify connectivity and confirm the firewall is inspecting traffic by checking the alert logs for layer 7 (application layer) details. Layer 7 information in the alert logs indicates the firewall is seeing both directions of the traffic flow. If asymmetric routing were occurring, the firewall would only see one direction and would not be able to perform application-layer inspection, so the presence of layer 7 details confirms traffic is flowing symmetrically through the new firewall.&lt;/li&gt; 
 &lt;li&gt;Migrate the remaining spoke VPCs. You can migrate VPCs incrementally, or when you’re confident in the new firewall deployment, update the default route in your existing spoke route table to point to the new Network Firewall network function attachment, which moves all remaining spokes that share that route table at once.&lt;/li&gt; 
 &lt;li&gt;Optionally, preserve your original NAT gateway Elastic IPs by re-routing traffic back to your existing egress VPC (see &lt;a href="#preserve"&gt;Preserving your NAT gateway Elastic IPs during migration&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;Decommission old resources after you’ve verified that traffic is flowing correctly. Which VPCs you remove depends on whether you preserved your original EIPs (see &lt;a href="#preserve"&gt;Preserving your NAT gateway Elastic IPs during migration&lt;/a&gt;).&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_42414" style="width: 3290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42414" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/updated-figure-2.png" alt="Figure 2: Post-migration architecture for Architecture 1, with the inspection VPC eliminated and traffic flowing through the Transit Gateway-attached Network Firewall to a dedicated egress VPC." width="3280" height="1524" class="size-full wp-image-42414"&gt;
 &lt;p id="caption-attachment-42414" class="wp-caption-text"&gt;Figure 2: Post-migration architecture for Architecture 1, with the inspection VPC eliminated and traffic flowing through the Transit Gateway-attached Network Firewall to a dedicated egress VPC.&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;For the complete walkthrough of how to perform this migration:&lt;/p&gt; 
&lt;ul id="rte-3ce06951-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-1-separate-inspection-egress/terraform-migration" target="_blank" rel="noopener" data-cms-ai="0"&gt;Terraform migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-1-separate-inspection-egress/cloudformation-migration" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudFormation migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-1-separate-inspection-egress/manual-console-steps" target="_blank" rel="noopener" data-cms-ai="0"&gt;Manual console migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Architecture 2: Combined inspection and egress VPC&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;In this architecture, shown in the following diagram, you have a single VPC that contains both your network firewall endpoints and your NAT gateways.&lt;/p&gt; 
&lt;div id="attachment_42415" style="width: 3368px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42415" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/updated-figure-3.png" alt="Figure 3: Centralized egress traffic inspection with Network Firewall and Transit Gateway, with inspection and egress combined in one VPC." width="3358" height="1460" class="size-full wp-image-42415"&gt;
 &lt;p id="caption-attachment-42415" class="wp-caption-text"&gt;Figure 3: Centralized egress traffic inspection with Network Firewall and Transit Gateway, with inspection and egress combined in one VPC.&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The migration process for this architecture follows the same high-level steps as Architecture 1.&lt;/p&gt; 
&lt;ol id="rte-3ce06952-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Deploy a new dedicated egress VPC with a temporary NAT gateway. Creating a new VPC lets you leave the existing deployment unchanged while working on the migration.&lt;/li&gt; 
 &lt;li&gt;Create your new network firewall with native attachment to your Transit Gateway.&lt;/li&gt; 
 &lt;li&gt;Configure three new Transit Gateway route tables to define the traffic path through the new firewall: an inspection route table, an egress route table, and a temporary migrated spoke route table.&lt;/li&gt; 
 &lt;li&gt;Test the new firewall by moving a single spoke VPC to the new path. Verify connectivity and confirm the firewall is inspecting traffic by checking the alert logs for layer 7 (application layer) details. Layer 7 information in the alert logs indicates the firewall is seeing both directions of the traffic flow. If asymmetric routing were occurring, the firewall would only see one direction and would not be able to perform application-layer inspection, so the presence of layer 7 details confirms traffic is flowing symmetrically through the new firewall.&lt;/li&gt; 
 &lt;li&gt;Migrate the remaining spoke VPCs. You can migrate VPCs incrementally, or once you are confident in the new firewall deployment, update the default route in your existing spoke route table to point to the new Network Firewall network function attachment, which moves all remaining spokes that share that route table at once.&lt;/li&gt; 
 &lt;li&gt;Optionally, preserve your original NAT gateway Elastic IPs by transferring them to the new egress VPC.&lt;/li&gt; 
 &lt;li&gt;Decommission the old combined VPC after you’ve verified that traffic is flowing correctly.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_42416" style="width: 3290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42416" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/updated-figure-4.png" alt="Figure 4: Post-migration architecture for Architecture 2, with the combined VPC eliminated and traffic flowing through the Transit Gateway-attached Network Firewall to a dedicated egress VPC." width="3280" height="1524" class="size-full wp-image-42416"&gt;
 &lt;p id="caption-attachment-42416" class="wp-caption-text"&gt;Figure 4: Post-migration architecture for Architecture 2, with the combined VPC eliminated and traffic flowing through the Transit Gateway-attached Network Firewall to a dedicated egress VPC.&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;For the complete walkthrough of how to perform this migration, see:&lt;/p&gt; 
&lt;ul id="rte-3ce06953-4974-11f1-a30a-c3ef0a8c0d48" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-2-combined-inspection-egress/terraform-migration" target="_blank" rel="noopener" data-cms-ai="0"&gt;Terraform migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-2-combined-inspection-egress/cloudformation-migration" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudFormation migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance/tree/main/architecture-2-combined-inspection-egress/manual-console-steps" target="_blank" rel="noopener" data-cms-ai="0"&gt;Manual console migration guide&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Differences between the two migrations&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Both architectures deploy the same new resources and use the same phased cutover approach. The differences are in the starting Transit Gateway routing structure (Architecture 1 has three route tables across two VPCs, Architecture 2 has two route tables in one VPC) and what you clean up at the end (two old VPCs instead of one). Both architectures converge to the same end state. For a detailed comparison, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" target="_blank" rel="noopener" data-cms-ai="0"&gt;migration guide repository&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Minimizing downtime and testing your migration&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Regardless of which architecture you’re migrating from, follow these best practices to minimize risk.&lt;/p&gt; 
&lt;p&gt;The &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" target="_blank" rel="noopener" data-cms-ai="0"&gt;migration guide repository&lt;/a&gt;&lt;/span&gt; includes starting architecture CloudFormation and Terraform templates for both architectures, so you can deploy the exact starting environment in a development or test account and run through the entire migration process before touching production.&lt;/p&gt; 
&lt;p&gt;Test before you migrate. Create your new Transit Gateway-attached firewall in parallel with your existing setup. Use a test VPC to validate the new configuration. Verify that logging is working correctly and that the firewall alert logs show layer 7 traffic details, which confirms there is no asymmetric routing. Test both allowed and blocked traffic scenarios before migrating production traffic.&lt;/p&gt; 
&lt;p&gt;Migrate in phases. Start with a single, non-critical workload VPC. Update only that VPC’s routes to use the new firewall attachment. Monitor and verify application behavior and performance with the application owner before proceeding. When planning your migration order, migrate spoke VPCs that have east-west traffic between each other at the same time. During the phased migration, spokes on different firewall paths will have their east-west traffic traverse two stateful firewalls. Because each stateful firewall independently tracks connection state, traffic that enters through one firewall and returns through another appears as untracked, causing the firewalls to drop or incorrectly handle the return traffic. When you’re confident in the new firewall deployment, you can update the default route in your existing spoke route table to point to the new firewall, which moves all remaining spokes that share that route table at once. Keep your old firewall configuration active until all traffic is migrated.&lt;/p&gt; 
&lt;p&gt;Prepare a rollback plan. Document your current route table configurations before making changes. Keep your existing firewall and inspection VPC active during migration. If issues arise, revert the route table changes to restore the previous configuration. Decommission old resources after you’ve verified applications are operating as expected.&lt;/p&gt; 
&lt;p id="preserve"&gt;&lt;/p&gt; 
&lt;h2&gt;Preserving your NAT gateway Elastic IPs during migration&lt;/h2&gt; 
&lt;p&gt;An important consideration during migration is maintaining your existing &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" rel="noopener" target="_blank"&gt;NAT gateway&lt;/a&gt; Elastic IP addresses. Many organizations have these IPs allowlisted with external partners, third-party services, or in firewall rules. Changing these IPs would require coordination with multiple stakeholders and could disrupt business operations.&lt;/p&gt; 
&lt;p&gt;During migration, you need both your old and new deployments to operate simultaneously, so you can validate the new setup without impacting production traffic. This means creating temporary NAT gateways with temporary Elastic IPs in the new egress VPC. &lt;/p&gt; 
&lt;p&gt;After you’ve confirmed the new firewall deployment is stable and production traffic has been successfully migrated, you can restore your original Elastic IPs. The process differs depending on your architecture:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For Architecture 1 (separate inspection and egress VPCs), your existing egress VPC and its NAT gateways are independent of the inspection VPC being decommissioned. You can keep them by re-associating the existing egress VPC’s Transit Gateway attachment with the new egress route table and updating the inspection route table to route traffic there instead of the temporary egress VPC. This is a Transit Gateway routing change that takes seconds, doesn’t require deleting or creating any NAT gateways, and doesn’t increase in complexity with the number of Availability Zones. After the re-association, you delete the temporary egress VPC.&lt;/li&gt; 
 &lt;li&gt;For Architecture 2 (combined inspection and egress VPC), the old VPC contains both the firewall endpoints and the NAT gateways. The simplest path is to decommission it and move the Elastic IPs to the new egress VPC. To do this, you delete the old NAT gateways to free the Elastic IPs, then create new NAT gateways in the new egress VPC with the original Elastic IPs. This requires a brief maintenance window while the new NAT gateways provision and must be repeated for each Availability Zone.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For the detailed step-by-step procedure, see the EIP preservation steps in the &lt;a href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" rel="noopener" target="_blank"&gt;migration guide repository&lt;/a&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;In this post, we explained what a Transit Gateway-attached network firewall is and how it differs from the traditional inspection VPC model, the reasons to migrate including reduced architectural complexity and flexible cost allocation, what to prepare before starting, and the high-level migration process for the two most common centralized inspection architectures. We also covered best practices for minimizing downtime, handling east-west traffic between spokes during phased migration, and preserving your existing NAT gateway Elastic IPs.&lt;/p&gt; 
&lt;p&gt;With a Transit Gateway-attached network firewall, AWS manages the firewall endpoints and the underlying VPC on your behalf, eliminating the inspection VPC from your architecture and enabling flexible cost allocation through Transit Gateway metering policies. The phased migration approach covered in this post lets you run both firewalls in parallel, validate the new path with a single spoke VPC, and cut over the rest of your traffic when you are ready.&lt;/p&gt; 
&lt;p&gt;For detailed step-by-step guidance using Terraform, CloudFormation, or the AWS Management Console for both architectures covered in this post, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/sample-transit-gateway-attached-nfw-migration-guidance" target="_blank" rel="noopener" data-cms-ai="0"&gt;migration guide repository&lt;/a&gt;&lt;/span&gt;. The repository includes starting architecture templates so you can practice the full migration end-to-end in a test account before migrating your production environment.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/Frank-Phillis.jpg" alt="Frank Phillis" width="120" height="160" class="aligncenter size-full wp-image-42418"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Frank Phillis&lt;/h3&gt; 
  &lt;p&gt;Frank is a Senior Solutions Architect (Security) at AWS. He enables customers to get their security architecture right. Frank specializes in cryptography, identity, and incident response. He’s the creator of the popular AWS Incident Response playbooks and regularly speaks at security events. When not thinking about tech, Frank can be found with his family, riding bikes, or making music.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/Lawton-Pittenger.png" alt="Lawton Pittenger" width="120" height="160" class="aligncenter size-full wp-image-42420"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Lawton Pittenger&lt;/h3&gt; 
  &lt;p&gt;Lawton is a Worldwide Security Specialist Solutions Architect at AWS, based in New York City. He specializes in helping customers design and implement effective network security controls. At AWS, he works with customers at scale and collaborates closely with service teams to drive continuous improvement in security services based on customer needs and feedback. Outside of work, his interests include skateboarding, snowboarding, and spending time in nature. &lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Simplifying policy management with URL and Domain Category filtering on AWS Network Firewall</title>
		<link>https://aws.amazon.com/blogs/security/simplifying-policy-management-with-url-and-domain-category-filtering-on-aws-network-firewall/</link>
					
		
		<dc:creator><![CDATA[Lawton Pittenger]]></dc:creator>
		<pubDate>Thu, 28 May 2026 18:57:13 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[AWS Network Firewall]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">d3aa88b9f766697640077782b8b5b0add2e759b6</guid>

					<description>Network administrators face a persistent challenge: maintaining domain blocklists and allowlists that keep pace with the internet. New websites and services emerge daily, and keeping these lists current requires constant manual updates that leave gaps in coverage. This challenge intensifies when managing access to rapidly evolving categories like AI services, where new tools launch on […]</description>
										<content:encoded>&lt;p&gt;Network administrators face a persistent challenge: maintaining domain blocklists and allowlists that keep pace with the internet. New websites and services emerge daily, and keeping these lists current requires constant manual updates that leave gaps in coverage. This challenge intensifies when managing access to rapidly evolving categories like AI services, where new tools launch on a regular basis.&lt;/p&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/network-firewall/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Network Firewall&lt;/a&gt;&lt;/span&gt; is a managed, stateful network firewall and intrusion detection and prevention service for fine-grained control of your virtual private cloud (VPC) network traffic. With &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/rule-groups-url-filtering.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;URL and domain category filtering&lt;/a&gt;&lt;/span&gt;, security teams can use predefined categories to control access instead of managing individual domains. AWS-managed URL and domain categories stay current automatically as new domains are registered, removing the need for manual list maintenance.&lt;/p&gt; 
&lt;p&gt;This feature is especially useful for organizations navigating AI governance. Instead of manually tracking every new AI service, you can control access to the entire &lt;i&gt;Artificial Intelligence and Machine Learning&lt;/i&gt; category while creating exceptions for approved services. The same approach works for social media, streaming sites, gambling, and dozens of other categories, all with built-in audit trails for compliance reporting.&lt;/p&gt; 
&lt;p&gt;In this post, we walk through URL and domain category filtering configurations for AWS Network Firewall, from basic rules to exception handling and monitoring strategies that give you visibility into how your workloads interact with external services.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Streamlined policy management with predefined categories&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;With URL and domain category filtering, you control website access using predefined categories instead of individually specifying sites in a domain list rule group. You can select from AWS-managed categories such as &lt;i&gt;Social Networking&lt;/i&gt;, &lt;i&gt;Gambling&lt;/i&gt;, or &lt;i&gt;Artificial Intelligence and Machine Learning&lt;/i&gt; to implement and maintain filtering policies. AWS keeps these categories current automatically, so you don’t need to update firewall policies when new domains are registered.&lt;/p&gt; 
&lt;p&gt;Network Firewall offers two category filtering options. Domain category filters by domain name using the TLS Server Name Indication (SNI) field, with no decryption required. URL category filters by the full URL path, which requires &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/tls-inspection-configurations.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;TLS inspection&lt;/a&gt;&lt;/span&gt; for HTTPS traffic. To keep things straightforward, this post focuses on domain category filtering. To set up URL category filtering with TLS inspection, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/creating-tls-configuration.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Creating a TLS inspection configuration in Network Firewall&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To follow the steps in this post, start by making sure that you have the following prerequisites in place:&lt;/p&gt; 
&lt;ol id="rte-14015260-4294-11f1-b476-33ccc0b549e3" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;&lt;b&gt;An existing Network Firewall deployment:&lt;/b&gt; This walkthrough assumes you have an existing Network Firewall deployment to filter egress traffic flows from your &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/vpc" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Virtual Private Cloud (Amazon VPC)&lt;/a&gt;&lt;/span&gt; in place. If you aren’t already using Network Firewall, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Getting started with AWS Network Firewall&lt;/a&gt;&lt;/span&gt; to set up your firewall before proceeding.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;The HOME_NET variable set correctly at the firewall policy level:&lt;/b&gt; The rules in this post use the &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET&lt;/code&gt; variable to scope traffic to your internal network. In the AWS Management Console for Amazon VPC, select your firewall policy under the &lt;b&gt;Firewall policies&lt;/b&gt; tab, select the &lt;b&gt;Details&lt;/b&gt; tab, and check the policy variables section under &lt;b&gt;HOME_NET variable override values&lt;/b&gt;. We recommend setting this to all RFC 1918 private IP address ranges: &lt;code class="CodeInline" style="color: #000"&gt;10.0.0.0/8&lt;/code&gt;, &lt;code class="CodeInline" style="color: #000"&gt;172.16.0.0/12&lt;/code&gt;, and &lt;code class="CodeInline" style="color: #000"&gt;192.168.0.0/16&lt;/code&gt;. When you set &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET&lt;/code&gt; at the policy level, all rule groups associated with that policy inherit the value automatically. Network Firewall automatically maps &lt;code class="CodeInline" style="color: #000"&gt;$EXTERNAL_NET&lt;/code&gt; to the inverse of &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET&lt;/code&gt;, so configuring &lt;code class="CodeInline" style="color: #000"&gt;HOME_NET&lt;/code&gt; correctly also configures &lt;code class="CodeInline" style="color: #000"&gt;$EXTERNAL_NET&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_42378" style="width: 985px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42378" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-1.png" alt="Figure 1: Firewall policy details tab showing the HOME_NET variable override values set to RFC 1918 private IP address ranges" width="975" height="658" class="size-full wp-image-42378" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42378" class="wp-caption-text"&gt;Figure 1: Firewall policy details tab showing the HOME_NET variable override values set to RFC 1918 private IP address ranges&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Create a category rule using the console rule builder&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To get started quickly, you can create a domain category rule using the console’s built-in rule builder. In this example, we create a single alert rule for the Artificial Intelligence and Machine Learning category.&lt;/p&gt; 
&lt;ol id="rte-448e8561-4294-11f1-bcd0-11b7936b001a" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Open the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://console.aws.amazon.com/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Management Console&lt;/a&gt;&lt;/span&gt;, search for and open the Amazon VPC console.&lt;/li&gt; 
 &lt;li&gt;In the left navigation, scroll to &lt;b&gt;Network Firewall &lt;/b&gt;and select &lt;b&gt;Rule groups&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Create rule group&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule group type&lt;/b&gt;, select &lt;b&gt;Stateful rule group&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule group format&lt;/b&gt;, select &lt;b&gt;Standard stateful rules&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule evaluation order&lt;/b&gt;, select &lt;b&gt;Strict order&lt;/b&gt;. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;br&gt; 
  &lt;div id="attachment_42379" style="width: 1682px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42379" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-2.png" alt="Figure 2: Create Network Firewall rule group page showing Stateful rule group type, Standard stateful rules format, and Strict order evaluation selected" width="1672" height="571" class="size-full wp-image-42379" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42379" class="wp-caption-text"&gt;Figure 2: Create Network Firewall rule group page showing Stateful rule group type, Standard stateful rules format, and Strict order evaluation selected&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Enter &lt;code class="CodeInline" style="color: #000"&gt;Domain-Category-Rules&lt;/code&gt; for the &lt;b&gt;Name&lt;/b&gt;, &lt;code class="CodeInline" style="color: #000"&gt;Domain Category Rules&lt;/code&gt; for the &lt;b&gt;Description&lt;/b&gt;, and &lt;code class="CodeInline" style="color: #000"&gt;50&lt;/code&gt; for the &lt;b&gt;Capacity&lt;/b&gt;. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;In the rule group editor, select the &lt;b&gt;Category Matching&lt;/b&gt; radio button.&lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Category Matching&lt;/b&gt;, select &lt;b&gt;Match all selected categories&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;AWS category type&lt;/b&gt;, select &lt;b&gt;Domain Category&lt;/b&gt; from the dropdown.&lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Categories&lt;/b&gt;, select &lt;b&gt;Artificial Intelligence and Machine Learning&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Protocol&lt;/b&gt;, select &lt;b&gt;TLS&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Source&lt;/b&gt;, select &lt;b&gt;Custom&lt;/b&gt;, then enter &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET&lt;/code&gt; in the dialog box.&lt;/li&gt; 
 &lt;li&gt;Set the &lt;b&gt;Destination IP&lt;/b&gt; to &lt;b&gt;Any&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Action&lt;/b&gt;, select &lt;b&gt;Alert&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Add rule&lt;/b&gt; to add this rule to the rule group. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;br&gt; 
  &lt;div id="attachment_42380" style="width: 1233px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42380" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-3.png" alt="Figure 3: Completed category matching rule showing TLS protocol, $HOME_NET source, Any destination, and Alert action added to the rule group" width="1223" height="1194" class="size-full wp-image-42380" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42380" class="wp-caption-text"&gt;Figure 3: Completed category matching rule showing TLS protocol, $HOME_NET source, Any destination, and Alert action added to the rule group&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Customer managed key&lt;/b&gt;, leave the default setting (&lt;b&gt;Customize encryption settings&lt;/b&gt; should remain unchecked).&lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Add tags – optional&lt;/b&gt;, leave the default setting of no tags.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Next&lt;/b&gt;, then &lt;b&gt;Create rule group&lt;/b&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This rule generates an alert log entry each time a connection matches a domain in the Artificial Intelligence and Machine Learning category. It doesn’t block traffic. To block traffic, change the action to &lt;b&gt;Drop&lt;/b&gt; or &lt;b&gt;Reject&lt;/b&gt; in step 15.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Creating the same rule using Suricata compatible rule strings&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The console rule builder is a quick way to get started, but we &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.github.io/aws-security-services-best-practices/guides/network-firewall/#use-custom-suricata-rules-instead-of-ui-generated-rules" target="_blank" rel="noopener" data-cms-ai="0"&gt;recommend using Suricata compatible rule strings&lt;/a&gt;&lt;/span&gt; for production deployments. Suricata rules give you full control over rule options, make rules straightforward to copy, edit, share, and back up, and support the majority of the Suricata engine. For more information, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/suricata-limitations-caveats.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Limitations and caveats for stateful rules in AWS Network Firewall&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;The following walkthrough creates the same alert rule you built with the console rule builder, this time using a Suricata rule string.&lt;/p&gt; 
&lt;p&gt;In the Amazon VPC console, navigate to &lt;b&gt;Network Firewall&lt;/b&gt;, then select &lt;b&gt;Network Firewall rule groups&lt;/b&gt;.&lt;/p&gt; 
&lt;ol id="rte-32f67911-4295-11f1-a891-895cf77ef584" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Choose &lt;b&gt;Create rule group&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule group type&lt;/b&gt;, select &lt;b&gt;Stateful rule group&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule group format&lt;/b&gt;, select &lt;b&gt;Suricata compatible rule string&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Rule evaluation order&lt;/b&gt;, select &lt;b&gt;Strict order&lt;/b&gt;. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;br&gt; 
  &lt;div id="attachment_42381" style="width: 1672px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42381" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-4.png" alt="Figure 4: Create Network Firewall rule group page showing Stateful rule group type, Suricata compatible rule string format, and Strict order evaluation selected" width="1662" height="560" class="size-full wp-image-42381" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42381" class="wp-caption-text"&gt;Figure 4: Create Network Firewall rule group page showing Stateful rule group type, Suricata compatible rule string format, and Strict order evaluation selected&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Enter &lt;code class="CodeInline" style="color: #000"&gt;Suricata-Domain-Category-Rules&lt;/code&gt; for the &lt;b&gt;Name&lt;/b&gt;, &lt;code class="CodeInline" style="color: #000"&gt;Suricata Domain Category Rules&lt;/code&gt; for the &lt;b&gt;Description&lt;/b&gt;, and &lt;code class="CodeInline" style="color: #000"&gt;50&lt;/code&gt; for the &lt;b&gt;Capacity&lt;/b&gt;. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Leave the Rule variables section empty. The $HOME_NET variable is inherited from the firewall policy, as configured in the prerequisites.&lt;/li&gt; 
 &lt;li&gt;Leave IP set references empty.&lt;/li&gt; 
 &lt;li&gt;Paste the following rule into the Suricata compatible rule string editor: 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;alert tls $HOME_NET any -&amp;gt; $EXTERNAL_NET any (msg:"Artificial Intelligence and Machine Learning Category"; aws_domain_category:Artificial Intelligence and Machine Learning; sid:1000001;)&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Next&lt;/b&gt;.&lt;br&gt; 
  &lt;div id="attachment_42382" style="width: 1510px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42382" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-5.png" alt="Figure 5: Suricata compatible rule string editor with the domain category alert rule pasted in and the rule variables section left empty" width="1500" height="1120" class="size-full wp-image-42382" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42382" class="wp-caption-text"&gt;Figure 5: Suricata compatible rule string editor with the domain category alert rule pasted in and the rule variables section left empty&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Customer managed key&lt;/b&gt;, leave the default setting (&lt;b&gt;Customize encryption settings&lt;/b&gt; should remain unchecked).&lt;/li&gt; 
 &lt;li&gt;Under &lt;b&gt;Add tags – optional&lt;/b&gt;, leave the default setting of no tags. Choose &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Create rule group&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;After creating the rule group, return to your firewall policy and add it under &lt;b&gt;Stateful rule groups&lt;/b&gt;. We recommend associating new rule groups in a development or test environment first to validate behavior before deploying to production.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The following table explains each component of this rule:&lt;/p&gt; 
&lt;table style="border-collapse: separate;text-indent: initial;border-spacing: 2px;border-color: gray;width: 100%" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;alert&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Action: generate an alert log entry when the rule matches. Other actions include pass, drop, and reject.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;tls&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Protocol: inspect TLS traffic, matching against the SNI field in the TLS Client Hello.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;$HOME_NET any -&amp;gt; $EXTERNAL_NET any&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Source and destination: match traffic from any internal IP address (HOME_NET) and port to any external IP address (EXTERNAL_NET) and port. The HOME_NET variable defines your internal network ranges, and the EXTERNAL_NET variable is automatically set to the inverse.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;msg:”Artificial Intelligence and Machine Learning Category”&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;The message written to the alert log when this rule is triggered.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;aws_domain_category:Artificial Intelligence and Machine Learning&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;The AWS-managed domain category to match against. The firewall looks up the destination domain in the category database and matches if the domain belongs to this category.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;sid:1000001&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;A unique signature ID for this rule. Each rule in a rule group must have a unique SID.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Managing exceptions for approved services&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;You can manage exceptions to keep business-critical websites accessible. For example, say you need to allow access to OpenAI while blocking all other AI and ML traffic. To do this, return to the &lt;b&gt;Suricata-Domain-Category-Rules&lt;/b&gt; rule group you created earlier and replace the basic alert rule with the following ruleset. Select the &lt;b&gt;Suricata-Domain-Category-Rules &lt;/b&gt;rule group, under the &lt;b&gt;Rules&lt;/b&gt; section, choose &lt;b&gt;Edit&lt;/b&gt;.&lt;/p&gt; 
&lt;div id="attachment_42383" style="width: 2550px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42383" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-6.png" alt="Figure 6: Selecting Suricata-Domain-Category-Rules rule group to edit with new rules" width="2540" height="1144" class="size-full wp-image-42383" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42383" class="wp-caption-text"&gt;Figure 6: Selecting Suricata-Domain-Category-Rules rule group to edit with new rules&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;Paste in the following rules and choose &lt;b&gt;Save rule group&lt;/b&gt;.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;# Allow OpenAI (TLS)
pass tls $HOME_NET any -&amp;gt; $EXTERNAL_NET any (tls.sni; dotprefix; content:".openai.com"; nocase; endswith; flow:to_server; alert; msg:"Allow OpenAI over TLS"; sid:1000001;)

# Allow OpenAI (HTTP)
pass http $HOME_NET any -&amp;gt; $EXTERNAL_NET any (http.host; dotprefix; content:".openai.com"; nocase; endswith; flow:to_server; alert; msg:"Allow OpenAI over HTTP"; sid:1000002;)

# Block all other AI/ML category traffic (TLS)
reject tls $HOME_NET any -&amp;gt; $EXTERNAL_NET any (msg:"Block non-approved AI/ML sites over TLS"; aws_domain_category:Artificial Intelligence and Machine Learning; flow:to_server; alert; sid:1000003;)

# Block all other AI/ML category traffic (HTTP)
reject http $HOME_NET any -&amp;gt; $EXTERNAL_NET any (msg:"Block non-approved AI/ML sites over HTTP"; aws_url_category:Artificial Intelligence and Machine Learning; flow:to_server; alert; sid:1000004;)
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42384" style="width: 1876px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42384" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-7.png" alt="Figure 7: Suricata compatible rule string editor with the exception-based ruleset containing pass rules for OpenAI and reject rules for the AI/ML category" width="1866" height="691" class="size-full wp-image-42384" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42384" class="wp-caption-text"&gt;Figure 7: Suricata compatible rule string editor with the exception-based ruleset containing pass rules for OpenAI and reject rules for the AI/ML category&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;With strict order evaluation, the firewall evaluates rules in the order you define them. The pass rules for OpenAI appear first, so matching traffic is allowed before the broader category block rules run.&lt;/p&gt; 
&lt;p&gt;To verify the rules are working as expected, test from a host that routes traffic through your network firewall. These commands suppress the response body and check the exit code of the curl request. If curl completes a TCP connection, it prints &lt;code class="CodeInline" style="color: #000"&gt;CONNECTION ALLOWED&lt;/code&gt;. If the firewall resets the connection, curl exits with a non-zero code and prints &lt;code class="CodeInline" style="color: #000"&gt;CONNECTION BLOCKED&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;A request to openai.com should succeed because it matches the pass rule:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;curl -s -o /dev/null https://openai.com &amp;amp;&amp;amp; echo "CONNECTION ALLOWED" || echo "CONNECTION BLOCKED"&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;Result: CONNECTION ALLOWED&lt;/p&gt; 
&lt;p&gt;A request to chat.mistral.ai should be rejected because it matches the broader AI/ML category block rule:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;curl -s -o /dev/null https://chat.mistral.ai &amp;amp;&amp;amp; echo "CONNECTION ALLOWED" || echo "CONNECTION BLOCKED"&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;Result: CONNECTION BLOCKED&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;How to monitor category usage&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;When you add a domain category rule to your firewall policy, Network Firewall performs a category lookup for every connection that matches the rule’s protocol and IP specifications. The rules in this post match on &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET any -&amp;gt; $EXTERNAL_NET any&lt;/code&gt;, which means the firewall looks up the category for all outbound traffic originating from your internal network. This is why it’s important to have the &lt;code class="CodeInline" style="color: #000"&gt;$HOME_NET&lt;/code&gt; variable configured correctly at the firewall policy level. With this configuration, a single category rule is enough for category metadata to appear in your firewall logs across all matching connections, not just connections that match the specific category in your rule.&lt;/p&gt; 
&lt;p&gt;Each log entry includes an &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; field containing a JSON array of all categories the destination domain belongs to. A single domain can map to multiple categories. For example, a request to chat.mistral.ai produces a log entry with &lt;code class="CodeInline" style="color: #000"&gt;“aws_category": "[\"Social Networking\",\"Artificial Intelligence and Machine Learning\"]”&lt;/code&gt; because that domain belongs to both categories.&lt;/p&gt; 
&lt;p&gt;You can access firewall logs through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudwatch/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;&lt;/span&gt;, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/firehose" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Data Firehose&lt;/a&gt;&lt;/span&gt;. These logs show which categorized websites your workloads access, helping you track usage patterns and enforce acceptable use policies.&lt;/p&gt; 
&lt;p&gt;The following sample log entry shows what a blocked request to chat.mistral.ai looks like using the exception-based rules from the previous section. The &lt;code class="CodeInline" style="color: #000"&gt;alert.signature&lt;/code&gt; field contains the rule’s &lt;code class="CodeInline" style="color: #000"&gt;msg&lt;/code&gt; value, and the &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; field lists all categories the destination domain belongs to:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{ 

     "firewall_name": "egress-and-east-west-firewall", 

     "availability_zone": "us-east-1a", 

     "event_timestamp": "1775599146", 

     "event": { 

          "aws_category": "[\"Social Networking\",\"Artificial Intelligence and Machine Learning\"]", 

          "tx_id": 0, 

          "app_proto": "tls", 

          "src_ip": "10.1.1.100", 

          "src_port": 58664, 

          "event_type": "alert", 

          "alert": { 

                    "severity": 3, 

                    "signature_id": 1000003, 

                    "rev": 1, "signature": 

                    "Block non-approved AI/ML sites over TLS", 

                    "action": "blocked", 

                    "category": "" 

          }, 

          "flow_id": 763153567844057, 

          "dest_ip": "172.66.2.203", 

          "proto": "TCP", 

          "verdict": { 

                    "action": "drop", 

                    "reject-target": "to_client", 

                    "reject": [ 

                         "tcp-reset" 

                    ] 

          }, 

          "tls": { 

               "sni": "chat.mistral.ai", 

               "version": "UNDETERMINED" 

          }, 

          "dest_port": 443, 

          "pkt_src": "geneve encapsulation", 

          "timestamp": "2026-04-07T21:59:06.906761+0000", 

          "direction": "to_server" 

     } 

} &lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;The &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; field shows the domain belongs to both the &lt;code class="CodeInline" style="color: #000"&gt;“Social Networking”&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;“Artificial Intelligence and Machine Learning”&lt;/code&gt; categories. The verdict field confirms the connection was dropped with a TCP reset sent to the client.&lt;/p&gt; 
&lt;p&gt;Traffic that matches a &lt;code class="CodeInline" style="color: #000"&gt;pass&lt;/code&gt; rule with the &lt;code class="CodeInline" style="color: #000"&gt;alert&lt;/code&gt; keyword also generates a log entry with the &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; field populated. For example, a connection to chat.openai.com that matches the OpenAI exception rule from the earlier section produces a log entry with &lt;code class="CodeInline" style="color: #000"&gt;alert.action&lt;/code&gt; set to &lt;code class="CodeInline" style="color: #000"&gt;“allowed”&lt;/code&gt; and the same category metadata. This means your queries capture both blocked and allowed traffic.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Querying logs with CloudWatch Logs Insights&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;If you send your firewall logs to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch Logs&lt;/a&gt;&lt;/span&gt;, you can use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;CloudWatch Logs Insights&lt;/a&gt;&lt;/span&gt; to analyze category traffic patterns. A single connection can generate multiple log entries (for example, a reject rule log and a default action log for the same flow), so the following queries deduplicate by &lt;code class="CodeInline" style="color: #000"&gt;flow_id&lt;/code&gt; to count each connection only once. Because a single domain can belong to multiple categories, results are grouped by category combination. For example, traffic to a domain categorized as both &lt;code class="CodeInline" style="color: #000"&gt;“Social Networking”&lt;/code&gt; and &lt;code class="CodeInline" style="color: #000"&gt;“Artificial Intelligence and Machine Learning”&lt;/code&gt; appears as a single combined entry.&lt;/p&gt; 
&lt;p&gt;To get started, navigate to the &lt;b&gt;CloudWatch console&lt;/b&gt;. In the left navigation pane under &lt;b&gt;Logs&lt;/b&gt;, select &lt;b&gt;Logs Insights&lt;/b&gt;. Under &lt;b&gt;Query scope&lt;/b&gt;, leave &lt;b&gt;Log group name&lt;/b&gt; selected, then select your AWS Network Firewall alert logs log group. For the time window, we recommend starting with the default of &lt;b&gt;1 hour&lt;/b&gt; to keep the queries light. Enter each of the following queries into the editor and choose &lt;b&gt;Run query&lt;/b&gt; to review the results. Note that CloudWatch Logs Insights queries incur charges based on the amount of data scanned. See &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudwatch/pricing/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon CloudWatch pricing&lt;/a&gt;&lt;/span&gt; for details.&lt;/p&gt; 
&lt;h4&gt;Most accessed categories&lt;/h4&gt; 
&lt;p&gt;This query shows which category combinations your workloads connect to most frequently:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp, event.aws_category, event.flow_id
| filter ispresent(event.aws_category) and event.aws_category != "[]"
| stats latest(event.aws_category) as categories by event.flow_id
| stats count(*) as connections by categories
| sort connections desc
| limit 20
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42385" style="width: 2287px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42385" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-8-10.png" alt="Figure 8: CloudWatch Logs Insights query results showing the most frequently accessed category combinations sorted by connection count" width="2277" height="1062" class="size-full wp-image-42385" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42385" class="wp-caption-text"&gt;Figure 8: CloudWatch Logs Insights query results showing the most frequently accessed category combinations sorted by connection count&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Least accessed categories&lt;/h4&gt; 
&lt;p&gt;This query reverses the sort order to surface category combinations with the fewest connections, helping you identify categories that might not be relevant to your environment or that warrant further investigation:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp, event.aws_category, event.flow_id
| filter ispresent(event.aws_category) and event.aws_category != "[]"
| stats latest(event.aws_category) as categories by event.flow_id
| stats count(*) as connections by categories
| sort connections asc
| limit 20
&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42386" style="width: 2290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42386" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-9.png" alt="Figure 9: CloudWatch Logs Insights query results showing the least frequently accessed category combinations sorted by connection count ascending" width="2280" height="1049" class="size-full wp-image-42386" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42386" class="wp-caption-text"&gt;Figure 9: CloudWatch Logs Insights query results showing the least frequently accessed category combinations sorted by connection count ascending&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Most accessed categories, allowed traffic only&lt;/h4&gt; 
&lt;p&gt;The &lt;code class="CodeInline" style="color: #000"&gt;event.verdict.action&lt;/code&gt; field indicates the actual outcome of each connection:&lt;code class="CodeInline" style="color: #000"&gt;drop&lt;/code&gt; for blocked traffic and &lt;code class="CodeInline" style="color: #000"&gt;alert&lt;/code&gt; for allowed traffic. This query shows which category combinations have the most allowed connections:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp, event.aws_category, event.flow_id, event.verdict.action
| filter ispresent(event.aws_category) and event.aws_category != "[]"
| stats latest(event.aws_category) as categories, latest(event.verdict.action) as verdict by event.flow_id
| filter verdict = "alert"
| stats count(*) as connections by categories
| sort connections desc
| limit 20&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42387" style="width: 2288px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42387" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-10-2.png" alt="Figure 10: CloudWatch Logs Insights query results showing the most accessed category combinations filtered to allowed traffic only" width="2278" height="1053" class="size-full wp-image-42387" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42387" class="wp-caption-text"&gt;Figure 10: CloudWatch Logs Insights query results showing the most accessed category combinations filtered to allowed traffic only&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Most accessed categories, blocked traffic only&lt;/h4&gt; 
&lt;p&gt;The same query filtered to blocked connections. Change the verdict filter to &lt;code class="CodeInline" style="color: #000"&gt;drop&lt;/code&gt;:&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp, event.aws_category, event.flow_id, event.verdict.action
| filter ispresent(event.aws_category) and event.aws_category != "[]"
| stats latest(event.aws_category) as categories, latest(event.verdict.action) as verdict by event.flow_id
| filter verdict = "drop"
| stats count(*) as connections by categories
| sort connections desc
| limit 20&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42389" style="width: 2291px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42389" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-11.png" alt="Figure 11: CloudWatch Logs Insights query results showing the most accessed category combinations filtered to blocked traffic only" width="2281" height="1035" class="size-full wp-image-42389" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42389" class="wp-caption-text"&gt;Figure 11: CloudWatch Logs Insights query results showing the most accessed category combinations filtered to blocked traffic only&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Drill down into a specific category&lt;/h4&gt; 
&lt;p&gt;This query uses a &lt;code class="CodeInline" style="color: #000"&gt;like&lt;/code&gt; filter to find all traffic where the &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; field contains a specific category, regardless of what other categories the domain also belongs to. In this example, the query returns all domains your workloads have connected to that map to the &lt;code class="CodeInline" style="color: #000"&gt;Artificial Intelligence and Machine Learning&lt;/code&gt; category, broken down by domain and verdict. Replace the category name in the &lt;code class="CodeInline" style="color: #000"&gt;like&lt;/code&gt; filter to investigate any category.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp, event.tls.sni, event.aws_category, event.verdict.action, event.flow_id
| filter ispresent(event.aws_category) and event.aws_category like /Artificial Intelligence and Machine Learning/
| stats latest(event.tls.sni) as sni, latest(event.verdict.action) as verdict by event.flow_id
| stats count(*) as connections by sni, verdict
| sort connections desc
| limit 20&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42390" style="width: 2288px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42390" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-12.png" alt="Figure 12: CloudWatch Logs Insights query results showing a drill down into the Artificial Intelligence and Machine Learning category with connections broken down by domain and verdict" width="2278" height="1065" class="size-full wp-image-42390" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42390" class="wp-caption-text"&gt;Figure 12: CloudWatch Logs Insights query results showing a drill down into the Artificial Intelligence and Machine Learning category with connections broken down by domain and verdict&lt;/p&gt;
&lt;/div&gt; 
&lt;h4&gt;Bandwidth consumption by category&lt;/h4&gt; 
&lt;p&gt;This query shows which category combinations consume the most egress bandwidth. It correlates flow logs (which contain byte counts) with alert logs (which contain category data) using the shared &lt;code class="CodeInline" style="color: #000"&gt;flow_id&lt;/code&gt; field. To run this query, select both your alert log group and your flow log group in CloudWatch Logs Insights.&lt;/p&gt; 
&lt;div class="Enhancement" data-align-center=""&gt; 
 &lt;div class="Enhancement-item"&gt; 
  &lt;div class="CodeBlockWP hide-language"&gt; 
   &lt;div class="code-toolbar"&gt; 
    &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;fields @timestamp
| filter ispresent(event.netflow.bytes) or ispresent(event.aws_category)
| stats sum(event.netflow.bytes) as flowBytes, latest(event.aws_category) as categories by event.flow_id
| filter ispresent(categories) and categories != "[]"
| stats sum(flowBytes) as totalBytes by categories
| sort totalBytes desc
| limit 20&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;div id="attachment_42391" style="width: 2288px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42391" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/figure-13.png" alt="Figure 13: CloudWatch Logs Insights query results showing bandwidth consumption by category combination sorted by total bytes descending" width="2278" height="1086" class="size-full wp-image-42391" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42391" class="wp-caption-text"&gt;Figure 13: CloudWatch Logs Insights query results showing bandwidth consumption by category combination sorted by total bytes descending&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;These queries help you identify which categories your workloads access by volume, surface blocked and allowed traffic patterns, and pinpoint where the bulk of your egress bandwidth is going.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;In this post, you walked through how to set up URL and domain category filtering on AWS Network Firewall, from creating your first category rule using both the console rule builder and Suricata compatible rule strings, to managing exceptions for approved services and monitoring category traffic patterns with CloudWatch Logs Insights. With AWS-managed categories that stay current automatically, you can control access to broad classes of websites without maintaining individual domain lists, and the built-in &lt;code class="CodeInline" style="color: #000"&gt;aws_category&lt;/code&gt; log field gives you the visibility to track how your workloads interact with external services.&lt;/p&gt; 
&lt;p&gt;This feature is available in all AWS commercial regions where AWS Network Firewall is supported.&lt;/p&gt; 
&lt;p&gt;To learn more, visit the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/network-firewall" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Network Firewall product page&lt;/a&gt;&lt;/span&gt; and the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/network-firewall/latest/developerguide/rule-groups-url-filtering.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;feature documentation&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/Lawton-Pittenger.png" alt="Lawton Pittenger" width="120" height="160" class="aligncenter size-full wp-image-42420"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Lawton Pittenger&lt;/h3&gt; 
  &lt;p&gt;Lawton is a Worldwide Security Specialist Solutions Architect at AWS, based in New York City. He specializes in helping customers design and implement effective network security controls. At AWS, he works with customers at scale and collaborates closely with service teams to drive continuous improvement in security services based on customer needs and feedback. Outside of work, his interests include skateboarding, snowboarding, and spending time in nature.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/Sofia-Aluma.jpg" alt="Sofia Aluma" width="120" height="160" class="aligncenter size-full wp-image-42393"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Sofia Aluma-Santos&lt;/h3&gt; 
  &lt;p&gt;Sofía is a Sr. Security Specialist leading Network Security Go-To-Market and strategy. She helps customers build scalable, secure, resilient networks.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/Eric-Fortenbery.jpg" alt="Eric Fortenbery" width="120" height="160" class="aligncenter size-full wp-image-42395"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Eric Fortenbery&lt;/h3&gt; 
  &lt;p&gt;Eric is an AWS Solutions Architect based in Atlanta, GA who helps EdTech customers architect secure, scalable platforms.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/Mostafa-Elkhouly.png" alt="Mostafa Elkhouly" width="125" height="125" class="aligncenter size-full wp-image-42397"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Mostafa Elkhouly&lt;/h3&gt; 
  &lt;p&gt;With over a decade of experience in networking technologies and security, I’m your go-to tech enthusiast! When I’m not jet-setting or tinkering with the latest gadgets, I thrive on empowering customers to harness the full potential of AWS services. &lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Welcoming the AWS Customer Incident Response Team</title>
		<link>https://aws.amazon.com/blogs/security/welcoming-the-aws-customer-incident-response-team/</link>
					
		
		<dc:creator><![CDATA[Jason Hurst]]></dc:creator>
		<pubDate>Tue, 26 May 2026 19:04:17 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Incident response]]></category>
		<category><![CDATA[Security Blog]]></category>
		<category><![CDATA[Threat Detection & Incident Response]]></category>
		<guid isPermaLink="false">c0eacbce1aa2c0107f415fd7e17e695b7778fb76</guid>

					<description>May 26, 2026: This post was originally published in July 2022. It has been updated to reflect current engagement options, new threat intelligence resources such as the Threat Technique Catalog for AWS (TTC), additional open-source tools, and the distinction between AWS CIRT support and the AWS Security Incident Response managed service. Welcome back, or welcome […]</description>
										<content:encoded>&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;May 26, 2026&lt;/strong&gt;: This post was originally published in July 2022. It has been updated to reflect current engagement options, new threat intelligence resources such as the Threat Technique Catalog for AWS (TTC), additional open-source tools, and the distinction between AWS CIRT support and the AWS Security Incident Response managed service.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p&gt;Welcome back, or welcome for the first time. Either way, we’re glad you’re here. We’re the AWS Customer Incident Response Team (CIRT), and we want to share who we are and how we can help when it matters most.&lt;/p&gt; 
&lt;p&gt;The AWS CIRT is a specialized 24/7 global team within &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/span&gt; that provides support to customers during active security events on the customer side of the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/shared-responsibility-model/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Shared Responsibility Model&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;. Our team is made up of security engineers who respond to cloud security events and build the tools and resources we use to do it.&lt;/p&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: If you’re experiencing an active security event in your AWS environment—such as unauthorized access, data exfiltration, or ransomware—open an AWS support case and request assistance.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;To request assistance from AWS:&lt;/p&gt; 
&lt;ol class="rte2-style-ol" id="rte-933af2d0-4a27-11f1-a28c-99b4df168fca" start="1"&gt; 
 &lt;li&gt;Open a support case from the impacted AWS account through the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://console.aws.amazon.com/support/home#/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Support Center Console&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;u&gt;.&lt;/u&gt;&lt;/li&gt; 
 &lt;li&gt;Select the service most closely related to the security event (for example, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ec2" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Compute Cloud (Amazon EC2)&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;&lt;/span&gt;).&lt;/li&gt; 
 &lt;li&gt;Mention that you have an &lt;i&gt;urgent security incident&lt;/i&gt; in the case description.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Opening a support case from the affected account allows AWS to confirm account ownership and gives you a case number to track the engagement. If you have an account team (TAM, Account Manager, or Solutions Architect), you can also alert them to initiate an escalation.&lt;/p&gt; 
&lt;p&gt;If you’ve lost access to your account, you can still &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://support.aws.amazon.com/#/contacts/aws-account-support" target="_blank" rel="noopener" data-cms-ai="0"&gt;submit a request for assistance&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;When the AWS CIRT supports you, we focus on investigating security events as they appear in AWS service logs and the AWS control plane. For our analysis, we draw on sources such as &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS CloudTrail&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon VPC Flow Logs&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon GuardDuty&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; findings. We assist with triage, analysis, and containment, alongside providing recommendations and best practices to help you avoid security events in the future.&lt;/p&gt; 
&lt;p&gt;The AWS CIRT works alongside AWS threat intelligence and security operations teams. During an engagement, we use current threat intelligence and AWS infrastructure knowledge to inform our analysis and recommendations.&lt;/p&gt; 
&lt;p&gt;For investigations that extend into host-level or application-level analysis—such as operating system forensics, memory analysis, or application code review—we recommend complementing our support with a specialized &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/partner-solutions/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Partner&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; for digital forensics and incident response (DFIR) capabilities.&lt;/p&gt; 
&lt;p&gt;Figure 1 shows the two different sides of the shared responsibility model, in which AWS is responsible for security OF the cloud, while customers are responsible for security IN the cloud.&lt;/p&gt; 
&lt;div id="attachment_42369" style="width: 1222px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42369" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/21/Figure-1-shared-responsibility.jpg" alt="Figure 1: The customer and AWS Shared Responsibility Model" width="1212" height="664" class="size-full wp-image-42369"&gt;
 &lt;p id="caption-attachment-42369" class="wp-caption-text"&gt;Figure 1: The customer and AWS Shared Responsibility Model&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Threat intelligence: The Threat Technique Catalog for AWS&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The AWS CIRT regularly encounters patterns that repeat across our engagements. The TTC started as an internal reference—a way for our team to track and share what we were seeing across engagements, so we weren’t solving the same problems in isolation. Over time, it became clear that the knowledge we were building for ourselves was exactly what customers needed to get ahead of the same threats. So, we made it public. When we see techniques repeating across customers, an effective way to help them is to document those techniques and make that knowledge available so they can act on it before they’re in the middle of an incident.&lt;/p&gt; 
&lt;p&gt;To that end, we developed the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws-samples.github.io/threat-technique-catalog-for-aws/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Threat Technique Catalog for AWS (TTC)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;—a publicly available catalog, based on &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://attack.mitre.org/matrices/enterprise/cloud/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;MITRE ATT&amp;amp;CK Cloud Matrix&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, that documents threat actor tactics, techniques, and procedures (TTPs) specific to AWS as observed by the AWS CIRT. Each entry includes detection guidance and mitigations specific to AWS environments. You can filter for the AWS services in your account to focus on what’s most relevant to you.&lt;/p&gt; 
&lt;p&gt;Findings from the TTC also inform detection logic in AWS services like &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty&lt;/a&gt;&lt;/span&gt;, helping customers strengthen automated protections in their environments.&lt;/p&gt; 
&lt;div id="attachment_42401" style="width: 1441px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42401" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/26/Figure-2-ttc1-rev.png" alt="Figure 2: The Threat Technique Catalog for AWS, based on MITRE ATT&amp;amp;CK Cloud Matrix" width="1431" height="581" class="size-full wp-image-42401"&gt;
 &lt;p id="caption-attachment-42401" class="wp-caption-text"&gt;Figure 2: The Threat Technique Catalog for AWS, based on MITRE ATT&amp;amp;CK Cloud Matrix&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Open source tools&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;We’ve open-sourced several tools based on patterns we see in engagements. These complement rather than replace your existing security tooling. For a comprehensive framework for building your incident response program, see the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Security Incident Response Guide&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;. &lt;/p&gt; 
&lt;p&gt;The tools below started as internal solutions we built to solve problems we kept running into.&lt;/p&gt; 
&lt;ul class="rte2-style-ul" id="rte-933af2da-4a27-11f1-a28c-99b4df168fca"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/aws-samples/aws-customer-playbook-framework" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Customer Playbook Framework&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; – Publicly available response frameworks that use our lessons learned from security events&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/awslabs/assisted-log-enabler-for-aws" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Assisted Log Enabler&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; – A tool that assists customers to enable logs, including the following: &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon VPC Flow Logs&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS CloudTrail&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/eks/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon Elastic Kubernetes Service (Amazon EKS)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; audit and authenticator logs, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/route53/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon Route 53&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; Resolver Query Logs, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon Simple Storage Service (Amazon S3)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; server access logs, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/elasticloadbalancing/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Elastic Load Balancing&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; logs&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/awslabs/aws-cloudsaga" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS CloudSaga&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; – A tool for testing security controls and alerts within an AWS environment by using generated simulated events based on common security events seen by the AWS CIRT&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://github.com/awslabs/aws-security-analytics-bootstrap" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Athena Security Analytics Bootstrap&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; – A tool for customers who need a quick method to set up &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/athena/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon Athena&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; and perform investigations on AWS service logs archived in S3 buckets&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Workshops&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;We maintain &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/aws-cirt-announces-the-release-of-five-publicly-available-workshops/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;five publicly available workshops,&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; regularly updated to simulate current security events to help you learn tools and procedures that we use daily. The workshops cover unauthorized IAM credential use, ransomware on Amazon S3, cryptomining, SSRF on IMDSv1, and incident response preparedness tooling. All you need is an AWS account, an internet connection, and the desire to learn more about incident response in the AWS Cloud. These workshops are built using the same scenarios our team trains on internally—we wanted to make that accessible to everyone.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;How to contact us&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Any AWS customer can engage the AWS CIRT through an &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/awssupport/latest/user/case-management.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS support case&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, regardless of support plan level. For those customers who have an account team, you can start an escalation to the AWS CIRT with the account team. Customers with Enterprise Support or Unified Operations can also onboard to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-incident-response/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Incident Response&lt;/a&gt;&lt;/span&gt;, a managed service for security event triage and response.&lt;/p&gt; 
&lt;p&gt;Thank you for reading. This post is where we share what we’re learning—security trends, new resources, and threat intelligence—so you can stay prepared. If you’ve worked with us and have thoughts on how we can do better, reach out through your AWS account team, the comments below, or &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="mailto:aws-cirt@amazon.com" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;aws-cirt@amazon.com&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;Until next time: logs on, credentials rotated, and alerts reviewed.&lt;/p&gt; 
&lt;p&gt;We also recommend subscribing to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Security Bulletins&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; for notifications about security events for AWS services. You can subscribe through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security/security-bulletins/rss/feed/" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;RSS feed&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; to stay informed.&lt;/p&gt; 
&lt;hr&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2023/03/20/Jason-Hurst.jpg" alt="Jason Hurst" width="120" height="160" class="aligncenter size-full wp-image-28881"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Jason Hurst&lt;/h3&gt; 
  &lt;p&gt;Jason is a Security Engineer on the AWS Customer Incident Response Team (CIRT), specializing in network analysis and cloud security investigations. He is passionate about developing others, teaching part-time at a local technical college. Jason has three dogs that entertain him in his spare time.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Shannon-brazil-author.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-41854"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Shannon Brazil&lt;/h3&gt; 
  &lt;p&gt;Shannon is a Security Engineer on the AWS Customer Incident Response Team (CIRT), specializing in digital forensics and cloud security investigations. Known in the community as 4n6lady, she is passionate about security education and mentoring the next generation of defenders.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Well-architected best practices for software supply chain security</title>
		<link>https://aws.amazon.com/blogs/security/well-architected-best-practices-for-software-supply-chain-security/</link>
					
		
		<dc:creator><![CDATA[Trevor Schiavone]]></dc:creator>
		<pubDate>Tue, 26 May 2026 17:03:30 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">2cdff73e896acddc19d81984fff36e7c04e08e08</guid>

					<description>There have been multiple notable supply chain attacks using the npm Registry since September: Shai-Hulud, Chalk/Debug, one abusing tea.xyz tokens, and recently axios. Thanks to community efforts involving the Amazon Inspector team, the Open Source Security Foundation, and others, the affected packages were quickly flagged, which reduced the impact of these incidents. Supply chain attacks […]</description>
										<content:encoded>&lt;p&gt;There have been multiple notable supply chain attacks using the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://www.npmjs.com/" target="_blank" rel="noopener" data-cms-ai="0"&gt;npm Registry&lt;/a&gt;&lt;/span&gt; since September: Shai-Hulud, Chalk/Debug, one abusing tea.xyz tokens, and recently axios. Thanks to community efforts involving the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/inspector/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Inspector&lt;/a&gt;&lt;/span&gt; team, the Open Source Security Foundation, and others, the affected packages were quickly flagged, which reduced the impact of these incidents.&lt;/p&gt; 
&lt;p&gt;Supply chain attacks like Shai-Hulud exploit vulnerabilities on two fronts: compromised maintainer accounts that publish malicious packages, and consumer environments that download and execute those packages. The Shai-Hulud attack, shown in Figure 1, succeeded because maintainer credentials were compromised through phishing, enabling threat actors to publish malicious versions of popular packages. Incidents like these highlight the need for strong security practices within the software supply chain, and effective defense requires addressing both sides. Package maintainers need protections that prevent account compromise and limit sprawl when credentials are stolen. Package consumers need layered defenses that detect malicious packages, prevent their deployment, and limit damage when compromise occurs.&lt;/p&gt; 
&lt;p&gt;In this post, we explore best practices for package consumers. These practices are aligned with the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Well-Architected Framework – Security Pillar&lt;/a&gt;&lt;/span&gt; and you can use them to reduce exposure to similar threats and limit their impact if they occur.&lt;/p&gt; 
&lt;div id="attachment_42269" style="width: 1290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42269" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Figure-1-architecture.jpg" alt="Figure 1: Architecture diagram showing Shai-Hulud attack flow" width="1280" height="720" class="size-full wp-image-42269"&gt;
 &lt;p id="caption-attachment-42269" class="wp-caption-text"&gt;Figure 1: Architecture diagram showing Shai-Hulud attack flow&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Use temporary credentials and grant least privilege&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;When Shai-Hulud executed in developer environments and continuous integration and delivery (CI/CD) pipelines, it scanned for secrets such as npm tokens, GitHub tokens, and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&lt;/span&gt; access keys. Long-term credentials exposed in this way enabled threat actors to propagate the malware further and access cloud resources. Recent incidents have shown organizations discovering multiple leaked IAM credential pairs, with concerns about additional exposed credentials and potential compromise of CI/CD pipelines.&lt;/p&gt; 
&lt;p&gt;Removing long-lived credentials from your developer environments and CI/CD pipelines reduces the scope of exposure in the event a system is compromised. For developers working locally, the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/simplified-developer-access-to-aws-with-aws-login/" target="_blank" rel="noopener" data-cms-ai="0"&gt;new AWS CLI login command&lt;/a&gt;&lt;/span&gt; (&lt;code class="CodeInline" style="color: #000"&gt;aws login&lt;/code&gt;) simplifies the process of acquiring short-lived CLI credentials and removes the need to store long-lived credentials in configuration files. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/iam/identity-center/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS IAM Identity Center&lt;/a&gt;&lt;/span&gt; also provides a straightforward way to acquire temporary credentials that expire automatically. For CI/CD pipelines, OpenID Connect (OIDC) federation with GitHub Actions, GitLab CI, or other platforms provide temporary credentials for each job without storing long-lived tokens. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/identity/federation/#federating-aws-identities-to-external-services" target="_blank" rel="noopener" data-cms-ai="0"&gt;IAM can also federate AWS Identities to external services&lt;/a&gt;&lt;/span&gt;, allowing your AWS workloads to securely access external services without using long-term credentials. Temporary credentials expire automatically, limiting the window of exposure if a pipeline is compromised.&lt;/p&gt; 
&lt;p&gt;If you’re interacting with a third-party service that doesn’t support temporary credentials, consider storing the credentials to centralized storage using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/secrets-manager/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Secrets Manager&lt;/a&gt;&lt;/span&gt;. Limit access to these secrets, require the use of temporary credentials, and apply automatic rotation and audit logging to reduce the risk of exposure of these credentials.&lt;/p&gt; 
&lt;p&gt;To reduce risk from credential exposure:&lt;/p&gt; 
&lt;ul id="rte-39cb33a0-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Use temporary credentials&lt;/b&gt;: Federate users from a central identity provider into AWS and use IAM roles for access. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_identities_unique.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC02-BP02: Use temporary credentials&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Grant least privilege&lt;/b&gt;: Assign only the minimum permissions necessary and use temporary elevated permissions where higher privilege is occasionally required. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_permissions_least_privileges.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC03-BP02: Grant least privilege access&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Audit and rotate long-term credentials&lt;/b&gt; if they are required for specific use cases. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_identities_audit.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC02-BP05: Audit and rotate credentials periodically&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In the event of a security incident where credentials might be exposed, immediately rotate all long-term credentials to limit the scope of impact. Use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty&lt;/a&gt;&lt;/span&gt; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/cloudtrail/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CloudTrail&lt;/a&gt;&lt;/span&gt; to detect abnormal IAM activity and identify which credentials might have been compromised.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Implement defense in depth&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Even with temporary credentials and least privilege, a single compromised account can enable threat actors to publish malicious packages or access sensitive resources. Defense in depth creates multiple layers of protection that work together to prevent sprawl after initial compromise. While adding approval workflows to every operation would dramatically decrease deployment speed, implementing them strategically for sensitive workloads provides balanced security.&lt;/p&gt; 
&lt;p&gt;The key principle is to ensure that if one credential or account is compromised, additional controls prevent that compromise from spreading across your organization. This includes multi-factor authentication (MFA) for access combined with different IAM roles for sensitive workloads. For single-developer open source projects, MFA becomes even more critical because there’s no separation of duties through multiple maintainers.&lt;/p&gt; 
&lt;p&gt;For package maintainers working in team environments, requiring multiple approvers to release packages to production creates separation of duties. However, developers can still trigger merge requests that initiate deployment pipelines, so multi-party approval should be implemented within the pipeline itself for sensitive deployments. This ensures that even if a developer’s credentials are compromised and they trigger a deployment, the pipeline requires additional approval before releasing to production.&lt;/p&gt; 
&lt;p&gt;For package consumers, multi-approval workflows in deployment pipelines help ensure that if a malicious package passes initial scanning, human review can catch suspicious changes before production deployment. Artifact signing provides a complementary cryptographic layer that works alongside these process controls.&lt;/p&gt; 
&lt;p&gt;The Shai-Hulud attack succeeded because compromised maintainer credentials allowed threat actors to publish malicious packages directly to the public npm registry. For package consumers, the defense is ensuring that packages pulled from public registries cannot reach production without verification. Artifact signing is one concrete implementation of this layered approach. By cryptographically binding a package or container image to the identity that produced it, signing creates a verification layer that is independent of the credential used to trigger the build—meaning a compromised developer credential alone isn’t sufficient to introduce an unverified artifact into your deployment pipeline.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Artifact signing as part of defense in depth&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Signer&lt;/a&gt;&lt;/span&gt; provides cryptographic signing for packages, creating an additional verification layer within your defense in depth strategy. The signing authorization model separates concerns: developer credentials shouldn’t have signing permissions. Only CI/CD pipeline roles should have signing permissions through the &lt;code class="CodeInline" style="color: #000"&gt;signer:StartSigningJob&lt;/code&gt; API. Signer uses FIPS 140-3 Level 3 validated hardware security modules (HSMs) to store signing keys, providing strong cryptographic protection.&lt;/p&gt; 
&lt;p&gt;The container image signing workflow, shown in Figure 2, demonstrates how signing integrates seamlessly into existing processes:&lt;/p&gt; 
&lt;ul id="rte-39cb5ab1-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;The developer or CI/CD pipeline builds a container image and pushes it to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ecr/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Container Registry (Amazon ECR)&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;With &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/AmazonECR/latest/userguide/managed-signing.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon ECR managed signing&lt;/a&gt;&lt;/span&gt; (new capability), Amazon ECR automatically triggers signing when the image is pushed&lt;/li&gt; 
 &lt;li&gt;Amazon ECR calls Signer with the image digest and signing profile&lt;/li&gt; 
 &lt;li&gt;Signer verifies the signing profile permissions and signs the image digest using keys stored in FIPS 140-3 Level 3 validated HSMs&lt;/li&gt; 
 &lt;li&gt;The signature is stored alongside the image in Amazon ECR using Open Container Initiative (OCI) artifact format&lt;/li&gt; 
 &lt;li&gt;At deployment time, admission controllers (Kyverno for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/eks/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Kubernetes Service (Amazon EKS)&lt;/a&gt;&lt;/span&gt;), lifecycle hooks for &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/ecs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Elastic Container Service (Amazon ECS)&lt;/a&gt;&lt;/span&gt;) verify signatures before allowing deployment&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div id="attachment_42266" style="width: 1290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42266" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Figure-2-architecture.jpg" alt="Figure 2: Diagram showing Signer signing workflow" width="1280" height="720" class="size-full wp-image-42266"&gt;
 &lt;p id="caption-attachment-42266" class="wp-caption-text"&gt;Figure 2: Diagram showing Signer signing workflow&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;The benefits of Signer compared to building custom signing infrastructure include:&lt;/p&gt; 
&lt;ul id="rte-39cba8d0-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Fully managed&lt;/b&gt;: No need to build custom signing infrastructure or manage certificate lifecycle&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Automated&lt;/b&gt;: Amazon ECR managed signing happens automatically on image push without manual steps&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Centralized governance&lt;/b&gt;: Single signing profile can be used across multiple accounts and pipelines&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Native integration&lt;/b&gt;: Built-in integration with Notation and Kyverno for signature verification in Amazon EKS&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;FIPS 140-3 Level 3 compliance&lt;/b&gt;: Meets stringent regulatory requirements for cryptographic operations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Audit logging for all signing operations enables detection of unusual patterns such as signing from new IP addresses, unusual times, or rapid succession of signing jobs. For every credential in your system, consider who can access what, how they prove their identity, and what second layer prevents sprawl if that credential is compromised. Artifact signing, combined with centralized storage and Software Bills of Materials (SBOMs), provides layered protection against tampering and malicious packages.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Centralize dependency management&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;By centralizing package and dependency management, you can validate and approve dependencies before they’re used in applications and quickly audit dependencies in the event of a supply chain security incident. Recent incidents have shown organizations discovering compromised npm packages in their internal artifact repositories, requiring rapid assessment of which applications might be affected.&lt;/p&gt; 
&lt;p&gt;On AWS, you can use &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/codeartifact/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS CodeArtifact&lt;/a&gt;&lt;/span&gt; to host and manage your organization’s software packages. You can use the package group configuration to define an approved list of upstream sources and block access to all others—a direct control against typosquatting attacks, where malicious packages are published under names that closely resemble legitimate ones. Rather than relying on developers to identify suspicious package names at install time, package group configuration enforces the boundary at the repository level. Centralization also helps you pin versions of dependencies to prevent automatic updates from pulling in malicious versions and quickly remove compromised dependencies across your software portfolio when an incident occurs.&lt;/p&gt; 
&lt;p&gt;For container images, Amazon ECR provides centralized image storage with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/kms/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Key Management Service (AWS KMS)&lt;/a&gt;&lt;/span&gt; encryption and lifecycle policies. Combine Amazon ECR with Amazon Inspector scanning to continuously validate image integrity.&lt;/p&gt; 
&lt;p&gt;For additional guidance see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_appsec_centralize_services_for_packages_and_dependencies.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC11-BP05: Centralize services for packages and dependencies&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;npm provenance attestation&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;For npm packages specifically, provenance attestations provide a complementary control on the consumer side. Available since npm 9.5, npm provenance links a published package to the specific source repository and CI/CD workflow that produced it, using Sigstore as the underlying signing infrastructure. When a package is installed, the npm CLI can verify that the published artifact matches the attested build provenance—providing confidence that the package wasn’t tampered with between build and publication. For organizations consuming open source npm packages, checking for provenance attestations before adding a new dependency is a low-friction signal of supply chain integrity. Package maintainers publishing to npm can enable provenance by running npm publish with the –provenance flag from a supported CI/CD environment such as GitHub Actions.&lt;/p&gt; 
&lt;p&gt;For additional guidance see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_appsec_deploy_software_programmatically.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC11-BP06: Deploy software programatically&lt;/a&gt;&lt;/span&gt; and, from the DevOps Lens of the AWS Well-Architected Framework, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cs.2-sign-code-artifacts-after-each-build.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;DL.CS.2: Sign code artifacts after each build&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Scan dependencies throughout the software development lifecycle&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;AWS provides services to help you scan dependencies continuously, from development through deployment:&lt;/p&gt; 
&lt;ul id="rte-39cbf6f2-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;In development&lt;/b&gt;: &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://kiro.dev/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Kiro&lt;/a&gt;&lt;/span&gt; can perform software composition analysis during code reviews to identify vulnerable third-party code.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;In code repositories and pipelines&lt;/b&gt;: Amazon Inspector scans first-party code, third-party dependencies, and Infrastructure as Code for vulnerabilities.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;For container images&lt;/b&gt;: Amazon Inspector provides continuous vulnerability scanning of Amazon ECR images. Amazon Inspector can also be integrated directly into CI/CD pipelines to scan images before they are pushed to Amazon ECR or deployed, helping you block compromised dependencies earlier in the release cycle.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Traditional vulnerability scanners focus on known CVEs—publicly disclosed vulnerabilities with assigned identifiers. Supply chain attacks like Shai-Hulud involve malicious packages that function as zero-days: they’re intentionally crafted by threat actors and actively exploited before a CVE is assigned. Traditional vulnerability scanners that rely on CVE databases won’t detect these packages until they’ve been formally identified and catalogued, which can take days or weeks.&lt;/p&gt; 
&lt;p&gt;Detecting these requires behavioral analysis at scale and community collaboration, not just static signature matching. The operational scale of AWS—with threat intelligence from sources like MadPot and incident response data across millions of customers—enables detection of suspicious package behavior across multiple environments simultaneously. When a newly published package exhibits credential-harvesting behavior in multiple customer accounts within hours of publication, that cross-account signal enables rapid identification. These findings are contributed to community-maintained databases like the OpenSSF Malicious Packages Repository (&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="http://github.com/ossf/malicious-packages" target="_blank" rel="noopener" data-cms-ai="0"&gt;github.com/ossf/malicious-packages&lt;/a&gt;&lt;/span&gt;), which assigns a formal identifier (MAL-ID) and shares it across the security community. For the tea.xyz token farming campaign, the average time from submission to formal identification was approximately 30 minutes. AWS services like Amazon Inspector participate in this community loop, contributing findings and ingesting newly assigned MAL-IDs to surface threats in your environment.&lt;/p&gt; 
&lt;p&gt;A related threat model worth understanding is the sleeper package: a package that appears benign at publication and activates malicious behavior only after a delay or trigger condition. Static analysis alone is insufficient to catch these packages because the malicious payload isn’t present or active at install time. Amazon Inspector behavioral analysis is specifically designed to detect this class of threat, complementing static vulnerability scanning.&lt;/p&gt; 
&lt;p&gt;Software Bills of Materials (SBOMs) in SPDX or CycloneDX format enable you to quickly assess exposure during incidents. When responding to supply chain incidents, use SBOMs to identify which applications contain compromised packages, prioritize remediation, and assess blast radius. In the Shai-Hulud incident, the compromised packages (MAL-2025-46974 and CVE-2025-59144) were identified early, providing actionable findings that customers could remediate quickly. Organizations that had scanning enabled but experienced alert fatigue may have missed critical alerts, highlighting the importance of proper alert routing and prioritization.&lt;/p&gt; 
&lt;div id="attachment_42267" style="width: 1290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42267" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Figure-3-architecture.jpg" alt="Figure 3: Screenshot of Amazon Inspector console showing malicious package findings" width="1280" height="720" class="size-full wp-image-42267"&gt;
 &lt;p id="caption-attachment-42267" class="wp-caption-text"&gt;Figure 3: Screenshot of Amazon Inspector console showing malicious package findings&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;For additional guidance see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_appsec_automate_testing_throughout_lifecycle.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC11-BP02: Automate testing throughout the development and release lifecycle&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Configure logging and monitoring&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;Visibility into activity is essential to detect anomalous behavior early. Configure logging and centralize those logs for analysis:&lt;/p&gt; 
&lt;ul id="rte-39cc1e01-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;Enable application and service logging&lt;/li&gt; 
 &lt;li&gt;Centralize and monitor logs across accounts&lt;/li&gt; 
 &lt;li&gt;Use GuardDuty to continuously monitor for malicious activity and anomalous API calls&lt;/li&gt; 
 &lt;li&gt;Aggregate findings with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/security-hub/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Security Hub&lt;/a&gt;&lt;/span&gt; and enforce configuration best practices with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/config/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Config&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;CloudTrail logging provides audit trails for credential access and API activity. When responding to supply chain incidents, review CloudTrail logs for specific events that indicate credential compromise or malicious &lt;code class="CodeInline" style="color: #000"&gt;activity: sts:AssumeRole&lt;/code&gt; calls from unexpected IP addresses or regions, &lt;code class="CodeInline" style="color: #000"&gt;secretsmanager:GetSecretValue&lt;/code&gt; or &lt;code class="CodeInline" style="color: #000"&gt;ssm:GetParameter&lt;/code&gt; calls from unfamiliar sources, &lt;code class="CodeInline" style="color: #000"&gt;ecr:PutImage&lt;/code&gt; from developer workstations bypassing CI/CD pipelines, &lt;code class="CodeInline" style="color: #000"&gt;lambda:UpdateFunctionCode&lt;/code&gt; outside normal deployment windows, &lt;code class="CodeInline" style="color: #000"&gt;iam:CreateAccessKey&lt;/code&gt; followed by immediate API activity, and &lt;code class="CodeInline" style="color: #000"&gt;codecommit:GitPush&lt;/code&gt; or &lt;code class="CodeInline" style="color: #000"&gt;codebuild:StartBuild&lt;/code&gt; from unusual IP addresses. When combined with &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/eventbridge/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon EventBridge&lt;/a&gt;&lt;/span&gt; rules, you can trigger automated responses when Amazon Inspector detects malicious packages or when these unusual credential access patterns occur.&lt;/p&gt; 
&lt;p&gt;Organizations affected by recent supply chain attacks have used CloudTrail analysis to determine the scope of credential exposure and identify which resources might have been accessed by compromised credentials. This forensic capability is essential for understanding blast radius and ensuring complete remediation.&lt;/p&gt; 
&lt;p&gt;For additional guidance see the best practices in &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/detection.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC04: Detection&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;These components of a defense in depth strategy work together to prevent sprawl after initial compromise and help you to detect and respond to the event. Figure 4. shows how these fit together.&lt;/p&gt; 
&lt;div id="attachment_42268" style="width: 1290px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42268" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/18/Figure-4-architecture.jpg" alt="Figure 4: Architecture diagram showing defense architecture" width="1280" height="720" class="size-full wp-image-42268"&gt;
 &lt;p id="caption-attachment-42268" class="wp-caption-text"&gt;Figure 4: Architecture diagram showing defense architecture&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Additional best practices&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The Security pillar of the Well-Architected Framework also provides organizational best practices that are applicable to improving security processes across all dimensions of your organization. Relevant best practices include &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_appsec_train_for_application_security.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC11-BP01: Train for application security&lt;/a&gt;&lt;/span&gt;; &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_appsec_build_program_that_embeds_security_ownership_in_teams.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC11-BP08: Build a program that embeds security ownership in workload teams&lt;/a&gt;&lt;/span&gt;; and &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/incident-response.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;SEC10: Incident Response&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Recent incidents including Shai-Hulud, Chalk/Debug, and tea.xyz reflect ongoing efforts by threat actors to target the the package registries, CI/CD pipelines, and developer credentials for increased attack surface and propagation. A single compromised maintainer account or malicious package can propagate across thousands of consumer environments simultaneously. The controls described in this post are designed with that threat model in mind. Temporary credentials limit the value of stolen tokens, centralized dependency management and upstream blocking reduce the attack surface at the registry level, artifact signing ensures that even if a build pipeline is compromised, unsigned artifacts cannot reach production, and dependency scanning throughout your software lifecycle helps you identify compromised packages early, before they can impact you. Each layer narrows the window of opportunity for a threat actor.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Learn more&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;See the following blogs and workshops to dive deeper on this topic:&lt;/p&gt; 
&lt;ul id="rte-39cc4513-3437-11f1-9905-a1989a946343" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/defending-against-supply-chain-attacks-like-chalk-debug-and-the-shai-hulud-worm/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Defending against supply chain attacks like Chalk/Debug and the Shai-Hulud worm&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/amazon-inspector-detects-over-150000-malicious-packages-linked-to-token-farming-campaign/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Inspector detects over 150,000 malicious packages linked to token farming campaign&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/security/what-aws-security-learned-from-responding-to-recent-npm-supply-chain-threat-campaigns/" target="_blank" rel="noopener" data-cms-ai="0"&gt;What AWS Security learned from responding to recent npm supply chain threat campaigns&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/blogs/aws/improve-the-security-of-your-software-supply-chain-with-amazon-codeartifact-package-group-configuration/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Improve the security of your software supply chain with Amazon CodeArtifact package group configuration&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://catalog.workshops.aws/enhancing-supply-chain-security/en-US" target="_blank" rel="noopener" data-cms-ai="0"&gt;Hands-on Workshop: Enhancing Supply Chain Security&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2025/06/16/Trevor-Schiavone.jpg" alt="Trevor Schiavone" width="120" height="160" class="aligncenter size-full wp-image-38940"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Trevor Schiavone&lt;/h3&gt; 
  &lt;p&gt;Trevor is a Senior Solutions Architect with a background in application development and architecture. He brings a builder’s perspective to helping customers design secure, scalable, and innovative solutions on AWS. He is also an active part of the AWS security community with a focus on application security and identity.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/04/13/desibru.jpg" alt="Desiree Brunner" width="120" height="160" class="aligncenter size-full wp-image-41793"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Desiree Brunner&lt;/h3&gt; 
  &lt;p&gt;Desiree is a Security Specialist Solutions Architect working with regulated customers as part of the AWS EMEA Security &amp;amp; Compliance team. She builds on her background in DevOps and platform engineering to support her customers in designing secure, compliant cloud environments. Passionate about mental health and knowledge sharing, she regularly speaks at AWS events and supports teams on their cloud security journey.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>AWS KY3P report now available for third-party supplier due diligence</title>
		<link>https://aws.amazon.com/blogs/security/aws-ky3p-report-now-available-for-third-party-supplier-due-diligence/</link>
					
		
		<dc:creator><![CDATA[Michael Murphy]]></dc:creator>
		<pubDate>Thu, 21 May 2026 19:58:03 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">744b251d6d106f449d6ec234ad7477574d4aa70f</guid>

					<description>We’re excited to announce that Amazon Web Services (AWS) has completed the S&amp;amp;P Global Know Your Third Party (KY3P) assessment of its security posture. This assessment demonstrates our continued commitment to meet the heightened expectations of cloud service providers. Customers can now use the AWS KY3P assessment to reduce their supplier due diligence burden. KY3P, […]</description>
										<content:encoded>&lt;p&gt;We’re excited to announce that &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Web Services (AWS)&lt;/a&gt;&lt;/span&gt; has completed the S&amp;amp;P Global &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/ky3p/" target="_blank" rel="noopener" data-cms-ai="0"&gt;Know Your Third Party (KY3P)&lt;/a&gt;&lt;/span&gt; assessment of its security posture. This assessment demonstrates our continued commitment to meet the heightened expectations of cloud service providers. Customers can now use the AWS KY3P assessment to reduce their supplier due diligence burden.&lt;/p&gt; 
&lt;p&gt;KY3P, also known as the S&amp;amp;P Global Comprehensive Assessment (formerly TruSight), is a validated, evidence-based assessment designed to support regulatory compliance and efficient, standardized risk data exchange between AWS and our clients. KY3P’s globally recognized methodology provides organizations with enhanced visibility into supply chain risks by validating the actual implementation and operation of controls – not just policies or attestations.&lt;/p&gt; 
&lt;p&gt;As cloud adoption accelerates across industries, AWS has become a critical component of customers’ third-party environments. Regulated customers, such as those in the financial services sector, are held to high standards by regulators and auditors when it comes to exercising effective due diligence on third parties.&lt;/p&gt; 
&lt;p&gt;To better manage risks from their evolving third-party environments and drive operational efficiencies, many customers rely on third-party risk management services such as KY3P. In support of these efforts, AWS has completed its annual KY3P security posture assessment, conducted by KY3P security assessors.&lt;/p&gt; 
&lt;p&gt;KY3P’s risk assessment methodology includes over 200 controls across 26 control categories and nine risk domains. These topics include Privacy, Network Management, Logical Access Management, and Physical and Environmental Security. The assessment criteria were developed by a consortium of leading financial institutions.&lt;/p&gt; 
&lt;p&gt;Customers can use the KY3P results to map AWS against commonly used industry frameworks and standards, such as NIST CSF v2, PCI DSS 4.0, and ISO 27001:2022 to instantly gain visibility into controls coverage.&lt;/p&gt; 
&lt;p&gt;For details on how to access the report, see our &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/ky3p/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS KY3P assessment page&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;If you have feedback about this post, submit comments in the &lt;strong&gt;Comments&lt;/strong&gt; section below. To learn more about our other compliance and security programs, see &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/compliance/programs/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Compliance Programs&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt; 
   &lt;img loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2025/09/12/michaelmurphy.murphman.jpg" alt="" width="120" height="160" class="aligncenter size-full wp-image-39816"&gt; 
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Michael Murphy&lt;/h3&gt; 
  &lt;p&gt;Michael is a Compliance Program Manager at AWS where he leads multiple security and privacy initiatives. Michael has over 14 years of experience in information security and holds a master’s degree and a bachelor’s degree in computer engineering from Stevens Institute of Technology. He also holds CISSP, CRISC, CISA, and CISM certifications.&lt;/p&gt; 
  &lt;p&gt;&lt;/p&gt;
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Automating identity lifecycle and security with AWS Directory Service APIs</title>
		<link>https://aws.amazon.com/blogs/security/automating-identity-lifecycle-and-security-with-aws-directory-service-apis/</link>
					
		
		<dc:creator><![CDATA[Ali Alzand]]></dc:creator>
		<pubDate>Thu, 21 May 2026 16:00:59 +0000</pubDate>
				<category><![CDATA[Amazon EventBridge]]></category>
		<category><![CDATA[Amazon GuardDuty]]></category>
		<category><![CDATA[AWS CloudFormation]]></category>
		<category><![CDATA[AWS Directory Service]]></category>
		<category><![CDATA[AWS Step Functions]]></category>
		<category><![CDATA[AWS Systems Manager]]></category>
		<category><![CDATA[Expert (400)]]></category>
		<category><![CDATA[Integration & Automation]]></category>
		<category><![CDATA[Security, Identity, & Compliance]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[Security Blog]]></category>
		<guid isPermaLink="false">d47c72ffa6af1c15dfafdb4ff6014cdfa3fa1171</guid>

					<description>Managing identities and access across complex environments has become more critical than ever. AWS Directory Service for Managed Microsoft Active Directory, also known as AWS Managed Microsoft AD, has added new capabilities to manage users and groups. Now, you can perform create, read, update, and delete (CRUD) operations on users and groups directly through AWS […]</description>
										<content:encoded>&lt;p&gt;Managing identities and access across complex environments has become more critical than ever. &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/directoryservice/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Directory Service for Managed Microsoft Active Directory&lt;/a&gt;&lt;/span&gt;, also known as AWS Managed Microsoft AD, has added new capabilities to &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;manage users and groups&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;. Now, you can perform create, read, update, and delete (CRUD) operations on users and groups directly through &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/cli/latest/reference/ds-data/#cli-aws-ds-data" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Command Line Interface (AWS CLI)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/directoryservicedata/latest/DirectoryServiceDataAPIReference/API_Operations.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;APIs&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;, and the AWS Management Console. You can use this powerful capability to automate identity lifecycle management and enhance security in your AWS environment. By using these APIs, collectively known as the Directory Service Data APIs, you can perform operations such as:&lt;/p&gt; 
&lt;ul id="rte-eaa29123-fe1b-11f0-8d0d-5fdfe45a28cf" class="rte2-style-ul"&gt; 
 &lt;li&gt;Listing users and groups&lt;/li&gt; 
 &lt;li&gt;Retrieving user and group details&lt;/li&gt; 
 &lt;li&gt;Disabling and enabling user accounts&lt;/li&gt; 
 &lt;li&gt;Resetting user passwords&lt;/li&gt; 
 &lt;li&gt;Managing group memberships&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These APIs provide new possibilities for automating identity management tasks and integrating Active Directory management into your existing workflows and applications.&lt;/p&gt; 
&lt;p&gt;The introduction of these APIs brings several key benefits:&lt;/p&gt; 
&lt;ul id="rte-bcf8b732-1f05-11f1-99ea-a974f2cf9748" class="rte2-style-ul"&gt; 
 &lt;li&gt;&lt;b&gt;Automation of the identity lifecycle&lt;/b&gt;: You can now programmatically manage user accounts throughout their lifecycle—from creation to deletion—enabling streamlined onboarding and offboarding processes.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Enhanced security&lt;/b&gt;: By integrating these APIs with security services like &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/guardduty" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon GuardDuty&lt;/a&gt;&lt;/span&gt;, you can create automated responses to potential security threats, such as disabling accounts with inappropriate access.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Improved compliance&lt;/b&gt;: You can use automated user management to help enforce consistent policies and help maintain compliance with various regulatory requirements.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Operational efficiency&lt;/b&gt;: You can automate routine tasks such as user provisioning, deprovisioning, and group management, reducing manual effort and the potential for human error.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Integration capabilities&lt;/b&gt;: By using these APIs, you can seamlessly integrate with existing identity management systems, custom applications, and third-party tools.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Cost optimization&lt;/b&gt;: By automating processes and reducing manual intervention, you can potentially help your organization optimize operational costs associated with identity management.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In this post, we explore these new APIs and demonstrate how you can use them to create an automated solution for detecting and responding to unexpected behavior by Active Directory users. We walk through a practical example that combines GuardDuty, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/step-functions" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Step Functions&lt;/a&gt;&lt;/span&gt;, &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/eventbridge" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon EventBridge&lt;/a&gt;&lt;/span&gt;, and the new &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/directoryservice/" target="_blank" rel="noopener" data-cms-ai="0"&gt;AWS Directory Service&lt;/a&gt;&lt;/span&gt; APIs to create a robust security automation workflow.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Solution overview&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To demonstrate the power of these new APIs, let’s explore a practical solution that automates the detection and response to unexpected behavior by Active Directory users. This solution combines several AWS services to create a robust security automation workflow:&lt;/p&gt; 
&lt;ol class="rte2-style-ol" start="1"&gt; 
 &lt;li style="list-style-type: none"&gt; 
  &lt;ol class="rte2-style-ol" start="1"&gt; 
   &lt;li&gt;GuardDuty continuously monitors for unexplained behavior of Active Directory users from AWS Managed Microsoft AD. For the example in this post, we’re using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/guardduty/latest/ug/findings-runtime-monitoring.html#backdoor-runtime-ccactivitybdns" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Backdoor:Runtime/C&amp;amp;CActivity.B!DNS&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; 
   &lt;li&gt;An EventBridge rule detects GuardDuty findings related to these users and triggers a Step Functions workflow. 
    &lt;div class="Enhancement" data-align-center=""&gt; 
     &lt;div class="Enhancement-item"&gt; 
      &lt;div class="CodeBlockWP hide-language"&gt; 
       &lt;div class="code-toolbar"&gt; 
        &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
  "detail-type": ["GuardDuty Finding"],
  "source": ["aws.guardduty"],
  "detail": {
    "type": ["Backdoor:Runtime/C&amp;amp;CActivity.B!DNS"]
  }
}&lt;/code&gt;&lt;/pre&gt; 
       &lt;/div&gt; 
      &lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; &lt;/li&gt; 
   &lt;li&gt;The Step Functions workflow will: 
    &lt;ol type="a"&gt; 
     &lt;li&gt;Extract the Active Directory username from the instance using a run command.&lt;/li&gt; 
     &lt;li&gt;Start an automation that will disable the account using the &lt;code class="CodeInline" style="color: #000"&gt;DisableUser&lt;/code&gt; API.&lt;/li&gt; 
    &lt;/ol&gt; &lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_42188" style="width: 583px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42188" loading="lazy" class="size-full wp-image-42188" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/13/Figure1-automate-identity.png" alt="Figure 1: Diagram of the Step Functions workflow showing the process of Systems Manager finding the username and starting the automation to disable the account" width="573" height="651"&gt;
 &lt;p id="caption-attachment-42188" class="wp-caption-text"&gt;Figure 1: Diagram of the Step Functions workflow showing the process of Systems Manager finding the username and starting the automation to disable the account&lt;/p&gt;
&lt;/div&gt; 
&lt;ol id="rte-46ace620-1cc4-11f1-8f53-9387dd8b8f75" class="rte2-style-ol" start="4"&gt; 
 &lt;li&gt;Finally, another EventBridge rule will monitor the &lt;code class="CodeInline" style="color: #000"&gt;DisableUser&lt;/code&gt; API call. It will send an email to the user using &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/sns" target="_blank" rel="noopener" data-cms-ai="0"&gt;Amazon Simple Notification Service (Amazon SNS)&lt;/a&gt;&lt;/span&gt; notifications. 
  &lt;div class="Enhancement" data-align-center=""&gt; 
   &lt;div class="Enhancement-item"&gt; 
    &lt;div class="CodeBlockWP hide-language"&gt; 
     &lt;div class="code-toolbar"&gt; 
      &lt;pre class="unlimited-height-code language-text"&gt;&lt;code class="language-text"&gt;{
  "detail-type": ["AWS API Call via CloudTrail"],
  "source": ["aws.ds"],
  "detail": {
    "eventSource": ["ds.amazonaws.com"],
    "eventName": ["DisableUser"]
  }
}&lt;/code&gt;&lt;/pre&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This solution delivers automated, near real-time remediation of potential security threats — significantly reducing exposure windows and containing the impact of unauthorized account access.&lt;/p&gt; 
&lt;p&gt;The following figure shows a high-level architecture diagram of the solution.&lt;/p&gt; 
&lt;div id="attachment_42189" style="width: 2404px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42189" loading="lazy" class="size-full wp-image-42189" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/13/Figure2-automate-identity.png" alt="Figure 2: Diagram showing the workflow of what happens when potentially damaging activity is detected" width="2394" height="1053"&gt;
 &lt;p id="caption-attachment-42189" class="wp-caption-text"&gt;Figure 2: Diagram showing the workflow of what happens when potentially damaging activity is detected&lt;/p&gt;
&lt;/div&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; The solution must be deployed in the primary AWS Region of your directory.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Prerequisites&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To complete the walkthrough in this post, you must have the following prerequisites in place.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;GuardDuty&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;GuardDuty is an automated threat detection service that continuously monitors for unexpected activity and unauthorized behavior to protect your AWS accounts, workloads, and data stored in &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://aws.amazon.com/s3" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;Amazon Simple Storage Service (Amazon S3)&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;To activate GuardDuty:&lt;/b&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Go to the GuardDuty console. 
  &lt;ol type="a"&gt; 
   &lt;li&gt;If you’re activating GuardDuty for the first time, under &lt;b&gt;Try threat detection with GuardDuty&lt;/b&gt;, select &lt;b&gt;All Features&lt;/b&gt; and then choose &lt;b&gt;Get Started&lt;/b&gt;.&lt;/li&gt; 
   &lt;li&gt;If you’ve used GuardDuty before, select &lt;b&gt;Runtime Monitoring&lt;/b&gt; and then choose &lt;b&gt;Enable&lt;/b&gt; under &lt;b&gt;Runtime Monitoring&lt;/b&gt;.&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;div id="attachment_42190" style="width: 574px" class="wp-caption aligncenter"&gt;
 &lt;img aria-describedby="caption-attachment-42190" loading="lazy" class="size-full wp-image-42190" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/13/Figure3-automate-identity.png" alt="Figure 3: Runtime Monitoring enabled" width="564" height="469" style="border: 1px solid #bebebe"&gt;
 &lt;p id="caption-attachment-42190" class="wp-caption-text"&gt;Figure 3: Runtime Monitoring enabled&lt;/p&gt;
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;AWS Managed Microsoft AD&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;AWS Managed Microsoft AD provides a fully managed service for Microsoft Active Directory (AD) in the AWS Cloud. When you create your directory, AWS deploys two domain controllers that are exclusively yours in separate Availability Zones for high availability. For use cases that require even higher resilience and performance in a specific AWS Region or during specific hours, you can scale AWS Managed Microsoft AD by deploying additional domain controllers to meet your needs. These domain controllers can help load balance, increase overall performance, or provide additional nodes to protect against temporary availability issues. Using AWS Managed Microsoft AD, you can define the correct number of domain controllers for your directory based on your use case.&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;To deploy a new AWS Managed Microsoft AD:&lt;/b&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Go to the Directory Service console.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Set up directory&lt;/b&gt; and select &lt;b&gt;AWS Managed Microsoft AD&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Select &lt;b&gt;Standard Edition&lt;/b&gt; and enter a directory DNS name and password.&lt;/li&gt; 
 &lt;li&gt;Select a virtual private cloud (VPC). For this example, use the &lt;b&gt;Default VPC&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Create directory&lt;/b&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;strong&gt;Create a test Active Directory user&lt;/strong&gt;&lt;/h3&gt; 
 &lt;p&gt;You will use this test user account to sign in to an EC2 instance and initiate a command that simulates unexplained activity that results in this account being disabled.&lt;/p&gt; 
 &lt;p&gt;To create the test user, you can use &lt;a href="https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CloudShell&lt;/a&gt; or the AWS CLI from your local machine. Run the following commands, replacing the &lt;code style="color: #000000"&gt;--directory-id&lt;/code&gt; value with your own:&lt;/p&gt; 
 &lt;div class="hide-language"&gt; 
  &lt;pre&gt;&lt;code class="lang-bash"&gt;# Create the test user
aws ds-data create-user \
 --directory-id "your-directory-id" \
 --sam-account-name "TestUser" \
 --given-name "Test" \
 --surname "User"
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
 &lt;p&gt;Then&lt;/p&gt; 
 &lt;div class="hide-language"&gt; 
  &lt;pre&gt;&lt;code class="lang-bash"&gt;# Set a password for the test user 
aws ds reset-user-password \
 --directory-id "your-directory-id" \
 --user-name "TestUser" \
 --new-password "YourSecurePassword123!"
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
 &lt;p&gt;In this example, the password is set to &lt;code style="color: #000000"&gt;YourSecurePassword123!&lt;/code&gt;. If you need to replace it with a password that meets your organization’s requirements, see &lt;a href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_reset_user_pswd.html" target="_blank" rel="noopener noreferrer"&gt;Resetting and enabling an AWS Managed Microsoft AD user’s password&lt;/a&gt;. For more information on creating users, see &lt;a href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_create_user.html" target="_blank" rel="noopener noreferrer"&gt;Creating an AWS Managed Microsoft AD user&lt;/a&gt; in the AWS Directory Service documentation.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;&lt;b&gt;Test EC2 instance&lt;/b&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;To generate alerts on GuardDuty, you need a domain joined Linux EC2 instance. If you don’t have a domain joined EC2 Linux instance, follow these instructions for &lt;a href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_join_instance.html" target="_blank" rel="noopener noreferrer nofollow"&gt;joining a Linux instance to an Active Directory domain&lt;/a&gt;. This instance will be used to simulate suspicious activity that triggers a GuardDuty finding and initiates the automated remediation workflow.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Implement the solution&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;Let’s walk through the steps to implement this solution in your AWS environment.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h3&gt;Deploy the solution&lt;/h3&gt; 
&lt;/div&gt; 
&lt;ol id="rte-eaa417c1-fe1b-11f0-8d0d-5fdfe45a28cf" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Download the &lt;a href="https://github.com/aws-samples/sample-mad-user-disable-guardduty-anomalies/blob/799b4282abb71e761ed531f262a03251782dcba2/Templates/CloudFormation/guardduty-ad-user-auto-disable.yaml" target="_blank" rel="noopener"&gt;CloudFormation &lt;span class="LinkEnhancement"&gt;template&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Navigate to the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="http://console.aws.amazon.com/cloudformation" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;CloudFormation console&lt;/u&gt;&lt;/a&gt;&lt;/span&gt; in the AWS account.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Create Stack&lt;/b&gt;, choose &lt;b&gt;with new resources (standard)&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Template source&lt;/b&gt;, choose &lt;b&gt;Upload a template file&lt;/b&gt;. Choose &lt;b&gt;Choose&lt;/b&gt; &lt;b&gt;file&lt;/b&gt; and select the template you downloaded in step 1.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;For &lt;b&gt;Stack name&lt;/b&gt;, enter a stack name (such as &lt;code class="CodeInline" style="color: #000"&gt;CRUD-API-MAD&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;In the &lt;b&gt;Parameters&lt;/b&gt; area, do the following: 
  &lt;ol type="a"&gt; 
   &lt;li&gt;For &lt;b&gt;DirectoryID&lt;/b&gt;, enter the AWS Active Directory ID.&lt;/li&gt; 
   &lt;li&gt;For &lt;b&gt;NotificationEmail&lt;/b&gt;, enter the email address to send the notification to.&lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
 &lt;li&gt;On the &lt;b&gt;Configure stack options&lt;/b&gt; page, choose &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Select &lt;b&gt;I acknowledge that AWS CloudFormation might create IAM resources with custom names&lt;/b&gt;, then choose &lt;b&gt;Submit&lt;/b&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;After the page is refreshed, the status of your stack should be &lt;code class="CodeInline" style="color: #000"&gt;CREATE_IN_PROGRESS&lt;/code&gt;. When the status changes to &lt;code class="CodeInline" style="color: #000"&gt;CREATE_COMPLETE&lt;/code&gt;, proceed to the next section.&lt;/p&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;Test&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;To simulate a threat, use a GuardDuty test domain that GuardDuty will recognize as a command and control server.&lt;/p&gt; 
&lt;ol id="rte-eaa4db10-fe1b-11f0-8d0d-5fdfe45a28cf" class="rte2-style-ol" start="1"&gt; 
 &lt;li&gt;Go to the Amazon EC2 console.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Instances &lt;/b&gt;from the navigation pane.&lt;/li&gt; 
 &lt;li&gt;Select the test EC2 instance that you created earlier.&lt;/li&gt; 
 &lt;li&gt;Choose &lt;b&gt;Connect&lt;/b&gt;, select the &lt;b&gt;Session Manager &lt;/b&gt;tab, and choose &lt;b&gt;Connect&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;Authenticate with your test user by entering &lt;code class="CodeInline" style="color: #000"&gt;su&lt;/code&gt; followed by the test user with the domain name that you created earlier. For example &lt;code class="CodeInline" style="color: #000"&gt;su TestUser@example.com&lt;/code&gt;, then enter the password.&lt;/li&gt; 
 &lt;li&gt;Enter the command &lt;code class="CodeInline" style="color: #000"&gt;curl guarddutyc2activityb.com&lt;/code&gt;.&lt;br&gt; You will receive an error because the page won’t resolve, but GuardDuty will have detected concerning events.&lt;/li&gt; 
 &lt;li&gt;Go to the GuardDuty console and select &lt;b&gt;Findings &lt;/b&gt;from the navigation pane.&lt;/li&gt; 
 &lt;li&gt;Within 3–5 minutes, you should see a high severity finding for &lt;b&gt;Backdoor:Runtime/C&amp;amp;CActivity.B!DNS&lt;/b&gt;.&lt;/li&gt; 
 &lt;li&gt;This will then trigger the automation to disable the account.&lt;br&gt; 
  &lt;div id="attachment_42312" style="width: 1438px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42312" loading="lazy" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/19/Figure-4-account-disabled.png" alt="Figure 4: Account successfully disabled" width="1428" height="665" class="size-full wp-image-42312" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42312" class="wp-caption-text"&gt;Figure 4: Account successfully disabled&lt;/p&gt;
  &lt;/div&gt; &lt;/li&gt; 
 &lt;li&gt;After the account is disabled, an email notification will be sent notifying an administrator that the account was disabled (it might take up to 5 minutes to receive the notification). &lt;p&gt;&lt;/p&gt;
  &lt;div id="attachment_42248" style="width: 1063px" class="wp-caption aligncenter"&gt;
   &lt;img aria-describedby="caption-attachment-42248" loading="lazy" class="wp-image-42248 size-full" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/15/DisabledUserAccount.png" alt="Figure 5: AWS notification message showing the username has been disabled" width="1053" height="481" style="border: 1px solid #bebebe"&gt;
   &lt;p id="caption-attachment-42248" class="wp-caption-text"&gt;Figure 5: AWS notification message showing the username has been disabled&lt;/p&gt;
  &lt;/div&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt;
 &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: You must archive the GuardDuty finding before running this test again, because the EventBridge rule only runs once against a GuardDuty finding with the same details. To archive the finding, select the check box next to the &lt;b&gt;Backdoor:Runtime/C&amp;amp;CActivity.B!DNS &lt;/b&gt;finding, choose &lt;b&gt;Actions &lt;/b&gt;(top right), and select &lt;b&gt;Archive&lt;/b&gt;.&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;div class="RichTextHeading"&gt; 
 &lt;h2&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/h2&gt; 
&lt;/div&gt; 
&lt;p&gt;The new AWS Directory Service APIs for AWS Managed Microsoft AD provide powerful capabilities for programmatically managing Active Directory users and groups. By using these APIs in conjunction with services such as Amazon GuardDuty and AWS Step Functions, you can create sophisticated automation workflows that enhance your security posture and streamline identity management processes.&lt;/p&gt; 
&lt;p&gt;The solution we’ve explored in this post demonstrates just one of many possible use cases for these new APIs. As you integrate these capabilities into your own environments, you will probably discover numerous opportunities to improve efficiency, security, and compliance in your identity management practices.&lt;/p&gt; 
&lt;p&gt;For a solution that uses PowerShell Active Directory cmdlets with AWS Systems Manager Run Command to disable users, see &lt;a href="https://aws.amazon.com/blogs/security/how-to-automatically-disable-users-in-aws-managed-microsoft-ad-based-on-guardduty-findings/" target="_blank" rel="noopener noreferrer"&gt;How to automatically disable users in AWS Managed Microsoft AD based on GuardDuty findings&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For more information about AWS Directory Service and its APIs, visit the &lt;span class="LinkEnhancement"&gt;&lt;a class="Link" href="https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html" target="_blank" rel="noopener" data-cms-ai="0"&gt;&lt;u&gt;AWS Directory Service documentation&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt; 
&lt;p&gt;We’re excited to see how you’ll use these new APIs to innovate and improve your identity management workflows. If you have any questions or want to share your own use cases, leave a comment below or reach out to AWS Support.&lt;/p&gt; 
&lt;p&gt;Remember, the cloud journey is all about continuous improvement and innovation. Keep exploring, keep learning, and keep pushing the boundaries of what’s possible with AWS.&lt;/p&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-42194" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/13/Ali-Alzand.jpg" alt="Ali Alzand" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Ali Alzand&lt;/h3&gt; 
  &lt;p&gt;Ali is a Senior Infrastructure Migration &amp;amp; Modernization Specialist Solutions Architect at AWS who helps enterprise customers migrate, modernize, and operate their Microsoft workloads on AWS. He specializes in Infrastructure as Code, automating at scale with AWS Systems Manager, EC2 Image Builder, and CloudFormation. He also designs event-driven architectures building responsive, loosely coupled solutions with EventBridge and Lambda. Outside of work, Ali enjoys grilling with friends and discovering new cuisines around town.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt; 
&lt;footer&gt; 
 &lt;div class="blog-author-box"&gt; 
  &lt;div class="blog-author-image"&gt;
   &lt;img loading="lazy" class="aligncenter size-full wp-image-42195" src="https://d2908q01vomqb2.cloudfront.net/22d200f8670dbdb3e253a90eee5098477c95c23d/2026/05/13/Kevin-Sookhan.jpg" alt="Kevin Sookhan" width="120" height="160"&gt;
  &lt;/div&gt; 
  &lt;h3 class="lb-h4"&gt;Kevin Sookhan&lt;/h3&gt; 
  &lt;p&gt;Kevin is a Specialist Solutions Architect at Amazon Web Services with over 20 years of experience working with Microsoft technologies. He has expertise in running Microsoft workloads on AWS with specialization in helping customers with their migrations, cost optimization, and infrastructure architecture.&lt;/p&gt; 
 &lt;/div&gt; 
&lt;/footer&gt;</content:encoded>
					
					
			
		
		
			</item>
	</channel>
</rss>