<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Build on AWS</title><link>https://buildonaws.lakil.org/posts/</link><description>Recent content in Posts on Build on AWS</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 15 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://buildonaws.lakil.org/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Tip: When AI Agents Get Blocked by AWS Managed Rules</title><link>https://buildonaws.lakil.org/posts/ai-agent-blocked-by-managed-rule/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://buildonaws.lakil.org/posts/ai-agent-blocked-by-managed-rule/</guid><description>&lt;h1 id="quick-tip-when-ai-agents-get-blocked-by-aws-managed-rules"&gt;Quick Tip: When AI Agents Get Blocked by AWS Managed Rules&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; OpenAI agent traffic was being blocked by AWS WAF&amp;rsquo;s Anonymous IP List rule (HostingProviderIPList). The source IP belonged to an Azure range included in the HostingProviderIPList. Bot Control was correctly identifying the same traffic as a verified bot, so the fix was to switch HostingProviderIPList to Count and add a custom rule that blocks only &amp;ldquo;hosting provider AND NOT verified bot&amp;rdquo; traffic. Caveat: traffic previously blocked by HostingProviderIPList now reaches Bot Control, increasing Bot Control costs.&lt;/p&gt;</description></item><item><title>Sharing Large Files with Customers — Automating S3 + CloudFront Signed URLs</title><link>https://buildonaws.lakil.org/posts/share-files-with-signed-url/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://buildonaws.lakil.org/posts/share-files-with-signed-url/</guid><description>&lt;h1 id="sharing-large-files-with-customers--automating-s3--cloudfront-signed-urls"&gt;Sharing Large Files with Customers — Automating S3 + CloudFront Signed URLs&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; When you need to share large files or directories with customers, this script automates the entire flow — zip compression, S3 upload, and CloudFront Signed URL generation — in a single command: &lt;code&gt;sharelink.py &amp;lt;path&amp;gt;&lt;/code&gt;. The generated link is valid for 7 days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Terms:&lt;/strong&gt; CloudFront Signed URL = A time-limited URL that grants access to a CloudFront distribution, signed with an RSA key pair | S3 = Amazon Simple Storage Service, object storage | OAC = Origin Access Control, restricts direct S3 access so files are only accessible through CloudFront&lt;/p&gt;</description></item><item><title>We Blocked the DDoS, Then the CloudWatch Bill Arrived</title><link>https://buildonaws.lakil.org/posts/ddos-log-auto-filter/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://buildonaws.lakil.org/posts/ddos-log-auto-filter/</guid><description>&lt;h1 id="we-blocked-the-ddos-then-the-cloudwatch-bill-arrived"&gt;We Blocked the DDoS, Then the CloudWatch Bill Arrived&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; AWS Shield Advanced protects against DDoS-related scaling costs, but WAF log costs are not covered. When a customer said &amp;ldquo;I need to keep logs but reduce costs,&amp;rdquo; I proposed three incremental steps: (1) switch log destination to Data Firehose for ~8.5x cost reduction, (2) apply a WAF Logging Filter to DROP logs by DDoS label, (3) if logs must be preserved during normal operations, use CloudWatch Alarm + Lambda to automatically toggle the filter only during active DDoS. Step 3 is not a best practice — it is a workaround for specific edge cases.&lt;/p&gt;</description></item><item><title>Why My Blog Won't Serve HTML to Bots</title><link>https://buildonaws.lakil.org/posts/serving-markdown-to-bots/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://buildonaws.lakil.org/posts/serving-markdown-to-bots/</guid><description>&lt;h1 id="why-my-blog-wont-serve-html-to-bots"&gt;Why My Blog Won&amp;rsquo;t Serve HTML to Bots&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Serving Markdown instead of HTML to verified bots gives you two things: your content gets cited accurately in AI answers, and Data Transfer Out costs drop by 94 %. AWS WAF Bot Control identifies the bots, and CloudFront Functions rewrites the URL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Terms:&lt;/strong&gt; Bot Control Targeted = AWS WAF&amp;rsquo;s bot detection level combining IP reputation, TLS fingerprinting, and behavioral analysis | CloudFront Functions = lightweight JavaScript execution at CloudFront edge (viewer-request/viewer-response stage) | Data Transfer Out = cost charged for traffic leaving CloudFront to the internet | Verified Bot = a crawler whose identity AWS WAF has confirmed (Googlebot, Bingbot, GPTBot, etc.)&lt;/p&gt;</description></item></channel></rss>