<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Esther Awudu</title>
    <description>The latest articles on DEV Community by Esther Awudu (@secesther).</description>
    <link>https://dev.to/secesther</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2806327%2Fe92a2e8c-204b-4e8b-8f41-6c4f1e12d493.jpg</url>
      <title>DEV Community: Esther Awudu</title>
      <link>https://dev.to/secesther</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/secesther"/>
    <language>en</language>
    <item>
      <title>Your First AWS WAF Setup</title>
      <dc:creator>Esther Awudu</dc:creator>
      <pubDate>Wed, 17 Dec 2025 01:33:12 +0000</pubDate>
      <link>https://dev.to/secesther/your-first-aws-waf-setup-54h1</link>
      <guid>https://dev.to/secesther/your-first-aws-waf-setup-54h1</guid>
      <description>&lt;p&gt;Your first successful project on the AWS Cloud, perhaps a cloud résumé or a static website, marks a significant milestone. Yet, deployment is only half the battle. To fortify this new public endpoint, integrating a Web Application Firewall (WAF) isn't just an option; it is the standard best practice for maintaining a defensible security posture from day one.&lt;/p&gt;

&lt;p&gt;WAF is an AWS security tool that helps protect your endpoints from web attacks. Through Web ACLs(Access Control List)/Protection packs, you can define rules by which traffic will be filtered before accessing your resources.&lt;/p&gt;

&lt;p&gt;In this article, I walk you through setting up your first web ACL in the AWS environment. Let's get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the AWS Management Console, in the search bar at the top, enter WAF, and under Services, click the WAF &amp;amp; Shield result:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flalym9a9dqx5y3vt336f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flalym9a9dqx5y3vt336f.png" alt=" " width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Shield is a &lt;strong&gt;subscription&lt;/strong&gt; service from Amazon that protects your resources against denial of service (DOS) attacks. You will not use AWS Shield in this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; In the left-hand menu, under AWS WAF, &lt;strong&gt;click Protection packs&lt;/strong&gt; (web ACLs):&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5qk5sl8wxrwrdd29qre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5qk5sl8wxrwrdd29qre.png" alt=" " width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br&gt;
On the right-hand side, click &lt;strong&gt;create Protection packs (web ACLs)&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;You will see a multi-step wizard load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the App category section, &lt;strong&gt;select Other:&lt;/strong&gt;
You can select multiple categories at once. Choose what applies best to your endpoint. 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rn7ontsvm4jmalxwish.png" alt=" " width="800" height="401"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Click &lt;strong&gt;Add resources&lt;/strong&gt;, followed by &lt;strong&gt;Add regional resources&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67o50xm5kamvr9c4qgpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67o50xm5kamvr9c4qgpt.png" alt=" " width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjgbsud0bnfs8o1artqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjgbsud0bnfs8o1artqe.png" alt=" " width="725" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; In the list, select the resource  to protect ( an Elastic Load balancer, CloudFront distribution, API gateway etc) and click Add:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh1azalvv4bshe1uflxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh1azalvv4bshe1uflxo.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; In &lt;strong&gt;Choose initial protections section&lt;/strong&gt;, select &lt;strong&gt;Build your own pack&lt;/strong&gt; from all of the protections AWS WAF offers:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglgppn1ab9vixwhxd3c5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglgppn1ab9vixwhxd3c5.png" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Add rules&lt;/strong&gt; section, select &lt;strong&gt;AWS-managed rule group&lt;/strong&gt; , and click &lt;strong&gt;Next&lt;/strong&gt; :&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8muiui0kxc6vpz7cbtn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8muiui0kxc6vpz7cbtn.png" alt=" " width="636" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Managed rule groups are pre-configured sets of rules available either directly from AWS or through AWS Marketplace security vendors. They are designed to provide immediate protection without requiring you to write individual rules.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You have three main options for WAF rules:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Custom Rules:&lt;/strong&gt; You can create and define your own rule groups containing rules tailored specifically for your application.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;AWS-Managed Rules&lt;/strong&gt;: AWS provides certain rule groups, some of which can be used at no extra charge.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Marketplace Rules&lt;/strong&gt;: Rules offered by third-party sellers on the AWS Marketplace generally require a separate subscription fee and associated charges, which are billed in addition to your standard AWS WAF request fees.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will see the list of AWS-provided rule groups. Find and select &lt;strong&gt;SQL Database:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydqix5w5tstkfu3p408q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydqix5w5tstkfu3p408q.png" alt=" " width="630" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The selection of this rule Group targeting SQL injection (SQLi) provides an immediate defense against one of the most common and damaging web attacks.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A SQL injection attack occurs when an attacker embeds malicious SQL code within a standard web request (like a form submission or URL parameter). If the targeted web application is poorly secured, it may execute this malicious code against its backend database.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Successful SQLi attacks grant the attacker unauthorized access to modify or delete data, and can potentially lead to full system compromise by enabling them to escalate privileges.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;While modern, well-written applications employ safeguards (like parameterized queries) to prevent SQLi, information security experts strongly advocate for Defense in Depth. This strategy layers multiple security controls—like using a WAF in front of the application layer—to ensure that if one defense fails, the others remain active.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This specific type of Web ACL rule is invaluable when migrating legacy applications to the cloud. These older systems often have undocumented or vulnerable security models, making the WAF rule group an essential, compensating security control to protect the application while permanent code-level fixes are developed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; To finish adding managed rule groups, scroll to the bottom and click Add rule, leaving all other settings at their defaults:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsc8ylbodte4gwcvmiug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsc8ylbodte4gwcvmiug.png" alt=" " width="635" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; To start adding your own rule, click Add rule &amp;gt; select Custom rule &amp;gt; click Next &amp;gt; select Custom rule once more &amp;gt; click Next:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzd5l75tdj5phbm49h5s.png" alt=" " width="608" height="373"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43f98b81942zgf0rcunh.png" alt=" " width="637" height="703"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule builder page will load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Action field, select Count:
When creating custom rules in WAF Web ACLs, it's recommended to start with Count mode as a critical security best practice focused on mitigating risk and preventing service disruption. Count mode acts as a non-terminating testing phase that allows you to evaluate your rules without blocking any legitimate user traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggcf55ovkmt7lqtqbdo6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggcf55ovkmt7lqtqbdo6.png" alt=" " width="646" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; In the Name field, enter the name of your rule:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below the Rule name section, you will see &lt;strong&gt;If a request&lt;/strong&gt; and a drop-down with matches the statement selected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvc1jqz6r9nmrbykypeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvc1jqz6r9nmrbykypeb.png" alt=" " width="649" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A rule can contain multiple statements. You can configure the rule to match when various conditions, including:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At least one statement matches&lt;/li&gt;
&lt;li&gt;All statements match&lt;/li&gt;
&lt;li&gt;The statement doesn't match the request
&lt;em&gt;This allows for complex and sophisticated rules. You will configure one statement in this rule.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 14&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Fill out the following:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inspect:&lt;/strong&gt; select Body&lt;br&gt;
&lt;strong&gt;Statement:&lt;/strong&gt;&lt;br&gt;
       - Oversize handling: select Continue&lt;br&gt;
       - Match type: select Size greater than&lt;br&gt;
       - Size in bytes: type 512&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr989qh37i81xo1l5a0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr989qh37i81xo1l5a0u.png" alt=" " width="626" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqbf9lc05sueg940hl5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqbf9lc05sueg940hl5q.png" alt=" " width="646" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have configured the condition to match web requests where the body is greater than 512 bytes. Be aware that AWS WAF only checks the first 8192 bytes of requests that it processes.&lt;/p&gt;

&lt;p&gt;At the end of the page, there are a few useful options you should be aware of:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Custom request:&lt;/strong&gt; For Count actions, this allows you to add a header to a web request. When the action is Block, you can specify a custom HTTP response code, add headers, and define the response body.&lt;br&gt;
  &lt;strong&gt;Add label:&lt;/strong&gt; Requests can be labelled by this rule, and then other rules can reference this rule by its label.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Leave both these options at their defaults.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 15&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Add rule:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxr09l7ltmxakexpho6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxr09l7ltmxakexpho6w.png" alt=" " width="633" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be returned to the Add rules page. Here you can also specify the order in which rules are evaluated when the Web ACL is processing a web request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd3g6060qyamd8aio13t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd3g6060qyamd8aio13t.png" alt=" " width="634" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notice 200 WCU and 1 WCU next to each rule. Web ACLs have a budget measured in Web ACL Capacity Units (WCUs), which limits the number of rules that can be used in a single Web ACL. The capacity is a measure of how much computing resource is required to apply the rules. Individual rules can have different WCUs depending upon how complex the rule is.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;WCUs do not affect pricing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 16&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the main Create protection pack (web ACL) page, scroll down to the Name and description section, and in the Name field, enter your preferred ACL name and description:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6p8yxgwmhappcy3l67n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6p8yxgwmhappcy3l67n7.png" alt=" " width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 17&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Click Create protection pack (web ACL):&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: It may take up to a minute for the Web ACL to be created.&lt;/p&gt;

&lt;p&gt;When complete, the Web ACLs list page will load and you will see a success notification:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 18&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Select the newly created web ACL, and then navigate to Manage resource: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bcih4jnosbgjdsw6jh7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bcih4jnosbgjdsw6jh7.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 19&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure your resource is populated as shown below. If not, click on Add regional resources and add your resource:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkvmt9px2u81jznettyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkvmt9px2u81jznettyw.png" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you have successfully created a web ACL with two rules! One rule for detecting web requests containing SQL injection attacks, and another rule for detecting web requests with a large body size.&lt;/p&gt;

</description>
      <category>awsssecurity</category>
      <category>aws</category>
      <category>cloud</category>
      <category>waf</category>
    </item>
    <item>
      <title>Set Up AWS Alerts to catch Cost Spikes and Security Risks</title>
      <dc:creator>Esther Awudu</dc:creator>
      <pubDate>Thu, 18 Sep 2025 04:52:58 +0000</pubDate>
      <link>https://dev.to/secesther/set-up-aws-alerts-to-catch-cost-spikes-and-security-risks-54o3</link>
      <guid>https://dev.to/secesther/set-up-aws-alerts-to-catch-cost-spikes-and-security-risks-54o3</guid>
      <description>&lt;p&gt;Surprise bills are no fun. &lt;br&gt;
Running into them is almost inevitable, especially if you're just getting started. With AWS shifting to a credit-based free tier, it's important than ever to keep your experiments budget-friendly. In this article, I'll walk you through how to set up simple alerts using Amazon CloudWatch to monitor:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Unexpected charges&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;- Root account logins&lt;/strong&gt;&lt;br&gt;
...and there's a challenge at the end for you to try. Let's get started!&lt;/p&gt;




&lt;h2&gt;
  
  
  Using CloudWatch to monitor Unexpected Charges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; : &lt;strong&gt;Enable Billing metrics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the management console, navigate to "&lt;strong&gt;Billing Preferences"&lt;/strong&gt; under "&lt;strong&gt;Billing and Cost Management&lt;/strong&gt;" .&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dy0q0e5tshll9gpned6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dy0q0e5tshll9gpned6.png" alt="Billing and Cost Management" width="463" height="78"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0clmdjuqgwqcjr6s0txb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0clmdjuqgwqcjr6s0txb.gif" alt="Gif navigating to billing preferences" width="424" height="808"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under "&lt;strong&gt;Alert Preferences&lt;/strong&gt;", check the option to "Receive CloudWatch billing alerts". &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Update&lt;/strong&gt; to confirm your changes.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi2tzf9bb4if18jbkrjo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi2tzf9bb4if18jbkrjo.PNG" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create CloudWatch Alarm&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcqxxmiqatqwlbg59kai1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcqxxmiqatqwlbg59kai1.png" alt="Cloudwatch create alarm snapshot" width="368" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the console, navigate to CloudWatch and choose &lt;strong&gt;New Alarm&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;"Specify metric and conditions"&lt;/strong&gt;, select the &lt;strong&gt;"Total Estimated Charge"&lt;/strong&gt; metric  under &lt;strong&gt;"Billings"&lt;/strong&gt; .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fla86lzgmaxh8hc9tygge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fla86lzgmaxh8hc9tygge.png" alt=" " width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj366ngxk8sybxj1qqj0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj366ngxk8sybxj1qqj0.gif" alt="GIF displaying process to select metric" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Conditions&lt;/strong&gt; is where you define the criteria that will trigger your alarm. In the example below, I set the threshold value to $10. As soon as the estimated charge on my account reaches or exceeds $10, the alarm will be triggered. Adjust this threshold to a value that suits your needs.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe25yzvxi56g355xhcmte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe25yzvxi56g355xhcmte.png" alt=" " width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, we go to "&lt;strong&gt;Step 2: Configure actions&lt;/strong&gt;". Here, we define what happens when the alarm is triggered. In our case, we want a notification delivered to us. For the &lt;strong&gt;alarm state trigger&lt;/strong&gt;, we use the "&lt;strong&gt;In Alarm&lt;/strong&gt;" option.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8bfzdsujrea9g24ohzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8bfzdsujrea9g24ohzn.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The notification is delivered via Email through Amazon SNS ( Simple Notification Service). If you do not have an SNS topic set up, you can create one within this step with an active email address. We leave everything else as the default.&lt;br&gt;
&lt;em&gt;Remember to verify your email as the recipient before messages can be sent!&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5r21jpfgsbqf1k3cio2l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5r21jpfgsbqf1k3cio2l.gif" width="760" height="281"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The next step, "&lt;strong&gt;Add Alarm details&lt;/strong&gt;," we give our Alarm a meaningful name. The alarm description is optional; however, it is good practice to set it up. It gives additional context to the alarm being received, especially where you have multiple alarms set up. The format of this body of text follows regular HTML rules.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90ybmhp6xv36unh66xrx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90ybmhp6xv36unh66xrx.gif" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, &lt;strong&gt;Review&lt;/strong&gt; all settings and create your alarm.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once created, your alarm will appear in the CloudWatch dashboard, actively monitoring your AWS charges.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using CloudWatch to monitor Root account usage
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;By default, AWS records the last 90 days of events within an account in the CloudTrail event history. However, the default events do not support triggering alerts, event metrics, and long-term storage. We thereby create a new trail and configure CloudWatch Alarms on it&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; &lt;strong&gt;: Create CloudTrail Trail.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the console, navigate to CloudTrail and select &lt;strong&gt;Create new trail&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6nf1ymdu7f5vi55ky9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6nf1ymdu7f5vi55ky9j.png" alt=" " width="800" height="83"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;em&gt;&lt;strong&gt;Step 1: Choose trail attributes&lt;/strong&gt;:&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a name for your trail under &lt;strong&gt;Trail Name&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Storage Location&lt;/strong&gt;, select &lt;strong&gt;Create new bucket&lt;/strong&gt;. This will serve as the destination of your trail logs. A bucket name would be automatically generated.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2yf66lk7jsa3qdzdysp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2yf66lk7jsa3qdzdysp.png" alt=" " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure the options for &lt;strong&gt;Log file SSE-KMS encryption&lt;/strong&gt; and &lt;strong&gt;Log file validation&lt;/strong&gt; are &lt;strong&gt;unchecked.&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;This is disabled to save costs, reduce complexity, and avoid potential integration or permission challenges, especially in a low-risk environment. But in production, it's best practice to enable both for security and audit integrity&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dw8pxceaj31otk4tl9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dw8pxceaj31otk4tl9c.png" alt=" " width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;CloudWatch Logs&lt;/strong&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;CloudWatch Logs&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;New&lt;/strong&gt; under &lt;strong&gt;Log group&lt;/strong&gt;. A log group name would be automatically generated for you. Ensure you take note of this name.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5c87755ig28zwm4t3qm.png" alt=" " width="800" height="328"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;IAM Role&lt;/strong&gt; select new. An IAM policy would be generated that allows CloudTrail to send events to your CloudWatch group. Name this role and proceed to the next step, "&lt;strong&gt;Choose Log events&lt;/strong&gt;".&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flakt9t3l3j4w5x4jx5dn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flakt9t3l3j4w5x4jx5dn.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;strong&gt;Step 2: Choose Log events&lt;/strong&gt;, select &lt;strong&gt;Management events&lt;/strong&gt; under &lt;strong&gt;Events&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlda0iq1g0578j4ylj77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlda0iq1g0578j4ylj77.png" alt=" " width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scrolling down to &lt;strong&gt;Management Events&lt;/strong&gt;, ensure &lt;strong&gt;Read&lt;/strong&gt; and &lt;strong&gt;Write&lt;/strong&gt; is checked.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjr5jyu0gnasty69w7ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjr5jyu0gnasty69w7ej.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review your changes and create the trail. Confirm your trail has been created in the CloudTrail dashboard.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2f99od58qyo64761rgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2f99od58qyo64761rgh.png" alt=" " width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Set up Metric Filter for Cloudwatch log group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In CloudWatch, identify the log group you created in Step 1. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn0i959zpmf33rvywhlx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn0i959zpmf33rvywhlx.png" alt=" " width="800" height="189"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the log group, click &lt;strong&gt;Actions&lt;/strong&gt;, and select the &lt;strong&gt;Create Metric Filter&lt;/strong&gt; option.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpagadwxfzrcck5sdmpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpagadwxfzrcck5sdmpg.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here in &lt;strong&gt;Step 1: Define Pattern&lt;/strong&gt;, we enter the following metric filter&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ $.userIdentity.type = "Root" &amp;amp;&amp;amp; $.userIdentity.invokedBy NOT EXISTS &amp;amp;&amp;amp; $.eventType != "AwsServiceEvent" }
#This filter will go through our CloudTrail log for root user login activity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leave all other options as default and move to Step 2&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfjuhcxm3a4g51fyxpm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfjuhcxm3a4g51fyxpm7.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Step 2: Assign Metric&lt;/strong&gt;, define a Filter name.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp0toxxn2i77ttk0flhu.png" alt=" " width="800" height="351"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under Metric Details, define;&lt;br&gt;
&lt;strong&gt;A Metric Namespace&lt;/strong&gt; (AccountSecurity)&lt;br&gt;
*&lt;em&gt;A Metric Name *&lt;/em&gt;(RootUserLoginCount)&lt;br&gt;
*&lt;em&gt;A Metric Value *&lt;/em&gt;(1)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy29jq930pft5njz2vh1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy29jq930pft5njz2vh1u.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave all other details as default and review your changes before making them. Your new metric filter will be immediately available!
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphjlf9lrqu5p30mrkaf1.png" alt=" " width="800" height="369"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create CloudWatch Alarm based on MetricFilter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Once your Metric Filter becomes available, select it in your dashboard and create an alarm based on it. This will also be available under &lt;strong&gt;Metrics&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p965d9e6f70milxh7pn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p965d9e6f70milxh7pn.gif" width="760" height="353"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure the right metric has been selected and &lt;em&gt;Statistic&lt;/em&gt; is set to sum. Leave other details under metric as default. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feubmhd39b1w8sj6ivhs5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feubmhd39b1w8sj6ivhs5.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under Conditions, set the following;&lt;br&gt;
&lt;strong&gt;Threshold type **: Static&lt;br&gt;
**Whenever metric (RootUserLoginCount) is&lt;/strong&gt; : Greater/Equal&lt;br&gt;
&lt;strong&gt;than.....&lt;/strong&gt;: 1&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Move to the next step.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyizl9z4prhn1jydvn8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyizl9z4prhn1jydvn8n.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Step 2: Configure actions&lt;/strong&gt;, set Alarm state trigger as In Alarm. 
Choose/Create an SNS Topic for the new alarm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fseykspbiqqcc37zvumns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fseykspbiqqcc37zvumns.png" alt=" " width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add Alarm details&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wwcrw69y76xuxswgj5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wwcrw69y76xuxswgj5g.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review your changes and create your alarm. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98zb7xm4xt21cq6aimim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98zb7xm4xt21cq6aimim.png" alt=" " width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, it's time to test! Log in to your root account to trigger the CloudWatch Alarm and notification.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h5thyrgrnp9hsv2ig0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h5thyrgrnp9hsv2ig0o.png" alt=" " width="800" height="102"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Setting up CloudWatch Alerts is one of the best early steps you can take in securing your AWS account. It helps you stay in control of costs and spot suspicious activity before it escalates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Challenge&lt;/u&gt;&lt;/strong&gt;: Set up a CloudWatch metric filter and Alarm that checks for IAM Policy/Role changes. Comment on what filter you came up with, and let's engage!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;u&gt;Troubleshoot corner&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;I am not receiving a notification after logging into my root account.&lt;/strong&gt; Try the following;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensure your email is a verified recipient of the SNS topic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Publish a message to the SNS topic designated for the RootUserLogin Alarm.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure you are using the custom Metric Filter you created.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this still fails, create a second alarm with the custom Metric Filter. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/securityhub/latest/userguide/cloudwatch-controls.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/securityhub/latest/userguide/cloudwatch-controls.html&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>security</category>
    </item>
    <item>
      <title>Published my first article!</title>
      <dc:creator>Esther Awudu</dc:creator>
      <pubDate>Sat, 31 May 2025 20:46:12 +0000</pubDate>
      <link>https://dev.to/secesther/published-my-first-article-4om2</link>
      <guid>https://dev.to/secesther/published-my-first-article-4om2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff" class="crayons-story__hidden-navigation-link"&gt;Securing your AWS Account: A beginner's guide&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/secesther" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2806327%2Fe92a2e8c-204b-4e8b-8f41-6c4f1e12d493.jpg" alt="secesther profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/secesther" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Esther Awudu
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Esther Awudu
                
              
              &lt;div id="story-author-preview-content-2500141" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/secesther" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2806327%2Fe92a2e8c-204b-4e8b-8f41-6c4f1e12d493.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Esther Awudu&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff" id="article-link-2500141"&gt;
          Securing your AWS Account: A beginner's guide
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloudcomputing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloudcomputing&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>beginners</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Securing your AWS Account: A beginner's guide</title>
      <dc:creator>Esther Awudu</dc:creator>
      <pubDate>Wed, 28 May 2025 13:08:51 +0000</pubDate>
      <link>https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff</link>
      <guid>https://dev.to/secesther/securing-your-aws-account-a-beginners-guide-24ff</guid>
      <description>&lt;p&gt;Kudos for creating your account! However, your setup does not end there. Amazon Web Services runs on a &lt;a href="https://aws.amazon.com/compliance/shared-responsibility-model/" rel="noopener noreferrer"&gt;shared responsibility model&lt;/a&gt; where you, the client, play a significant role in securing your account just as much as your cloud provider would. Without playing your role, you might end up leaving your environment open to determined snoopers. Fortunately, AWS provides a well-documented guide on &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html" rel="noopener noreferrer"&gt;security principles to abide by&lt;/a&gt;, and this article focuses on steps that are essential for beginners. Starting with securing the root account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I.&lt;/strong&gt; &lt;strong&gt;Implement a strong identity foundation.&lt;/strong&gt;&lt;br&gt;
Your root user account is what you are first logged into upon creating your AWS account. It comes with full access to all AWS services and resources. That's a lot of power - and risk, and with great power comes great responsibility. To ensure your account remains secure, you need to;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Avoid using the root account for daily tasks.&lt;/em&gt;&lt;/strong&gt; Yeah I get it, might seem counterintuitive. What's the point of creating an account and NOT using it? You need to understand the amount of power your root account holds. A compromised root account can grant attackers full control of your AWS environment, leading to data breaches, loss of critical data, and more.&lt;br&gt;
To avoid leaving your account vulnerable, &lt;em&gt;&lt;strong&gt;create an IAM user with admin privileges for day-to-day management and use that instead&lt;/strong&gt;&lt;/em&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secondly, &lt;em&gt;&lt;strong&gt;enable multi-factor authentication (MFA) on the root user&lt;/strong&gt;&lt;/em&gt;. This adds an extra layer of protection in addition to a strong password.A virtual MFA application is a great strat to enable MFA on your account. I use Microsoft's Authy, but would recommend Google Authenticator.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rotate your access keys.&lt;/strong&gt; AWS recommends your access keys every 3 months (90 days) to minimize the risk of compromised keys and unauthorized access to your resources.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;P.S. This is all free to set up!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;II.&lt;/strong&gt; &lt;strong&gt;Maintain traceability&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"By failing to prepare, you prepare to fail". This is a quote you need to especially live by in the cloud.&lt;br&gt;
 Preparing for the worst-case scenario better prepares and protects you from failure and long downtimes. &lt;br&gt;
In recovery, you'll need access to your account's activity history to help diagnose your incident. This is where CloudTrail comes in. CloudTrail records all API activity in your AWS account - think of it like a security camera for your cloud. It is free to access on your account and is enabled by default.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;When creating trails, it is recommended to enable the trail in all regions (even those you don't actively use).&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In addition, make sure you store these logs in a secure S3 bucket with limited access.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pajzpy6rgvj3ryfh8dj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pajzpy6rgvj3ryfh8dj.png" alt=" " width="800" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l26ktsgkkxthjn89bvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l26ktsgkkxthjn89bvq.png" alt="You can capture a wide range of events within your account with Cloudtrail." width="800" height="295"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;You can capture a wide range of events within your account with Cloudtrail.&lt;/em&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Additionally set up Cloudwatch alarms to trigger notifications ona wide range of activities that may happen within your account. As a beginner, &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_Anomaly_Detection_Alarm.html" rel="noopener noreferrer"&gt;it is best to set up anomaly detection on your account.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can go a further step by integrating your logs with Amazon CloudWatch for real-time monitoring and alerts. More on this later in upcoming articles.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;III.&lt;/strong&gt; &lt;strong&gt;Review your resources frequently&lt;/strong&gt;.&lt;br&gt;
I've seen a lot of learners fall into the trap of deploying very cool projects only to leave them catching dust without maintenance and reviews. These are the kind of loopholes attackers take advantage of to exploit your resources. If only there was a way to review the configurations within your account to monitor for changes to your resources. Well, as in most cases, AWS has a tool for that. Enter, AWS Config.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Config  provides a detailed view of the resources associated with your AWS account, including how they are configured, how they are related to one another, and how the configurations and their relationships have changed over time.This is key in identifying posssible vulnerabilities and unauthorized changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0u5qu6lyq2bl30cd1qv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0u5qu6lyq2bl30cd1qv.png" alt=" " width="800" height="275"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;In setting up Config, you have the option of a "1-click setup". With this option, AWS creates all necessary AWS resources for you, including AWS IAM service roles and S3 bucket for configuration records.It also configures AWS Config  Recorder to continuously track the configuration for all resources – except for AWS IAM. However, you would still need to select rules. Rules are essentially compliance checks that are evaluated against by Config to manage your ideal configurations. The resulting compliance is displayed for you. &lt;a href="https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html" rel="noopener noreferrer"&gt;AWS has a wide range of managed rules that check compliance for multitudes of resources.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Security isn't a one-time task - it's a continuous process. As you explore AWS, follow these practices to protect your account, your data, and your peace of mind. Strong security habits start now. The earlier you build them, the safer your cloud journey will be.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>beginners</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
