<?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: Mark Rayhshtat</title>
    <description>The latest articles on DEV Community by Mark Rayhshtat (@mark_rayhshtat_b33ccde07a).</description>
    <link>https://dev.to/mark_rayhshtat_b33ccde07a</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%2F3682517%2F3778c9ba-8274-43e8-9967-9fee6ad6df0f.png</url>
      <title>DEV Community: Mark Rayhshtat</title>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mark_rayhshtat_b33ccde07a"/>
    <language>en</language>
    <item>
      <title>Common AWS Tagging Anti-Patterns and How to Fix Them</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Sat, 14 Mar 2026 06:52:01 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/common-aws-tagging-anti-patterns-and-how-to-fix-them-4487</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/common-aws-tagging-anti-patterns-and-how-to-fix-them-4487</guid>
      <description>&lt;p&gt;If your tagging strategy looks good in a slide deck but messy in real AWS accounts, you are not alone. Most teams do not fail because they do not know tags are important. They fail because of repeatable anti-patterns in process, ownership, and enforcement.&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%2F6m49w4valaydjjmks0f0.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%2F6m49w4valaydjjmks0f0.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post covers the most common tagging anti-patterns and gives a practical fix for each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why tagging fails in practice&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Tagging breaks when it depends on memory, manual discipline, or one-time cleanup projects. Cloud environments are dynamic. New teams, new services, new pipelines, and new accounts appear faster than manual governance can keep up.&lt;/p&gt;

&lt;p&gt;A resilient tagging model needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clear taxonomy&lt;/li&gt;
&lt;li&gt;preventive controls&lt;/li&gt;
&lt;li&gt;continuous detection&lt;/li&gt;
&lt;li&gt;automatic remediation&lt;/li&gt;
&lt;li&gt;Without all four, drift returns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A reference tag model you can start with&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before fixing anti-patterns, define one “minimum viable taxonomy” that every team can understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required tags for production&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%2F6ihwyvinyvy4ucmv77v9.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%2F6ihwyvinyvy4ucmv77v9.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optional but high-value tags&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%2Ffsxr7p93afqmo6i3foy5.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%2Ffsxr7p93afqmo6i3foy5.png" alt=" " width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This table gives teams a shared baseline and reduces debates during rollout.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 1: Free-text chaos&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The same concept appears in different values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prod, production, prd&lt;/li&gt;
&lt;li&gt;payments, payment, pay&lt;/li&gt;
&lt;li&gt;team-a, TeamA, team_a&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cost and security reports fragment across near-duplicate values. Dashboards become unreliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Define controlled vocabularies for high-value tags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;environment&lt;/li&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;cost-center&lt;/li&gt;
&lt;li&gt;criticality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enforce with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Organizations Tag Policies for allowed values&lt;/li&gt;
&lt;li&gt;IaC policy checks in CI for pre-deploy validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 2: Duplicate semantics across different keys&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Different teams use different keys for the same meaning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;team&lt;/li&gt;
&lt;li&gt;application-owner&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No single source of truth. Queries and automation become brittle.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Publish a canonical tag dictionary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one approved key per concept&lt;/li&gt;
&lt;li&gt;owner of each key&lt;/li&gt;
&lt;li&gt;allowed values and format&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then deprecate duplicates in phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;warn&lt;/li&gt;
&lt;li&gt;block new usage (for example — SCPs, User policies with deny on specific tags)&lt;/li&gt;
&lt;li&gt;bulk-migrate old resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 3: Ownership tags are optional&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Critical resources exist with no clear owner tag.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Incidents and security findings stall because no team is accountable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Make ownership mandatory for production resources (via SCP’s as an example):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;required key: owner or owner-email&lt;/li&gt;
&lt;li&gt;value format validated (team slug or email pattern)&lt;/li&gt;
&lt;li&gt;non-compliant resources trigger alerts and remediation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add an escalation rule: if owner missing for X hours, route to platform operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 4: Tagging only compute, not dependencies&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;EC2 or Lambda is tagged, but attached storage, networking, and supporting resources are not.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;True cost and blast-radius analysis becomes impossible.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tag by service topology, not by service popularity. Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compute&lt;/li&gt;
&lt;li&gt;storage&lt;/li&gt;
&lt;li&gt;network&lt;/li&gt;
&lt;li&gt;messaging&lt;/li&gt;
&lt;li&gt;managed data stores&lt;/li&gt;
&lt;li&gt;security supporting resources where taggable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define baseline tag coverage per workload, not per resource type.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 5: No lifecycle metadata&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Resources have business tags but no lifecycle context.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You cannot automate cleanup, retention, or scheduling safely.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Introduce lifecycle tags such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lifecycle-state (active, deprecated, temporary)&lt;/li&gt;
&lt;li&gt;created-by&lt;/li&gt;
&lt;li&gt;creation-date&lt;/li&gt;
&lt;li&gt;ttl or expires-at for temporary assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use lifecycle tags for automation targets (cleanup, stop/start schedules, backup classes).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 6: Governance exists only in docs&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A Confluence page defines tagging rules, but no controls enforce it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Compliance decays immediately under delivery pressure.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Build a closed-loop control model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preventive:&lt;/strong&gt; IaC checks and organization policy controls (AWS SCP’s + Tag policies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detective:&lt;/strong&gt; continuous scans for non-compliance (AWS Config)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Corrective:&lt;/strong&gt; automatic tag remediation where safe (AWS Config with custom remediation lambdas)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Policies define intent; automation preserves intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anti-pattern 7: Big-bang cleanup programs&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What it looks like&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Teams try to fix every account and every service in one project.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why it hurts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Program fatigue, high friction, and rollback pressure.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fix&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Use an incremental rollout:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pick top 3 mandatory tags&lt;/li&gt;
&lt;li&gt;apply to top 20% spend services/accounts first&lt;/li&gt;
&lt;li&gt;measure compliance weekly&lt;/li&gt;
&lt;li&gt;expand scope after stability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Progress beats perfection.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How anti-patterns reinforce each other&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;These issues are not isolated. They compound:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free-text values + duplicate keys create reporting fragmentation&lt;/li&gt;
&lt;li&gt;Missing ownership + no lifecycle tags increases both security risk and cost leakage&lt;/li&gt;
&lt;li&gt;Documentation-only governance + big-bang cleanup causes repeated failure cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only fix one anti-pattern, the others can still recreate drift.&lt;br&gt;
That is why closed-loop governance matters more than one-time cleanup.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A practical 30-day remediation plan&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Week 1: Standardize&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define canonical keys and values&lt;/li&gt;
&lt;li&gt;select mandatory tags for production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Week 2: Prevent&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enforce via IaC checks in CI&lt;/li&gt;
&lt;li&gt;apply org-level value constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Week 3: Detect&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run compliance reports across accounts&lt;/li&gt;
&lt;li&gt;classify violations by impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Week 4: Correct&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auto-remediate safe violations&lt;/li&gt;
&lt;li&gt;open owner-routed tasks for manual fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What to do after day 30 (60–90 day plan)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The first month stabilizes fundamentals. The next 60 days operationalize scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Days 31–60: Expand and harden&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expand required tags from top-spend services to full production scope&lt;/li&gt;
&lt;li&gt;onboard security and compliance teams to shared reporting&lt;/li&gt;
&lt;li&gt;introduce service-specific policies for critical workloads&lt;/li&gt;
&lt;li&gt;formalize exception workflow with expiration dates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Days 61–90: Optimize for resilience&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automate correction for deterministic violations&lt;/li&gt;
&lt;li&gt;add drift SLAs by environment (for example, prod drift fixed within 24h)&lt;/li&gt;
&lt;li&gt;integrate tag quality checks into change management and release reviews&lt;/li&gt;
&lt;li&gt;baseline trend dashboards for executives and engineering leads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Common implementation mistakes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Too many required tags on day one&lt;/strong&gt;&lt;br&gt;
This creates rollout friction and pushback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better approach:&lt;/strong&gt; start with 3–5 mandatory tags for production, then expand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: No clear ownership of tag keys&lt;/strong&gt;&lt;br&gt;
If no one owns key definitions, quality decays quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better approach:&lt;/strong&gt; assign a business owner for each canonical key and value dictionary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: No exception expiry&lt;/strong&gt;&lt;br&gt;
Temporary exceptions become permanent debt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better approach:&lt;/strong&gt; every exception must include owner, reason, and expiry date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Metrics without action loops&lt;/strong&gt;&lt;br&gt;
Reports alone do not improve compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better approach:&lt;/strong&gt; tie each KPI to an owner and weekly remediation workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;KPIs that prove tagging is improving&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Track these metrics weekly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tag coverage rate (resources with required tags)&lt;/li&gt;
&lt;li&gt;unknown-owner rate&lt;/li&gt;
&lt;li&gt;cost allocation coverage&lt;/li&gt;
&lt;li&gt;mean time to remediate non-compliant resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these are improving, your tagging program is working.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How TagOps can solve this faster&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you want to avoid building custom tagging governance pipelines from scratch, TagOps gives you a faster path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;centralize your tagging rules in one place&lt;/li&gt;
&lt;li&gt;apply tags consistently across accounts and services&lt;/li&gt;
&lt;li&gt;detect non-compliant resources continuously&lt;/li&gt;
&lt;li&gt;remediate missing or incorrect tags automatically where deterministic&lt;/li&gt;
&lt;li&gt;expose governance and cost attribution improvements through measurable KPIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, this means you can move from ad-hoc cleanup projects to an operational model in days instead of months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define your canonical tag schema and priorities&lt;/li&gt;
&lt;li&gt;connect the relevant AWS accounts&lt;/li&gt;
&lt;li&gt;enable rule-based tagging and remediation flows&lt;/li&gt;
&lt;li&gt;track coverage, ownership, and cost allocation trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest benefit is not just better tags. It is lower operational friction: engineering teams keep shipping, while governance remains consistent in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final takeaway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most tagging failures are not random. They are recurring anti-patterns that can be fixed with design discipline and automation. Start with a minimal canonical schema, enforce it in delivery workflows, and close the loop with detection and remediation.&lt;/p&gt;

&lt;p&gt;That is how tagging becomes operational infrastructure, not documentation.&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>AWS Cost Allocation Tags: Maximize Cost Visibility &amp; Budget Tracking</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Sat, 07 Mar 2026 08:20:47 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/aws-cost-allocation-tags-maximize-cost-visibility-budget-tracking-36og</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/aws-cost-allocation-tags-maximize-cost-visibility-budget-tracking-36og</guid>
      <description>&lt;p&gt;Learn how AWS cost allocation tags enable accurate cost tracking and chargeback. Discover how to automate AWS cost allocation tags for comprehensive cost visibility across departments.&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%2F1rze46km3b65fmdeaglr.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%2F1rze46km3b65fmdeaglr.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost! Money!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the number 1 priority for every single organization going into cloud. We always want to know how much something is going to cost us.&lt;/p&gt;

&lt;p&gt;Knowing how much something costs isn’t always enough for organizations.&lt;/p&gt;

&lt;p&gt;Organizations sometimes behave as different entities within themselves. For example, the Engineering department pays for its stuff from its own budget, and the Security department pays from its budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Challenge: Understanding AWS Costs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In AWS, when you get a bill and want to view what it is made of, how much each resource/service that was consumed cost, you typically go to Cost Explorer unless you have some third-party tool that has all the data and you go there.&lt;/p&gt;

&lt;p&gt;But knowing how much each service costs isn’t always enough.&lt;/p&gt;

&lt;p&gt;Let’s take EC2 for example. The Security department has some instances that host its Firewalls and some bastions for secure access. The Engineering department has its EKS Clusters which create EC2s that serve as nodes.&lt;/p&gt;

&lt;p&gt;But the bill you get from AWS just shows EC2!&lt;/p&gt;

&lt;p&gt;We’re missing an important part here, how do I know how much of the EC2 bill should the security team pay from its budget and how much should the Engineering department?&lt;/p&gt;

&lt;p&gt;If you’re a FinOps person, I believe you know the pain.&lt;/p&gt;

&lt;p&gt;Let’s look at a simple example:&lt;/p&gt;

&lt;p&gt;Here is an image of a bill for an AWS account without any tags:&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%2F56h34w49smmoljsg5tmk.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%2F56h34w49smmoljsg5tmk.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we have the EC2 bill, but we don’t know how much of it is for the Security department and how much is for the Engineering department.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AWS Cost Allocation Tags: The Solution (Partially)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS is, of course, aware of that issue and actually gave a solution to this (partially).&lt;/p&gt;

&lt;p&gt;AWS introduced AWS cost allocation tags, which basically allow you to see the cost for a given tag. These AWS cost allocation tags are user-defined tags that you activate in the Billing and Cost Management console to track spending by department, project, team, or any other dimension you choose.&lt;/p&gt;

&lt;p&gt;So let’s take, for example, our use case. The security team deploys its tags on the resources Department:Security, and Engineering does the same Department:Engineering.&lt;/p&gt;

&lt;p&gt;Now when the FinOps is looking at Cost Explorer, he can filter by the Department tag and see the total cost for each department! So problem solved?&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Here is an image of a bill for the same AWS Account but with tags, specifically filtering for the tag &lt;strong&gt;Department:Security:&lt;/strong&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%2F3oedxc5gzmc75spl7cdk.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%2F3oedxc5gzmc75spl7cdk.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is an image of a bill for the same AWS Account but with tags, specifically filtering for the tag &lt;strong&gt;Department:RnD:&lt;/strong&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%2Foqdfi69bvxy3bg71tg39.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%2Foqdfi69bvxy3bg71tg39.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Well Yes, But Actually No&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Well yes, but actually no.&lt;/p&gt;

&lt;p&gt;Why not? Because it introduces another problem. Yes, we now have a solution for the FinOps cost allocation, but how do we mandate and enforce consistent tagging for all resources?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Tagging Enforcement Challenge&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS introduced a few features that should help with that, like Tag Policies, AWS Config tag compliance, and SCPs that support tag condition keys that can enforce creation of resources with tags.&lt;/p&gt;

&lt;p&gt;The problem with all these solutions is that they aren’t complete, and to have a complete solution you will pour in hundreds of hours into making it automatic with config remediation rules, for example, creating SCPs that deny creation of every single resource (not all are supported today), fixing tags that were missed by tag policies because they don’t actually enforce them, and this goes on and on…&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The TagOps Solution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;But what if I told you that you can achieve all of that with just one tool and an implementation that takes less than 10 minutes?&lt;/p&gt;

&lt;p&gt;As you would have guessed, yes, that’s TagOps.&lt;/p&gt;

&lt;p&gt;With TagOps, you create a rule and TagOps takes care of the implementation end to end.&lt;/p&gt;

&lt;p&gt;TagOps will automatically deploy &lt;strong&gt;AWS cost allocation tags&lt;/strong&gt; according to the conditions you set, re-apply the tags if they were changed or deleted, and automatically apply them to new resources. This ensures your AWS cost allocation tags are always consistent and up-to-date.&lt;/p&gt;

&lt;p&gt;When a resource is tagged with AWS cost allocation tags, you can also view it in the Inventory page (something so simple that, for some reason, AWS still hasn’t introduced — it’s an absolute must for organizations, but even single accounts can benefit from it — no need to switch regions!).&lt;/p&gt;

&lt;p&gt;So in the end you should be able to achieve your dream of having a complete AWS cost allocation tags solution that is automated and easy to manage. With TagOps, your AWS cost allocation tags are applied automatically, ensuring accurate cost tracking and chargeback without manual effort.&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%2Fglydh7dlwpp6a6h3xkjz.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%2Fglydh7dlwpp6a6h3xkjz.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>PCI-DSS 4.0 Tagging Requirements: A Practical Implementation Guide</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Fri, 27 Feb 2026 13:27:41 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/pci-dss-40-tagging-requirements-a-practical-implementation-guide-48a6</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/pci-dss-40-tagging-requirements-a-practical-implementation-guide-48a6</guid>
      <description>&lt;p&gt;Use AWS resource tags as your system of record for PCI scope and data classification. This guide walks through tag-driven compliance with SCPs, Tag Policies, Config, Audit Manager — and how TagOps makes it work at scale.&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%2Fkyk25ura5s987hf004u4.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%2Fkyk25ura5s987hf004u4.png" alt=" " width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Tags Matter for PCI Compliance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PCI-DSS 4.0 introduced a new requirement: organizations must validate and document their PCI scope annually (Requirement 12.5.2). For cloud environments with hundreds or thousands of resources spread across multiple AWS accounts, this isn’t optional — it’s mandatory.&lt;br&gt;
Here’s the challenge: &lt;strong&gt;how do you prove to an auditor that you know exactly what’s in scope, who owns each resource, and what controls apply to it?&lt;/strong&gt;&lt;br&gt;
The answer is simpler than you’d think: &lt;strong&gt;tags&lt;/strong&gt;. By treating AWS resource tags as your system of record for PCI scope and data classification, you can automatically prove compliance. Tags let you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instantly answer “what resources are cardholder data sensitive?”&lt;/li&gt;
&lt;li&gt;Generate a complete, auditable inventory on demand&lt;/li&gt;
&lt;li&gt;Enforce access controls based on data classification&lt;/li&gt;
&lt;li&gt;Continuously prove compliance throughout the year (not just during audit season)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This guide walks through how to build a tag-driven compliance model using AWS-native tools — and how TagOps makes it work at scale.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding the PCI Scope Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PCI-DSS 4.0 Requirement 12.5.2 requires you to maintain proof that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’ve identified all system components that handle cardholder data&lt;/li&gt;
&lt;li&gt;You understand how data flows through your environment&lt;/li&gt;
&lt;li&gt;You’ve documented which networks and systems are “in scope”&lt;/li&gt;
&lt;li&gt;You’ve documented which systems are out of scope and why&lt;/li&gt;
&lt;li&gt;All of this is confirmed at least once per year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For organizations managing AWS infrastructure, this means having a reliable, auditable way to answer these questions quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which EC2 instances, databases, and storage systems touch cardholder data?&lt;/li&gt;
&lt;li&gt;Who owns each resource?&lt;/li&gt;
&lt;li&gt;What controls are applied?&lt;/li&gt;
&lt;li&gt;Can we prove this was all documented 6 months ago?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a systematic approach, answering these questions requires manual spreadsheet work, searching through CloudFormation templates, and asking teams to remember what they built. That works at a small scale, but it breaks down fast.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The Tag-Driven Solution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The practical solution is to use &lt;strong&gt;tags as metadata that describes every resource&lt;/strong&gt;. Think of tags as labels on boxes in a warehouse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A box labeled “Cardholder Data” needs extra security&lt;/li&gt;
&lt;li&gt;A box labeled “John’s Team” means John’s team owns it&lt;/li&gt;
&lt;li&gt;A box labeled “Production” has different rules than “Development”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By consistently labeling resources at creation time, you have a complete, machine-readable inventory that auditors can verify.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Your PCI Tag Schema&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s what a PCI-focused tag schema looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "MandatoryTags": {
    "DataClassification": ["L1-Cardholder", "L2-Internal", "L3-Public"],
    "Compliance": ["PCI", "PCI-CDE", "PCI-Connected", "None"],
    "Environment": ["Prod", "Dev", "Test", "Stage"],
    "PCIScope": ["InScope", "Connected", "SecurityImpacting", "OutOfScope"],
    "AssetOwner": "&amp;lt;Team/Department Name&amp;gt;",
    "AssetFunction": "&amp;lt;What does this resource do?&amp;gt;"
  },
  "OptionalTags": {
    "PaymentChannel": ["CardPresent", "CardNotPresent", "eCommerce"],
    "DataFlow": ["Authorization", "Capture", "Settlement", "Refund"],
    "SegmentationZone": "&amp;lt;Network Segment&amp;gt;",
    "LastScopeReview": "&amp;lt;Review Date&amp;gt;"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once these tags are applied, generating your PCI scope inventory becomes trivial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Get all in-scope resources with one command
aws resourcegroupstaggingapi get-resources \
  --tag-filter "Key=PCIScope,Values=InScope" \
  --output table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That query produces a complete, auditable inventory of every resource you’ve declared as PCI in-scope. No spreadsheets. No guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Mapping PCI Requirements to Tags&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Requirement 2.4: Maintain an Inventory of System Components&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;PCI Requirement 2.4 asks: “Do you have a current, accurate inventory of all system components in scope for PCI DSS?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you need to show an auditor:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A list of all in-scope resources (servers, databases, storage)&lt;/li&gt;
&lt;li&gt;What each resource does (function/use)&lt;/li&gt;
&lt;li&gt;Who owns it&lt;/li&gt;
&lt;li&gt;Its location/account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How tags solve this:&lt;/strong&gt; Your PCIScope, AssetFunction, and AssetOwner tags directly answer these questions. A simple report filters by PCIScope=InScope and exports a CSV with Function and Owner—that's your inventory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Your PCI scope inventory, generated from tags
aws resourcegroupstaggingapi get-resources \
  --tag-filter "Key=PCIScope,Values=InScope" \
  --query 'ResourceTagMappingList[].{
    ARN:ResourceARN,
    Function:Tags[?Key==`AssetFunction`].Value|[0],
    Owner:Tags[?Key==`AssetOwner`].Value|[0],
    DataClass:Tags[?Key==`DataClassification`].Value|[0]
  }' \
  --output table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes your evidence for Requirement 2.4.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Requirement 7: Restrict Access to Cardholder Data&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;PCI Requirement 7 says: “Limit access to system components and cardholder data to only those whose job requires it.” PCI-DSS 4.0 strengthens this with Requirement 7.1.2: “Establish documented role definitions and responsibilities for each role.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How tags solve this:&lt;/strong&gt; AWS Attribute-Based Access Control (ABAC) lets you write one IAM policy that grants access based on matching tags. Instead of hundreds of individual policies, you get one policy that says: “Access resources tagged with your environment only.”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:*",
        "rds:*",
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Environment": "${aws:PrincipalTag/Environment}",
          "aws:ResourceTag/PCIScope": "InScope"
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A developer on the “Platform” team can only access resources tagged with Environment=Platform&lt;/li&gt;
&lt;li&gt;They can only access resources tagged as PCIScope=InScope&lt;/li&gt;
&lt;li&gt;If someone tries to access a resource they shouldn’t, it’s automatically denied&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an auditor asks “How do you enforce least-privilege access?”, you show them this policy plus your tag audit trail. That’s documentable, enforceable, and automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Enforcing Tags: Preventing the Untagged Resource Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The smartest compliance strategy doesn’t catch problems after they happen — it prevents them from happening in the first place.&lt;/p&gt;

&lt;p&gt;AWS provides two complementary mechanisms to enforce tagging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service Control Policies (SCPs)&lt;/strong&gt; prevent resource creation without required tags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag Policies&lt;/strong&gt; standardize tag values across your organization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they make it impossible for untagged resources to enter your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;SCP Pattern 1: Block Resource Creation Without Required Tags&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This SCP prevents anyone from launching EC2 instances, creating databases, or setting up storage unless they provide the mandatory compliance tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyResourceCreationWithoutPCITags",
      "Effect": "Deny",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateVolume",
        "rds:CreateDBInstance",
        "s3:CreateBucket"
      ],
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:RequestTag/DataClassification": "true",
          "aws:RequestTag/Compliance": "true",
          "aws:RequestTag/PCIScope": "true",
          "aws:RequestTag/AssetOwner": "true"
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does:&lt;/strong&gt; If someone tries to launch an EC2 instance without the four mandatory tags, the action is denied. They get an error message that says: “Add tags before you can create this resource.” Problem solved before it starts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters for PCI:&lt;/strong&gt; Resources cannot slip through untagged. Every EC2 instance, RDS database, and S3 bucket requires tagging decisions at creation time. This shifts compliance from “hope we remember to tag” to “tagging is required.”&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;SCP Pattern 2: Protect Compliance Tags From Deletion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once tags are applied, you want to make sure they can’t be accidentally (or intentionally) deleted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyComplianceTagDeletion",
      "Effect": "Deny",
      "Action": [
        "ec2:DeleteTags",
        "rds:RemoveTagsFromResource",
        "s3:DeleteObjectTagging"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": [
            "DataClassification",
            "Compliance",
            "PCIScope",
            "AssetOwner"
          ]
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does:&lt;/strong&gt; Users cannot delete these tags. If an auditor asks “Have these tags been in place the whole time?”, you can confidently say yes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tag Policy: Enforce Consistent Tag Values&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tag Policies are specifically designed to standardize tag values across your organization. You define which values are allowed, and AWS enforces it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "tags": {
    "DataClassification": {
      "tag_key": {
        "@@assign": "DataClassification"
      },
      "enforced_for": {
        "@@assign": [
          "ec2:*",
          "rds:*",
          "s3:*",
          "dynamodb:*"
        ]
      },
      "tag_value": {
        "@@assign": [
          "L1-Cardholder",
          "L2-Internal",
          "L3-Public"
        ]
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does:&lt;/strong&gt; The DataClassification tag can only have three values: L1-Cardholder, L2-Internal, or L3-Public. Misspellings like "L1-CHD" or "cardholder-data" are not allowed. This prevents the tag chaos that often derails compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; When you generate your inventory report, every resource has a consistent, standard value for data classification. Your auditor can trust that “L1-Cardholder” means the same thing across your entire environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Continuous Compliance Monitoring: AWS Config + Audit Manager&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PCI-DSS 4.0 asks for proof that scope is validated continuously, not just once a year. AWS provides two tools that work together to make this happen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Config&lt;/strong&gt; continuously evaluates your resources against rules (including tag compliance).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Audit Manager&lt;/strong&gt; aggregates those evaluations and generates auditor-ready reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How It Works Together&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Think of it like this: &lt;strong&gt;AWS Config&lt;/strong&gt; is a referee that watches your resources every day and says “This resource has the required tags ✓” or “This resource is missing tags ✗”. &lt;strong&gt;AWS Audit Manager&lt;/strong&gt; is a scorekeeper that collects all those ref decisions, organizes them by PCI requirement, and produces a report. Audit Manager doesn’t check tags directly — it uses Config’s evaluations as evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Setting Up AWS Config for Tag Compliance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AWS Config comes with a built-in rule called required-tags that checks if resources have specific tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resources:
  PCITagComplianceRule:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName: PCI-Required-Tags
      Description: Ensures all resources have mandatory PCI tags
      InputParameters:
        tag1Key: DataClassification
        tag2Key: Compliance
        tag3Key: PCIScope
        tag4Key: AssetOwner
      Source:
        Owner: AWS
        SourceIdentifier: REQUIRED_TAGS
      Scope:
        ComplianceResourceTypes:
          - AWS::EC2::Instance
          - AWS::RDS::DBInstance
          - AWS::S3::Bucket
          - AWS::EBS::Volume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does:&lt;/strong&gt; Config continuously checks your EC2 instances, databases, and storage. If a resource is missing any of these tags, it marks it “non-compliant.” This evaluation happens automatically, and the results are stored in Config’s database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; You have a continuous, timestamped record of compliance. If an auditor asks “Were all your resources properly tagged on January 15th?”, you can show them the Config evaluation results from that date.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Using Audit Manager for PCI DSS 4.0&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AWS released a PCI DSS 4.0 framework for Audit Manager in December 2023. Here’s what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It comes with prebuilt controls that map to PCI requirements&lt;/li&gt;
&lt;li&gt;It automatically pulls evidence from AWS services (Config rules, CloudTrail, Security Hub)&lt;/li&gt;
&lt;li&gt;It generates reports showing which controls you’re compliant with and which need attention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you create a PCI DSS 4.0 assessment in Audit Manager, you tell it to use Config as an evidence source. Audit Manager then: (1) Continuously pulls your Config rule evaluations, (2) Maps them to PCI controls (e.g., “Config confirms tags are present” → Requirement 2.4), (3) Includes the results in your assessment report.&lt;/p&gt;

&lt;p&gt;So when an auditor asks for evidence of Requirement 2.4 (inventory), you provide: the Audit Manager assessment report, Config rule evaluation history, a live query of all in-scope resources filtered by tags, and proof that controls (SCPs/Tag Policies) are in place. That’s far stronger than a spreadsheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Automatic Remediation: Tag Resources in Real Time&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You can set up Lambda functions to automatically apply tags to resources that Config marks as non-compliant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3
def lambda_handler(event, context):
    resource_arn = event['detail']['resourceId']

    client = boto3.client('resourcegroupstaggingapi')

    # Apply default tags to untagged resources
    default_tags = {
        'DataClassification': 'L3-Public',
        'Compliance': 'UnderReview',
        'PCIScope': 'Unknown',
        'AssetOwner': 'RequiresReview'
    }

    # Tag the resource
    client.tag_resources(
        ResourceARNList=[resource_arn],
        Tags=default_tags
    )

    # Notify the team
    sns = boto3.client('sns')
    sns.publish(
        TopicArn='arn:aws:sns:region:account:pci-alerts',
        Subject='Untagged Resource Auto-Tagged',
        Message=f'Resource {resource_arn} was auto-tagged. Please review and update the tags.'
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does:&lt;/strong&gt; When Config detects an untagged resource, Lambda automatically applies conservative default tags and notifies your team. The resource gets tagged in seconds, preventing scope gaps.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Your PCI Audit Looks Like With Tags&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When audit season arrives, here’s what your evidence looks like:&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%2Fuvzruwl6ucixly4m7upi.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%2Fuvzruwl6ucixly4m7upi.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key difference from traditional approaches: &lt;strong&gt;everything is automated, verifiable, and timestamped.&lt;/strong&gt; Auditors can see exactly what was in place on any given date.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Where TagOps Fits In&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS provides all the foundational tools (SCPs, Tag Policies, Config, Audit Manager). But orchestrating them requires significant setup: designing your tag schema, creating Config rules, writing remediation Lambda functions, configuring Audit Manager assessments, and training teams on the process.&lt;/p&gt;

&lt;p&gt;TagOps automates this orchestration. Instead of building and managing these pieces yourself, TagOps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides pre-built tag schemas customized for PCI compliance&lt;/li&gt;
&lt;li&gt;Auto-tags resources in real time based on rules you define&lt;/li&gt;
&lt;li&gt;Generates compliance reports ready for auditors&lt;/li&gt;
&lt;li&gt;Maintains continuous compliance across all your AWS accounts&lt;/li&gt;
&lt;li&gt;Scales to organizations managing hundreds or thousands of resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as “automated tagging operations” — the compliance infrastructure that keeps tags consistent, up-to-date, and auditable without manual effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How TagOps Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define tagging rules:&lt;/strong&gt; “If this is a production RDS instance, tag it as L1-Cardholder + InScope”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy to your accounts:&lt;/strong&gt; TagOps monitors CloudTrail and applies tags automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor compliance:&lt;/strong&gt; Dashboard shows tag coverage and non-compliant resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate audit reports:&lt;/strong&gt; Export compliance evidence ready for your auditor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remediate continuously:&lt;/strong&gt; Auto-tag resources that slip through, alert teams for review&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Bottom Line&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PCI-DSS 4.0’s scope validation requirement (12.5.2) is mandatory. Meeting it at scale in AWS requires a systematic, auditable approach. Tags provide exactly that: &lt;strong&gt;a machine-readable, continuously-validated, auditable system of record for PCI scope and controls.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By combining AWS-native tools (SCPs, Tag Policies, Config, Audit Manager) or via automation (TagOps), you transform PCI compliance from a seasonal scramble into a continuous operational reality.&lt;/p&gt;

&lt;p&gt;The organizations that get this right will pass audits faster, maintain confidence in their scope accuracy, and avoid the compliance debt that comes with manual processes.&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>Automatic AWS Tags for AWS Backup: Complete Automation Guide</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Fri, 06 Feb 2026 12:51:16 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/automatic-aws-tags-for-aws-backup-complete-automation-guide-411b</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/automatic-aws-tags-for-aws-backup-complete-automation-guide-411b</guid>
      <description>&lt;p&gt;Learn how to apply automatic AWS tags to AWS Backup resources using AWS tagging automation. Maintain consistency, improve cost tracking, and enhance operational visibility across your backup infrastructure with automated tagging.&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%2F1jyenu5x7etr7sbqptul.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%2F1jyenu5x7etr7sbqptul.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Backup is a fully managed backup service that makes it easy to centralize and automate the backup of data across AWS services.&lt;/p&gt;

&lt;p&gt;But how would you back up specific resources? For example, you want to back up only the resources that are tagged with a specific tag, or only production resources.&lt;/p&gt;

&lt;p&gt;This is where AWS tagging automation comes in. TagOps provides automatic AWS tags for your resources, ensuring consistent tagging across your AWS infrastructure. With automatic AWS tags, you can automate the backup of specific resources based on tags.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore how to implement AWS tagging automation for AWS Backup resources using TagOps to apply automatic AWS tags automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Use AWS Tagging Automation for AWS Backup?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Implementing AWS tagging automation with automatic AWS tags for backup resources provides several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operational Excellence:&lt;/strong&gt; Quickly identify backup resources with automatic AWS tags applied as soon as they are created&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability:&lt;/strong&gt; Thanks to automatic AWS tags, AWS Backup will always back up your most critical resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Governance:&lt;/strong&gt; AWS tagging automation enforces tagging policies automatically without manual intervention (which can be error-prone)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Allocation:&lt;/strong&gt; Track backup costs by department, project, or environment using automatic AWS tags&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding AWS Backup Resource Types&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS Backup manages several resource types that can benefit from automated tagging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backup Plans:&lt;/strong&gt; Define when and how backups are created&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup Vaults:&lt;/strong&gt; Containers that organize and store recovery points&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery Points:&lt;/strong&gt; Point-in-time backups of your resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup Selections:&lt;/strong&gt; Define which resources to back up&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Onboard your AWS Accounts to TagOps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Navigate to console.tagops.cloud, log in to your account and navigate to the AWS Accounts page. Click on the “Add AWS Account” button and follow the instructions to onboard your AWS Accounts to TagOps. You will need to provide the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Account Name:&lt;/strong&gt; A custom name for your AWS Account that will be used in TagOps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Account ID:&lt;/strong&gt; The 12-digit AWS account number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM Role Name:&lt;/strong&gt; The name of the IAM role that will be used to access the AWS Account&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External ID:&lt;/strong&gt; The external ID that will be used to access the AWS Account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then create a CloudFormation stack in your AWS Account to create the necessary IAM role to allow TagOps to access your AWS Account.&lt;/p&gt;

&lt;p&gt;Once the CloudFormation stack is created, click on the “Verify Account” button to verify that the account has been onboarded successfully.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Configure AWS Tagging Automation in TagOps for Automatic AWS Tags&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Navigate to console.tagops.cloud, log in to your account and navigate to the Rules page. Click on the “Add Rule” button and follow the instructions to create a new rule for AWS tagging automation. You will need to provide the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule Name:&lt;/strong&gt; A custom name for your AWS tagging automation rule that will be used in TagOps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rule Conditions:&lt;/strong&gt; The conditions that must be met for the rule to apply (e.g., resource type, region, account, tag key, tag value, etc.) Here you can use the “Resource Type” condition to match the resource type of the AWS Backup 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%2F0na8sygqurzdxp5smejo.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%2F0na8sygqurzdxp5smejo.png" alt=" " width="800" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule Actions:&lt;/strong&gt; The automatic AWS tags that will be applied to the AWS Backup resource when the AWS tagging automation rule is applied. Here you can use the “Add Tag” action to add a new automatic AWS tag to the AWS Backup 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%2Fz3l6yo3xotdpkz2655gp.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%2Fz3l6yo3xotdpkz2655gp.png" alt=" " width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then click on the “Save Rule” button to save your AWS tagging automation rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Create your AWS Backup Plan&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In your AWS Account, create an AWS Backup plan as per AWS documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/aws-backup/latest/devguide/creating-a-backup-plan.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/aws-backup/latest/devguide/creating-a-backup-plan.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don’t forget to configure backup plan resource assignment using tags (1 or any of the tags you created in TagOps in Step 2)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#backup-resource-assignment" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#backup-resource-assignment&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it! You have now configured AWS tagging automation in TagOps to apply automatic AWS tags to AWS Backup resources.&lt;/p&gt;

&lt;p&gt;From this moment on, the following happens with your AWS tagging automation (if a given AWS resource matches the conditions of the rule you have configured):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a new AWS resource is created, TagOps AWS tagging automation will automatically apply automatic AWS tags with the tags you have configured.&lt;/li&gt;
&lt;li&gt;When an existing AWS resource is updated, TagOps AWS tagging automation will automatically apply automatic AWS tags with the tags you have configured.&lt;/li&gt;
&lt;li&gt;Once a day, TagOps AWS tagging automation will scan your AWS Account for AWS resources that are not tagged and apply automatic AWS tags with the tags you have configured.
(You can change the daily scan time in TagOps Console -&amp;gt; Settings -&amp;gt; System Settings -&amp;gt; Scan Settings)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>secops</category>
      <category>finops</category>
    </item>
    <item>
      <title>SCP vs Tag Policy: AWS Tagging Governance Comparison</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Mon, 02 Feb 2026 14:10:49 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/scp-vs-tag-policy-aws-tagging-governance-comparison-53m7</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/scp-vs-tag-policy-aws-tagging-governance-comparison-53m7</guid>
      <description>&lt;p&gt;In multi-account AWS environments, inconsistent tagging destroys cost allocation accuracy, security automation, and compliance reporting. Learn how AWS Organizations provides two policy mechanisms—Service Control Policies (SCPs) and Tag Policies—and when to use each approach.&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%2F58txhn7rvzv9ex7msqon.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%2F58txhn7rvzv9ex7msqon.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Tagging Governance Gap&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In multi-account AWS environments, inconsistent tagging destroys cost allocation accuracy, security automation, and compliance reporting. Manual tagging approaches fail at scale-engineers forget tags, automation tools bypass standards, and shadow IT creates untagged resources. AWS Organizations provides two policy mechanisms, but misapplying them creates governance blind spots.&lt;/p&gt;

&lt;p&gt;SCPs operate as identity-based guardrails, evaluating API requests before resource creation. They enforce presence but cannot validate value formats or case consistency. Tag Policies operate as resource-based validators, checking compliance after creation and supporting complex validation rules, but cannot prevent resource launch when enforcement is disabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Core Technical Distinctions&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Service Control Policies (SCPs)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SCPs are explicit-deny policies attached to OUs or accounts that filter API calls made by IAM principals. For tagging, they use aws:RequestTag and ec2:ResourceTag condition keys to block resource creation when required tags are absent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation Point:&lt;/strong&gt; Pre-creation API request filtering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; All AWS services and actions (broad coverage)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement:&lt;/strong&gt; Binary—denies or allows; no partial compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; On error, it takes time to understand why did we get an error (need to evaluate SCP's and understand which one blocked the request).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitations:&lt;/strong&gt; 5 SCPs per OU/account, 5,120-byte size limit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example SCP Blocking Untagged EC2 Instances:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyUntaggedEC2",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "Null": {
                    "ec2:ResourceTag/Environment": "true"
                }
            }
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Tag Policies&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tag Policies are JSON documents defining tag schema rules, attached to OUs or accounts. They validate tag keys, values, case treatment, and can enforce compliance on supported resource types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation Point:&lt;/strong&gt; Post-creation validation and compliance reporting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; 50+ AWS services with enforced_for support (limited coverage)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement:&lt;/strong&gt; Optional—can operate in report-only or enforcement mode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; The time it takes to remediate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capabilities:&lt;/strong&gt; Value pattern matching, case enforcement, tag key standardization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example Tag Policy Enforcing CostCenter Values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "tags": {
        "CostCenter": {
            "tag_key": {
                "@@assign": "CostCenter"
            },
            "tag_value": {
                "@@assign": ["HR", "Legal", "Engineering"]
            },
            "enforced_for": {
                "@@assign": ["ec2:instance", "rds:db"]
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Key Characteristics Comparison&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here's a side-by-side comparison of the key characteristics between SCPs and Tag Policies:&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%2Fk7sf7tgy8v2f7nagbfj7.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%2Fk7sf7tgy8v2f7nagbfj7.png" alt=" " width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When to Use Each Approach&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So which one to use when? Let’s take a look at some scenarios:&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%2Fr19jt9yo8lvemmm55m90.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%2Fr19jt9yo8lvemmm55m90.png" alt=" " width="613" height="822"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag policies and SCPs are complementary to each other — not interchangeable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The right way to implement tagging in your AWS Environment is to use them together in a layered approach:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Layered Policy Approach&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Root Level:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mandatory Tags SCP: Block untagged resource creation for critical tags only (Environment, DataClassification)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;OU Level (Tag Policies):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development OU: Enforce Environment=dev, CostCenter, ProjectID with value validation&lt;/li&gt;
&lt;li&gt;Production OU: Enforce Environment=prod, DataClassification, Compliance with case sensitivity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Implementation phases:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Phase 1: Deploy Tag Policies in report-only mode for 30 days to baseline compliance&lt;/li&gt;
&lt;li&gt;Phase 2: Enable enforcement on Tag Policies for supported services (EC2, RDS, S3)&lt;/li&gt;
&lt;li&gt;Phase 3: Deploy SCPs for critical tags that cannot be enforced via Tag Policies (EMR, Lambda, cross-service)&lt;/li&gt;
&lt;li&gt;Phase 4: Monitor CloudTrail ServiceEventDenied events to tune false positives&lt;/li&gt;
&lt;li&gt;Phase 5: Implement automated remediation via AWS Config rules for existing non-compliant resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What to Avoid?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Over-Specific Tag Enforcement&lt;/strong&gt;&lt;br&gt;
SCPs cannot validate regex patterns or enumerated values. Attempting to enforce CostCenter format via SCP requires multiple StringNotLike conditions, hitting the 5,120-byte limit quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blocking Tag Deletion with SCPs&lt;/strong&gt;&lt;br&gt;
While possible, using SCPs to prevent ec2:DeleteTags creates operational lock-in. Tag Policies' native tag retention capabilities are more maintainable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service-Specific SCPs for Tagging&lt;/strong&gt;&lt;br&gt;
Creating separate SCPs per service wastes quota. Combine related services into single SCP using Resource element wildcards where possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag Policy Limitations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforcement Gaps: Tag Policies validate tags on the master resource, not auto-created sub-resources. EMR clusters launching EC2 instances propagate tags inconsistently — SCPs are required for sub-resource enforcement.&lt;/li&gt;
&lt;li&gt;Partial Service Coverage: Only 50+ services support enforced_for. Services like Lambda, EMR, and many container services require SCP fallback which might be disruptive and not user friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SCPs and Tag Policies are not interchangeable — they are complementary governance layers. SCPs provide hard guardrails preventing resource launch without mandatory tags, essential for security and compliance boundaries. Tag Policies provide soft governance ensuring tag consistency and value standardization, critical for cost allocation and automation.&lt;/p&gt;

&lt;p&gt;The critical insight: Use SCPs to enforce tag existence on critical resources (production workloads, data stores, security services) where launch prevention is non-negotiable. Use Tag Policies to enforce tag quality (value formats, case sensitivity, schema compliance) across all resources where reporting and gradual remediation suffice.&lt;/p&gt;

&lt;p&gt;Your tagging strategy should be layered, not monolithic. Start with Tag Policies in audit mode, add SCPs for critical tags, and refine based on real-world developer feedback. This approach prevents governance from becoming a deployment bottleneck while maintaining security and cost management integrity.&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>AWS Tagging Best Practices in 2026: Leveraging New Capabilities for Enhanced Cloud Governance</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Wed, 21 Jan 2026 10:45:55 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/aws-tagging-best-practices-in-2026-leveraging-new-capabilities-for-enhanced-cloud-governance-fom</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/aws-tagging-best-practices-in-2026-leveraging-new-capabilities-for-enhanced-cloud-governance-fom</guid>
      <description>&lt;p&gt;As cloud environments continue to grow in complexity and scale, effective resource tagging has evolved from a best practice to a business imperative. In 2026, AWS tagging capabilities have matured significantly, introducing powerful new features that transform how organizations manage cloud resources, control costs, and enforce security policies. This comprehensive guide explores the latest AWS tagging innovations and provides actionable strategies for implementing enterprise-grade tagging practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Evolution of AWS Tagging: What's New in 2025-2026
&lt;/h2&gt;

&lt;p&gt;AWS has introduced several groundbreaking enhancements to its tagging ecosystem over the past year, addressing long-standing challenges in tag policy management, infrastructure-as-code validation, and access control. These innovations represent a fundamental shift toward proactive governance and automated enforcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wildcard Support for Tag Policies (July 2025)
&lt;/h3&gt;

&lt;p&gt;One of the most significant updates arrived in July 2025 when AWS Organizations introduced wildcard support for tag policies using the ALL_SUPPORTED keyword in the Resource element. This enhancement dramatically simplifies policy authoring and reduces policy maintenance overhead. &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/07/aws-organization-tag-policies-wildcard-statement/" rel="noopener noreferrer"&gt;Read the announcement here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously, organizations had to list each resource type individually in their tag policies. For example, enforcing an "Environment" tag with "Prod" or "Non-Prod" values across EC2 required explicitly specifying instances, volumes, snapshots, and other resource types. With the new wildcard support, you can now apply the same rule to all supported EC2 or S3 resource types in a single line.&lt;/p&gt;

&lt;p&gt;Before (Legacy Approach):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Resource": [
    "arn:aws:ec2:*:*:instance/*",
    "arn:aws:ec2:*:*:volume/*",
    "arn:aws:ec2:*:*:snapshot/*",
    "arn:aws:ec2:*:*:network-interface/*"
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After (Wildcard Approach):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Resource": "ALL_SUPPORTED"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This capability reduces policy complexity by 60-80% in multi-service environments and ensures that newly introduced resource types automatically inherit existing tag policies without manual updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure-as-Code Tag Validation (November 2025)
&lt;/h3&gt;

&lt;p&gt;In November 2025, AWS Organizations launched "Reporting for Required Tags," enabling pre-deployment validation of CloudFormation, Terraform, and Pulumi templates against organizational tag policies. This proactive enforcement mechanism prevents non-compliant resources from being created, eliminating the costly remediation efforts traditionally required after deployment. Read the announcement here.&lt;/p&gt;

&lt;p&gt;The validation process operates through service-specific integrations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CloudFormation:&lt;/strong&gt; Activate the AWS::TagPolicies::TaggingComplianceValidator hook in target accounts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terraform:&lt;/strong&gt; Add validation logic to your Terraform plan using the compliance module&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pulumi:&lt;/strong&gt; Enable the aws-organizations-tag-policies policy pack&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations implementing this capability report a 95% reduction in tag compliance violations and eliminate the manual overhead of post-deployment tag cleanup. For DevOps teams managing hundreds of daily deployments, this translates to significant time savings and improved governance posture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced S3 Tagging Capabilities
&lt;/h3&gt;

&lt;p&gt;AWS introduced substantial improvements to S3 tagging throughout 2025, addressing limitations in the previous tagging API and expanding ABAC (Attribute-Based Access Control) support across the S3 ecosystem.&lt;/p&gt;

&lt;h4&gt;
  
  
  New S3 Tagging APIs (December 2025)
&lt;/h4&gt;

&lt;p&gt;The traditional S3 bucket tagging API required replacing the entire tag set even when modifying a single tag. AWS introduced new TagResource and UntagResource APIs that align with standard AWS tagging patterns, enabling single-tag operations without affecting other tags. This granular control reduces API calls and minimizes the risk of accidentally removing critical tags during updates. &lt;a href="https://www.youtube.com/watch?v=Sy2LHRyMXAo&amp;amp;t=272s" rel="noopener noreferrer"&gt;Watch the announcement here.&lt;/a&gt;&lt;br&gt;
This update went somewhat unnoticed, but it's a nice improvement.&lt;/p&gt;
&lt;h4&gt;
  
  
  S3 Tables and Access Points ABAC Support (November 2025)
&lt;/h4&gt;

&lt;p&gt;AWS extended ABAC capabilities to S3 Tables and S3 Access Points, allowing organizations to manage permissions based on resource tags rather than explicit policy statements. This enhancement eliminates frequent IAM policy updates when adding users, roles, or resources, simplifying governance at scale. &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/11/amazon-s3-tags-s3-tables/" rel="noopener noreferrer"&gt;Read the S3 Tables announcement here&lt;/a&gt; and &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/11/amazon-s3-attribute-based-access-control/" rel="noopener noreferrer"&gt;the S3 ABAC announcement here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, you can now create an IAM policy that grants access to any S3 access point tagged with Project:DataScience and Sensitivity:Confidential, automatically extending permissions to newly created access points that match these tags without modifying the policy.&lt;/p&gt;
&lt;h4&gt;
  
  
  S3 Express One Zone Tagging (July 2025)
&lt;/h4&gt;

&lt;p&gt;The high-performance S3 Express One Zone storage class gained full tagging support for cost allocation and ABAC, enabling organizations to apply the same tag-based governance patterns to their most demanding workloads. Read the announcement here.&lt;/p&gt;
&lt;h2&gt;
  
  
  Foundational Tagging Best Practices for 2026
&lt;/h2&gt;

&lt;p&gt;While new capabilities provide powerful tools, effective tagging requires a solid foundation. Organizations achieving the highest ROI from tagging investments follow these core principles.&lt;/p&gt;
&lt;h3&gt;
  
  
  Establish a Comprehensive Tagging Strategy
&lt;/h3&gt;

&lt;p&gt;A successful tagging strategy balances business requirements, technical constraints, and operational realities. The optimal approach involves cross-functional collaboration during the design phase to ensure tags serve multiple stakeholders.&lt;/p&gt;
&lt;h4&gt;
  
  
  Core Tag Categories
&lt;/h4&gt;

&lt;p&gt;Every AWS resource should include tags across these essential dimensions:&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%2Fu5v14px8ui0aq9g4cj31.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%2Fu5v14px8ui0aq9g4cj31.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most effective tagging strategies define 8-12 mandatory tags that apply to all resources, supplemented by 5-10 optional tags for specific use cases. This balance provides sufficient granularity without creating tag sprawl that becomes difficult to maintain.&lt;/p&gt;
&lt;h4&gt;
  
  
  Naming Conventions and Consistency
&lt;/h4&gt;

&lt;p&gt;Tag keys and values are case-sensitive in AWS, meaning Environment, environment, and ENVIRONMENT are treated as distinct tags. Organizations should establish strict naming conventions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Case Standard:&lt;/strong&gt; Choose PascalCase, camelCase, or lowercase-with-hyphens and apply consistently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delimiter Policy:&lt;/strong&gt; Standardize on hyphens (-) or underscores (_) for multi-word values&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Character Restrictions:&lt;/strong&gt; Avoid special characters beyond hyphens and underscores&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Value Enumeration:&lt;/strong&gt; Define allowed values for tags with finite options (e.g., Environment: [Dev, Test, Staging, Prod])&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Document these conventions in a centralized tagging policy document accessible to all teams, and incorporate them into your IaC templates and automation scripts.&lt;/p&gt;
&lt;h3&gt;
  
  
  Implement Tag Policies with AWS Organizations
&lt;/h3&gt;

&lt;p&gt;AWS Organizations provides centralized tag policy management that enforces consistency across accounts and organizational units. Tag policies operate in two modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enforcement Mode:&lt;/strong&gt; Prevents resource creation or modification if tags don't comply with defined policies. Use this for critical tags that must be present on all resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reporting Mode:&lt;/strong&gt; Identifies non-compliant resources without blocking operations, useful during initial rollout or for optional tags.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A typical implementation strategy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with Reporting:&lt;/strong&gt; Deploy tag policies in reporting mode to assess current compliance levels&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Remediate Existing Resources:&lt;/strong&gt; Use AWS Config and Lambda to fix non-compliant resources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enable Enforcement:&lt;/strong&gt; Switch to enforcement mode once compliance reaches 90%+&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Monitoring:&lt;/strong&gt; Maintain reporting for optional tags and audit enforcement effectiveness&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With the new wildcard support, a single tag policy can now cover entire service families, reducing the number of policies from dozens to a handful.&lt;/p&gt;
&lt;h3&gt;
  
  
  Automate Tagging from Day One
&lt;/h3&gt;

&lt;p&gt;Manual tagging fails at scale due to human error, inconsistency, and the cognitive burden placed on resource creators. Organizations achieving 95%+ tag compliance rates rely on automation throughout the resource lifecycle.&lt;/p&gt;
&lt;h4&gt;
  
  
  Infrastructure as Code Integration
&lt;/h4&gt;

&lt;p&gt;Embed tags directly in your IaC templates to ensure every resource is tagged at creation:&lt;/p&gt;

&lt;p&gt;Terraform Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Use default tags at the provider level
provider "aws" {
  region = "us-east-1"

  default_tags {
    tags = {
      Environment    = var.environment
      Project        = var.project_name
      Owner          = var.owner_email
      CostCenter     = var.cost_center
      ManagedBy      = "Terraform"
      DeploymentDate = timestamp()
    }
  }
}

# Additional resource-specific tags
resource "aws_instance" "web_server" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t3.medium"

  tags = {
    Name         = "${var.environment}-web-server"
    Application  = "WebFrontend"
    BackupPolicy = "Daily"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudFormation with Required Tag Validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resources:
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId
      InstanceType: t3.medium
      Tags:
        - Key: Environment
          Value: !Ref EnvironmentParameter
        - Key: Owner
          Value: !Ref OwnerParameter
        - Key: CostCenter
          Value: !Ref CostCenterParameter
        - Key: Application
          Value: WebFrontend

# Hook validation ensures required tags are present
Hooks:
  TagComplianceValidator:
    Type: AWS::TagPolicies::TaggingComplianceValidator
    Properties:
      FailureMode: FAIL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The IaC validation introduced in November 2025 ensures that these templates cannot deploy resources missing required tags, providing a guardrail at the pipeline level.&lt;/p&gt;

&lt;h4&gt;
  
  
  Event-Driven Auto-Tagging
&lt;/h4&gt;

&lt;p&gt;For resources created outside IaC workflows (console deployments, SDK operations), implement event-driven tagging using CloudTrail, EventBridge, and Lambda. This pattern captures resource creation events and automatically applies organizational tags based on the creator's identity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3
import json

def lambda_handler(event, context):
    # Extract resource information from CloudTrail event
    event_name = event['detail']['eventName']
    username = event['detail']['userIdentity']['principalId']

    # Get user attributes from IAM Identity Center
    identity_store = boto3.client('identitystore')
    user_info = identity_store.describe_user(
        IdentityStoreId=IDENTITY_STORE_ID,
        UserId=username
    )

    department = get_user_attribute(user_info, 'department')
    cost_center = get_user_attribute(user_info, 'costCenter')

    # Extract resource ID
    if event_name == 'RunInstances':
        resource_id = event['detail']['responseElements']['instancesSet']['items'][0]['instanceId']

        # Apply tags
        ec2 = boto3.client('ec2')
        ec2.create_tags(
            Resources=[resource_id],
            Tags=[
                {'Key': 'Owner', 'Value': username},
                {'Key': 'Department', 'Value': department},
                {'Key': 'CostCenter', 'Value': cost_center},
                {'Key': 'CreatedBy', 'Value': 'AutoTagLambda'},
                {'Key': 'CreationDate', 'Value': event['detail']['eventTime']}
            ]
        )

    return {'statusCode': 200, 'body': 'Tags applied successfully'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This automation ensures consistent tagging even when developers bypass standard provisioning workflows.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bulk Tagging Operations
&lt;/h4&gt;

&lt;p&gt;For existing resources or large-scale tag updates, leverage AWS Tag Editor for bulk operations across regions and services. Tag Editor provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Global search and filtering by resource type, region, and existing tags&lt;/li&gt;
&lt;li&gt;
CSV export for offline editing and bulk updates&lt;/li&gt;
&lt;li&gt;
Multi-resource selection for simultaneous tagging&lt;/li&gt;
&lt;li&gt;
Integration with Resource Groups for logical grouping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations managing thousands of resources report 80% time savings using Tag Editor versus console-based individual resource tagging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Tagging Patterns for 2026
&lt;/h2&gt;

&lt;p&gt;Beyond foundational practices, organizations achieving operational excellence leverage advanced tagging patterns that unlock automation, security, and cost optimization capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Attribute-Based Access Control (ABAC)
&lt;/h3&gt;

&lt;p&gt;ABAC represents a paradigm shift from traditional role-based access control (RBAC), enabling authorization decisions based on resource and principal tags rather than explicit policy statements. This approach scales dramatically better in dynamic environments with frequent resource and personnel changes. See our &lt;a href="https://tagops.cloud/blog-implementing-abac-with-tagops.html" rel="noopener noreferrer"&gt;other blog which explores ABAC in AWS&lt;/a&gt; in more detail.&lt;/p&gt;

&lt;h4&gt;
  
  
  How ABAC Works in AWS
&lt;/h4&gt;

&lt;p&gt;ABAC policies use four primary condition keys to evaluate tag-based permissions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
aws:ResourceTag/: Evaluates tags on the resource being accessed&lt;/li&gt;
&lt;li&gt;
aws:PrincipalTag/: Evaluates tags on the IAM principal (user or role)&lt;/li&gt;
&lt;li&gt;
aws:RequestTag/: Evaluates tags in the request (for create/modify operations)&lt;/li&gt;
&lt;li&gt;
aws:TagKeys: Evaluates which tag keys are present in the request
Example ABAC Policy:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:RebootInstances",
        "ec2:DescribeInstances"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Project": "${aws:PrincipalTag/Project}",
          "ec2:ResourceTag/Environment": "${aws:PrincipalTag/Environment}"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "ec2:DeleteTags",
        "ec2:CreateTags"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": ["Project", "Environment", "CostCenter", "Owner"]
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This policy grants EC2 management permissions only when the principal's Project and Environment tags match the resource's tags, and prevents users from modifying the tags used for access control decisions.&lt;br&gt;
You can also create an SCP that blocks the ability to modify the tags used for access control decisions, with an exception of a principal that should be able to do it. It can look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyModificationOfCriticalTagsOnEC2Instances",
      "Effect": "Deny",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": "arn:aws:ec2:*:*:instance/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": [
            "CostCenter",
            "Owner",
            "Environment",
            "DataClassification",
            "Compliance"
          ]
        },
        "StringNotLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:role/TagGovernanceRole",
            "arn:aws:iam::*:role/OrganizationAccountAccessRole",
            "arn:aws:iam::123456789012:user/CloudAdmin"
          ]
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This SCP prevents modification of specific tags on EC2 instances, with an exception for designated principals.&lt;/p&gt;

&lt;h4&gt;
  
  
  ABAC Implementation Strategy
&lt;/h4&gt;

&lt;p&gt;Successful ABAC deployments follow this progression:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tag IAM Principals:&lt;/strong&gt; Apply consistent tags to users and roles (manually or via federation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag Resources:&lt;/strong&gt; Ensure all resources have the necessary ABAC tags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create ABAC Policies:&lt;/strong&gt; Write policies using tag condition keys instead of explicit resource ARNs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict Tagging Operations:&lt;/strong&gt; Prevent privilege escalation by limiting who can modify ABAC tags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Thoroughly:&lt;/strong&gt; Validate access patterns before removing legacy RBAC policies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Organizations using ABAC report 70% reduction in IAM policy updates and 90% faster onboarding of new team members, as permissions automatically apply based on tag matching rather than explicit policy modifications.&lt;/p&gt;

&lt;h4&gt;
  
  
  ABAC with S3
&lt;/h4&gt;

&lt;p&gt;The November 2025 enhancements to S3 ABAC provide particularly powerful capabilities. With ABAC enabled on S3 buckets and access points, you can implement fine-grained access control that automatically scales:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::*/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/DataClassification": "${aws:PrincipalTag/DataClearance}",
          "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
      }
    }
  ]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This policy allows users to access S3 objects only when their DataClearance tag matches the object's DataClassification tag, enabling dynamic access control without hardcoding bucket or object ARNs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tag-Based Resource Scheduling
&lt;/h3&gt;

&lt;p&gt;Tag-based scheduling has emerged as one of the highest-ROI tagging applications, enabling organizations to automatically start and stop non-production resources during off-hours. The cost savings are substantial: organizations report 60-70% reduction in development and testing environment costs by stopping resources outside business hours.&lt;/p&gt;

&lt;h4&gt;
  
  
  AWS Instance Scheduler Solution
&lt;/h4&gt;

&lt;p&gt;The AWS Instance Scheduler on AWS solution provides enterprise-grade scheduling with tag-based configuration. The architecture leverages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DynamoDB:&lt;/strong&gt; Stores schedule definitions and configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda:&lt;/strong&gt; Executes scheduling logic on a regular cadence (typically every 5-15 minutes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch Events:&lt;/strong&gt; Triggers Lambda function execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM Roles:&lt;/strong&gt; Enables cross-account scheduling in AWS Organizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tagging for Scheduling:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some examples of tags that can be used for scheduling:&lt;/p&gt;

&lt;p&gt;EC2 Instance&lt;br&gt;
Schedule: office-hours&lt;br&gt;
RDS Database&lt;br&gt;
Schedule: dev-environment-schedule&lt;br&gt;
Auto Scaling Group&lt;br&gt;
Schedule:weekend-off&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schedule Definitions (DynamoDB):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "office-hours",
  "description": "Running 8 AM to 8 PM weekdays in US Eastern time",
  "timezone": "US/Eastern",
  "periods": [
    {
      "name": "weekday-business-hours",
      "begintime": "8:00",
      "endtime": "20:00",
      "weekdays": ["mon-fri"]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scheduler Lambda function runs periodically, queries resources by tag, compares their state against the defined schedule, and starts or stops them accordingly.&lt;/p&gt;

&lt;p&gt;Organizations implementing tag-based scheduling report:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
60-70% cost reduction for dev/test environments&lt;/li&gt;
&lt;li&gt;
$15,000+ annual savings per small lab environment&lt;/li&gt;
&lt;li&gt;
Elimination of manual start/stop operations&lt;/li&gt;
&lt;li&gt;
Improved developer experience with self-service scheduling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tag-Driven Automation and Lifecycle Management
&lt;/h3&gt;

&lt;p&gt;Beyond scheduling, tags enable sophisticated automation across the resource lifecycle, from provisioning through decommissioning.&lt;/p&gt;

&lt;h4&gt;
  
  
  Backup Automation
&lt;/h4&gt;

&lt;p&gt;Define backup policies through tags that trigger AWS Backup or custom backup solutions:&lt;/p&gt;

&lt;p&gt;BackupPolicy: Daily-Retain-30&lt;br&gt;
BackupWindow: 02:00-04:00&lt;br&gt;
RecoveryPointObjective: 24-hours&lt;/p&gt;

&lt;p&gt;AWS Systems Manager Automation documents can monitor these tags and ensure appropriate backup configurations are applied.&lt;/p&gt;
&lt;h4&gt;
  
  
  Security Classifications
&lt;/h4&gt;

&lt;p&gt;Use tags to identify resources requiring enhanced security controls:&lt;/p&gt;

&lt;p&gt;DataClassification: Confidential&lt;br&gt;
ComplianceRequirement: PCI-DSS&lt;br&gt;
EncryptionRequired: AES-256&lt;/p&gt;

&lt;p&gt;AWS Config rules can automatically enforce encryption, access logging, and other security controls based on these tags, with remediation actions triggered for non-compliant resources.&lt;/p&gt;
&lt;h2&gt;
  
  
  Cost Allocation and FinOps Excellence
&lt;/h2&gt;

&lt;p&gt;Effective cost management represents the primary driver for tagging initiatives at most organizations. AWS cost allocation tags transform billing data from an undifferentiated mass into actionable intelligence.&lt;/p&gt;
&lt;h3&gt;
  
  
  Implementing Cost Allocation Tags
&lt;/h3&gt;

&lt;p&gt;AWS provides two types of cost allocation tags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
AWS-Generated Tags: Automatically applied by AWS services (e.g., aws:createdBy, aws:cloudformation:stack-name). These require activation but provide instant visibility into resource creators and deployment methods.&lt;/li&gt;
&lt;li&gt;
User-Defined Tags: Custom tags you create and apply to resources. These must be activated in the Billing and Cost Management console before appearing in cost reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Activation Process:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
Navigate to &lt;strong&gt;AWS Billing and Cost Management → Cost Allocation Tags&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
Select tags to activate from the list of applied tags&lt;/li&gt;
&lt;li&gt;
Wait 24-48 hours for tags to appear in cost reports&lt;/li&gt;
&lt;li&gt;
Tags only apply to costs incurred after activation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Essential Cost Allocation Tags:&lt;/strong&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%2Fert6z3v7epd0fk2jd085.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%2Fert6z3v7epd0fk2jd085.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Leveraging AWS Cost Explorer with Tags
&lt;/h3&gt;

&lt;p&gt;Once activated, cost allocation tags enable powerful cost analysis in AWS Cost Explorer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group By Tags:&lt;/strong&gt; View costs broken down by any tag dimension&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter by Tags:&lt;/strong&gt; Analyze spending for specific projects, teams, or environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-Series Analysis:&lt;/strong&gt; Track how tagged resource costs trend over time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forecasting:&lt;/strong&gt; Project future costs based on historical tag-based spending patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations using comprehensive tag-based cost allocation report:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
40-60% improvement in cost visibility&lt;/li&gt;
&lt;li&gt;
25-35% reduction in overall cloud spending through accountability&lt;/li&gt;
&lt;li&gt;
90% faster identification of cost optimization opportunities&lt;/li&gt;
&lt;li&gt;
50% reduction in time spent on monthly cost allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Compliance and Governance
&lt;/h2&gt;

&lt;p&gt;Tagging plays a critical role in demonstrating compliance with regulatory requirements and internal governance policies.&lt;/p&gt;
&lt;h3&gt;
  
  
  AWS Config for Tag Compliance
&lt;/h3&gt;

&lt;p&gt;AWS Config provides continuous compliance monitoring for tagging standards. The service evaluates resources against rules you define and identifies non-compliant resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required Tags Rule:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ConfigRuleName": "required-tags",
  "Description": "Checks whether resources are tagged with required tags",
  "Source": {
    "Owner": "AWS",
    "SourceIdentifier": "REQUIRED_TAGS"
  },
  "Scope": {
    "ComplianceResourceTypes": [
      "AWS::EC2::Instance",
      "AWS::EC2::Volume",
      "AWS::RDS::DBInstance",
      "AWS::S3::Bucket"
    ]
  },
  "InputParameters": {
    "tag1Key": "Environment",
    "tag2Key": "Owner",
    "tag3Key": "CostCenter",
    "tag4Key": "DataClassification"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Proactive Mode (2025 Enhancement):&lt;/strong&gt; AWS Config now supports proactive evaluation that prevents non-compliant resource creation rather than only identifying violations after the fact. Combined with the IaC validation capabilities, this provides defense in depth for tag compliance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;p&gt;Even with best-in-class tools, organizations encounter predictable challenges in tagging implementations. Learning from these common mistakes accelerates time to value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pitfall 1: No Initial Strategy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Teams begin tagging reactively without defining objectives, resulting in inconsistent, unhelpful tags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Conduct a tagging workshop with stakeholders from finance, engineering, security, and operations before deploying any tags. Document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Business objectives for tagging (cost allocation, automation, compliance)&lt;/li&gt;
&lt;li&gt;
Required vs. optional tags&lt;/li&gt;
&lt;li&gt;
Naming conventions and allowed values&lt;/li&gt;
&lt;li&gt;
Enforcement mechanisms and timelines&lt;/li&gt;
&lt;li&gt;
Ownership and governance model&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pitfall 2: Case Sensitivity Chaos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; AWS tags are case-sensitive, leading to variants like Environment, environment, and ENVIRONMENT being treated as distinct tags. This fragments cost reports and breaks automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  - Define case standard in your tagging policy (recommend PascalCase for keys, lowercase for values)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Implement validation in IaC templates that rejects non-standard casing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Use tag policies to enforce exact capitalization
&lt;/h2&gt;

&lt;p&gt;Run periodic audits to identify and remediate case variants&lt;/p&gt;

&lt;h3&gt;
  
  
  Pitfall 3: Manual Tagging at Scale
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Relying on developers to remember and correctly apply tags during resource creation fails due to human error and cognitive burden.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Embed tags in IaC templates with provider-level defaults&lt;/li&gt;
&lt;li&gt;
Implement event-driven auto-tagging for console-created resources&lt;/li&gt;
&lt;li&gt;
Enable IaC validation to prevent deployment of untagged resources&lt;/li&gt;
&lt;li&gt;
Use AWS Service Catalog to provide pre-tagged resource templates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pitfall 4: Tagging After Resource Creation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Adding tags post-deployment results in gaps in cost allocation and missed automation opportunities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Mandate tagging at creation time through tag policies&lt;/li&gt;
&lt;li&gt;
Configure Service Control Policies (SCPs) to prevent resource launch without required tags&lt;/li&gt;
&lt;li&gt;
Use CloudFormation Hooks for pre-deployment validation&lt;/li&gt;
&lt;li&gt;
Implement Lambda-based auto-tagging within minutes of resource creation for edge cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pitfall 5: Lack of Tag Governance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Without clear ownership and enforcement, tagging standards degrade over time as teams deviate from policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Designate a tag governance committee or owner for each critical tag&lt;/li&gt;
&lt;li&gt;
Establish regular tag compliance reviews (monthly or quarterly)&lt;/li&gt;
&lt;li&gt;
Publish tag compliance dashboards showing team-level adherence&lt;/li&gt;
&lt;li&gt;
Include tagging compliance in performance reviews for team leads&lt;/li&gt;
&lt;li&gt;
Automate enforcement through tag policies, Config rules, and IaC validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pitfall 6: Ignoring the Human Element
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Implementing technically perfect tagging enforcement without training and communication results in frustrated developers and workarounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Provide comprehensive documentation and examples&lt;/li&gt;
&lt;li&gt;
Conduct training sessions when introducing new tagging requirements&lt;/li&gt;
&lt;li&gt;
Create feedback channels for teams to report tagging challenges&lt;/li&gt;
&lt;li&gt;
Iterate on tagging policies based on practical experience&lt;/li&gt;
&lt;li&gt;
Celebrate and recognize teams with excellent tagging compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Measuring Tagging Success
&lt;/h2&gt;

&lt;p&gt;Implement KPIs to track the effectiveness of your tagging program:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance Metrics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tag Coverage Rate:&lt;/strong&gt; Percentage of resources with all required tags (target: 95%+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag Accuracy Rate:&lt;/strong&gt; Percentage of tags with valid, meaningful values (target: 98%+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to Compliance:&lt;/strong&gt; Days from resource creation to full tag compliance (target: &amp;lt;1 day)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Financial Impact:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost Attribution Coverage:&lt;/strong&gt; Percentage of total AWS spend with accurate cost allocation tags (target: 90%+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Untagged Resource Spend:&lt;/strong&gt; Dollar value of costs from untagged resources (target: &amp;lt;5% of total spend)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Optimization Savings:&lt;/strong&gt; Dollars saved through tag-based automation and rightsizing (measure quarterly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automation Coverage:&lt;/strong&gt; Percentage of resources managed through tag-based automation (scheduling, backup, lifecycle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MTTR Improvement:&lt;/strong&gt; Reduction in mean time to resolution for incidents due to improved resource identification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding Velocity:&lt;/strong&gt; Time required to grant appropriate access to new team members (with ABAC)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AWS tagging in 2026 has evolved far beyond simple resource organization. The introduction of wildcard tag policies, IaC validation, enhanced S3 tagging capabilities, and expanded ABAC support provides organizations with unprecedented control over cloud governance, cost management, and security enforcement.&lt;/p&gt;

&lt;p&gt;Organizations that invest in comprehensive tagging strategies achieve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
60-70% reduction in dev/test environment costs through tag-based scheduling&lt;/li&gt;
&lt;li&gt;
40-60% improvement in cost visibility and attribution&lt;/li&gt;
&lt;li&gt;
95%+ compliance rates through automated enforcement&lt;/li&gt;
&lt;li&gt;
70% reduction in IAM policy maintenance with ABAC&lt;/li&gt;
&lt;li&gt;
Elimination of manual remediation through proactive validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Success requires a holistic approach that combines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strategic Planning:&lt;/strong&gt; Clear objectives, stakeholder alignment, and documented standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Implementation:&lt;/strong&gt; IaC integration, automation, and enforcement mechanisms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance:&lt;/strong&gt; Tag policies, AWS Config rules, and regular compliance audits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural Adoption:&lt;/strong&gt; Training, documentation, and continuous improvement&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start your tagging journey by implementing the foundational practices outlined in this guide, then progressively adopt advanced patterns like ABAC and tag-based automation. The investment in proper tagging pays dividends across every aspect of cloud operations, from cost optimization to security enforcement to operational excellence.&lt;/p&gt;

&lt;p&gt;For organizations looking to accelerate their tagging maturity, solutions like TagOps provide purpose-built platforms for automated tag discovery, enforcement, and optimization across multi-account AWS environments. By leveraging the latest AWS capabilities combined with intelligent automation, modern tagging platforms ensure your cloud resources remain organized, cost-efficient, and secure without imposing manual burden on engineering teams.&lt;/p&gt;

&lt;p&gt;The future of cloud governance is proactive, automated, and tag-driven. Organizations that embrace these principles position themselves for sustainable cloud growth and operational excellence in 2026 and beyond.&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>secops</category>
      <category>finop</category>
    </item>
    <item>
      <title>Implementing ABAC with TagOps</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Thu, 15 Jan 2026 06:26:50 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/implementing-abac-with-tagops-29c3</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/implementing-abac-with-tagops-29c3</guid>
      <description>&lt;p&gt;Learn how to implement Attribute-Based Access Control (ABAC) using AWS Identity Center, SAML, and TagOps to achieve scalable and flexible access management across your AWS resources.&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%2Fol05eik0kj2ffetufkhn.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%2Fol05eik0kj2ffetufkhn.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I bet you heard about Attribute-Based Access Control, also known as ABAC or Tag-Based Access Control in AWS, and that’s no surprise.&lt;/p&gt;

&lt;p&gt;AWS themselves mention the flexibility it offers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“When you use tags to control access to your AWS resources, you allow your teams and resources to grow with fewer changes to AWS policies. ABAC policies are more flexible than traditional AWS policies, which require you to list each individual resource.”&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html#tutorial_abac_step2" rel="noopener noreferrer"&gt;AWS IAM Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or consider this from AWS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“ABAC is helpful in environments that are scaling and in situations where identity or resource policy management has become complex.”&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html" rel="noopener noreferrer"&gt;AWS IAM Documentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AWS has been actively promoting ABAC across their services.&lt;/p&gt;

&lt;p&gt;It’s been introduced for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/introducing-attribute-based-access-control-for-amazon-s3-general-purpose-buckets/" rel="noopener noreferrer"&gt;Amazon S3 general purpose buckets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/compute/introducing-attribute-based-access-controls-abac-for-amazon-sqs/" rel="noopener noreferrer"&gt;Amazon SQS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/control-access-to-amazon-elastic-container-service-resources-by-using-abac-policies/" rel="noopener noreferrer"&gt;Amazon ECS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/configure-aws-sso-abac-for-ec2-instances-and-systems-manager-session-manager/" rel="noopener noreferrer"&gt;EC2 instances and Systems Manager Session Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, there’s a &lt;a href="https://aws.amazon.com/blogs/security/tag/abac/" rel="noopener noreferrer"&gt;whole topic dedicated to ABAC&lt;/a&gt; in the AWS Security Blog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag-Based Access Control is definitely worth looking into!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today we’ll see how we can achieve the simplest use case of ABAC.&lt;/p&gt;

&lt;p&gt;But I want you to think of the implications of this &lt;br&gt;
&lt;strong&gt;implementation for your environment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe you can start deploying ABAC with TagOps!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;br&gt;
Before we begin, you’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Admin Access to your AWS Identity Center + SAML Connection to your Identity Provider (we’ll use Google Workspace in our example)&lt;/li&gt;
&lt;li&gt;Admin access to your Identity Provider (in our case, Google Workspace)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Understanding the AWS Documentation&lt;/strong&gt;&lt;br&gt;
We’ll be working with two key AWS documentation resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html#tutorial_abac_step2" rel="noopener noreferrer"&gt;AWS ABAC Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_abac-saml.html" rel="noopener noreferrer"&gt;AWS ABAC with SAML Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From these links, we see that AWS supports the ability to attach session-based tags from the Identity Provider, based on SAML attributes.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Configure SAML Attribute Mapping in Google Workspace&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For our use case today, we’ll explore the &lt;code&gt;https://aws.amazon.com/SAML/Attributes/PrincipalTag:Department&lt;/code&gt; attribute, which passes a tag key 'Department' with the value that was set in the request during SAML assertion.&lt;/p&gt;

&lt;p&gt;To configure this in Google Workspace:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to admin.google.com&lt;/li&gt;
&lt;li&gt;Go to Apps → Web &amp;amp; Mobile apps&lt;/li&gt;
&lt;li&gt;Click on “AWS Application”&lt;/li&gt;
&lt;li&gt;Go to SAML attribute mapping&lt;/li&gt;
&lt;li&gt;Click “Add Mapping”&lt;/li&gt;
&lt;li&gt;Map “Department” to &lt;code&gt;https://aws.amazon.com/SAML/Attributes/PrincipalTag:Department&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This should look like this:&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%2Flnklg3ex0hg0wg2ohqxw.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%2Flnklg3ex0hg0wg2ohqxw.png" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save!&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Configure AWS Identity Center Attributes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next, go to AWS Identity Center:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to AWS Console → Identity Center&lt;/li&gt;
&lt;li&gt;Go to Settings → Attributes for access control (if you don’t have it, check the blue popup — you might need to enable the feature)&lt;/li&gt;
&lt;li&gt;Click “Manage Attributes” → “Add Attribute”&lt;/li&gt;
&lt;li&gt;Set Key: Department&lt;/li&gt;
&lt;li&gt;Set Value: ${path:enterprise.department}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will map the attribute passed from the SAML assertion to your request parameters when making requests in AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think About the Possibilities&lt;/strong&gt;&lt;br&gt;
At this point, you might want to stop and think about what else you can do with this information. The possibilities are huge! You can pass so much information from your Identity Provider — user roles, departments, cost centers, project assignments, and more.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Configure the IAM Policy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now the only thing left is to configure our policy. Either create a new permission set or modify an existing one, and add this policy to the permission set.&lt;/p&gt;

&lt;p&gt;You can add it as an inline policy or managed policy. I suggest managed because then you can re-use them in different permission sets if needed.&lt;/p&gt;

&lt;p&gt;JSONCopy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyStopIfDepartmentNotMatchOrMissing",
      "Effect": "Deny",
      "Action": "ec2:StopInstances",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Department": "${aws:PrincipalTag/Department}"
        }
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this policy does:&lt;/strong&gt; It denies you the action of stopping an instance if your ‘Department’ tag doesn’t match the resource ‘Department’ tag.&lt;/p&gt;

&lt;p&gt;For example, if your resource Department tag is RnD and your Department tag is QA, you won't be able to perform the action (in our case StopInstances).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expand Your Policy&lt;/strong&gt;&lt;br&gt;
Once again, stop and think about what other actions you might want to include in this policy! The possibilities are huge — you could restrict StartInstances, TerminateInstances, ModifyInstanceAttribute, and many more actions based on department tags.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Test the Policy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let’s go and test the policy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provision the permission set to an AWS account (or if it’s an existing one, just log into one of the accounts)&lt;/li&gt;
&lt;li&gt;Once in the account, create an instance and give it a tag different than the one of your department&lt;/li&gt;
&lt;li&gt;Attempt to stop the instance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You will get a deny that looks like this:&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%2Frv4y51q29afgk70we4n8.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%2Frv4y51q29afgk70we4n8.png" alt=" " width="800" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s great, isn’t it? But you might be asking: “Yeah, that’s cool — but how do I scale it up? It sure is easy with 1 resource, but what if I have hundreds?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scaling ABAC with TagOps&lt;/strong&gt;&lt;br&gt;
That’s a great question, and the answer is simple — &lt;strong&gt;TagOps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TagOps can help you provision and manage those Department tags at scale. With TagOps, you can create a rule that automatically provisions your tags on all resources.&lt;/p&gt;

&lt;p&gt;On top of that, TagOps can automatically remediate tags that were modified outside of TagOps, and roll back to the original tag if needed. (As per the rule configuration in TagOps)&lt;/p&gt;

&lt;p&gt;So if someone changes the tag manually, TagOps will automatically roll back the tag to the original value.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If a resource name contains “prod”,&lt;/strong&gt; add tags Environment:Prod, Department:IT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If resource type is EC2 and region is us-east-1,&lt;/strong&gt; add tag Department:Operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If resource has tag “Project” equals “WebApp”,&lt;/strong&gt; add tag Department:Engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are plenty of different conditions you can use, not just resource name. You can filter by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource type&lt;/li&gt;
&lt;li&gt;Region&lt;/li&gt;
&lt;li&gt;AWS account&lt;/li&gt;
&lt;li&gt;Tag keys&lt;/li&gt;
&lt;li&gt;Tag key-values&lt;/li&gt;
&lt;li&gt;And more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you combine what you saw earlier with TagOps, you get an interesting solution that will definitely help you achieve ABAC if you wish to!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>secops</category>
      <category>finops</category>
    </item>
    <item>
      <title>What is TagOps?</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Thu, 15 Jan 2026 06:07:58 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/what-is-tagops-1n80</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/what-is-tagops-1n80</guid>
      <description>&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%2Fq9e6ue530ulyj54m0qc0.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%2Fq9e6ue530ulyj54m0qc0.png" alt=" " width="800" height="211"&gt;&lt;/a&gt;&lt;br&gt;
When was the last time you wrote an automation in AWS and said to yourself “I wish I had a way to differentiate the instances from one another easily”?&lt;/p&gt;

&lt;p&gt;Maybe you were configuring AWS Backup and it asked you for tags on which you would like to apply the Backup, and you thought “oh man, now I have to go and tag all my resources??”&lt;/p&gt;

&lt;p&gt;How about security? You felt like the existing ways of restricting/giving access are just not granular enough. You have a single AWS Account and want to give specific teams access to specific resources — this is a challenge!&lt;/p&gt;

&lt;p&gt;Or maybe you’re having a hard time identifying who created what? And you wish there was some more data on the resources like who created them and when.&lt;/p&gt;

&lt;p&gt;Yeah, all of these are valid challenges and you are not alone, we’ve been facing them too!&lt;/p&gt;

&lt;p&gt;AWS itself has been promoting tagging as a way to solve these challenges, and they have been actively promoting it across their services.&lt;/p&gt;

&lt;p&gt;Look at all of these blogs and features AWS has released around tagging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/tag/tags/" rel="noopener noreferrer"&gt;AWS Security Blog — Blog posts about implementing ABAC based on tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/mt/tag/tagging/" rel="noopener noreferrer"&gt;AWS Operations Blog — Blog posts about tagging strategies, cost, monitoring and more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/mt/implement-aws-resource-tagging-strategy-using-aws-tag-policies-and-service-control-policies-scps/" rel="noopener noreferrer"&gt;A whole blog post about how to implement tagging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/solutions/guidance/tagging-on-aws/" rel="noopener noreferrer"&gt;AWS Solution Guidance — Tagging on AWS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/10/database-insights-tag-based-access-control/" rel="noopener noreferrer"&gt;Adding support of ABAC for new services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and there are many more, but you get the point.&lt;/p&gt;

&lt;p&gt;However, we find that 1 of the core things that is missing is the ability to have a centralized way to manage tags across all your AWS Accounts.&lt;br&gt;
Some might say that there is a way via SCP + Tag Policies, but we find that it is not as flexible as we need it to be, and that itself doesn’t enforce the tags on the resources.&lt;br&gt;
Resources can still be created without the tags, and if you want to enforce the tags, you need to create a new SCP for each tag that you want to enforce, new actions that you need to research and restrict, etc.&lt;/p&gt;

&lt;p&gt;Tagging is so important that Amazon actually dedicated a whole whitepaper for creating your tagging strategy: &lt;a href="https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/building-your-tagging-strategy.html" rel="noopener noreferrer"&gt;AWS Tagging Strategy Whitepaper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the whitepaper:&lt;/p&gt;

&lt;p&gt;The tagging strategy cycle is a process that helps you create a tagging strategy for your AWS environment.&lt;br&gt;
It has 4 steps:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Define your tagging strategy
- Implement your tagging strategy
- Monitor your tagging strategy
- Optimize your tagging strategy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F3rn8ppbniykyh8gqaf1k.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%2F3rn8ppbniykyh8gqaf1k.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of you may say, but hey what if I’m using terraform + tag policies to manage my tagging strategy?&lt;br&gt;
Well, yes, terraform is sure much more flexible, and easy to implement tagging with, but is your environment really 100% terraform?&lt;br&gt;
From our experience, the answer is no.&lt;br&gt;
There are still many resources that are not managed by terraform, and that are not tagged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All of that is a headache&lt;/strong&gt;, and that is where TagOps comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TagOps Can Help&lt;/strong&gt;&lt;br&gt;
TagOps is a tool that can help you solve all of the mentioned challenges above!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is TagOps?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With TagOps, you can create rules that dynamically tag resources in your AWS Accounts.&lt;/p&gt;

&lt;p&gt;TagOps helps you implement your tagging strategy in every step of the tagging strategy cycle.&lt;br&gt;
&lt;strong&gt;Define your tagging strategy&lt;/strong&gt; — TagOps team collected some &lt;a href="https://tagops.cloud/documentation/use-cases/index.html" rel="noopener noreferrer"&gt;use cases&lt;/a&gt; which can help you define your tagging strategy&lt;br&gt;
&lt;strong&gt;Implement your tagging strategy&lt;/strong&gt; — With TagOps rules that dynamically tag resources based on the conditions you have configured&lt;br&gt;
&lt;strong&gt;Monitor your tagging strategy&lt;/strong&gt; — With TagOps inventory page, you can see all of your tagged resources and their tags&lt;br&gt;
&lt;strong&gt;Optimize your tagging strategy&lt;/strong&gt; — With TagOps rules that can be optimized based on the usage and compliance of the tags&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Use Cases&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Resource Creation Tracking:&lt;/strong&gt; Suppose you want to know who created the resource and when. You can create a rule in TagOps that does just that!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Backup Configuration:&lt;/strong&gt; You want to easily deploy relevant backup tags across your resources, and make sure future resources are automatically tagged. You can create a rule with TagOps that does just that.&lt;/p&gt;

&lt;p&gt;A*&lt;em&gt;BAC Implementation:&lt;/em&gt;* Same goes for Attribute-Based Access Control (ABAC). You can create a comprehensive set of rules that automatically apply tags based on conditions like Resource Name, Type, Region, Account ID, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Benefits of TagOps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Easily Manage Your Tagging Strategy&lt;/strong&gt;&lt;br&gt;
Manage your tagging strategy across all your AWS Accounts from a single, centralized platform. No more manual tagging or inconsistent tag management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gain More Visibility&lt;/strong&gt;&lt;br&gt;
Gain more visibility across your environment with extra metadata provided via tags. Understand resource ownership, purpose, and context at a glance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. No Room for Human Error&lt;/strong&gt;&lt;br&gt;
Since the tags are automatically applied, you can be sure that there won’t be mismatched tags (since tags are key-sensitive). Eliminate typos and inconsistencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Tag Immutability&lt;/strong&gt;&lt;br&gt;
TagOps automatically re-tags resources if they don’t comply with the rules created in TagOps. If someone changes an existing tag that was created by TagOps, it will be updated to the original value automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Real-Time Tagging&lt;/strong&gt;&lt;br&gt;
Real-time tagging for newly created/updated resources. TagOps sits at the core of AWS awaiting the creation of new resources and immediately tags them upon creation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Comprehensive Inventory&lt;/strong&gt;&lt;br&gt;
Comprehensive Inventory page that allows you to keep inventory of all your tagged AWS resources. Search, filter, and export your resource data with ease.&lt;/p&gt;

&lt;p&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>Why AWS tagging is mandatory?</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Thu, 15 Jan 2026 04:47:09 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/why-aws-tagging-is-mandatory-1k3m</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/why-aws-tagging-is-mandatory-1k3m</guid>
      <description>&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%2Fzsa9qfogp2qzd3vas4be.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%2Fzsa9qfogp2qzd3vas4be.png" alt=" " width="720" height="635"&gt;&lt;/a&gt;&lt;br&gt;
An untagged AWS environment is a form of technical debt that compounds with velocity. What begins as minor metadata neglect quickly snowballs into significant financial, security, and operational challenges. Costs become untraceable, security policies become unenforceable, and automation becomes unreliable. The seemingly simple act of assigning metadata to resources is, in reality, a critical discipline.&lt;/p&gt;

&lt;p&gt;Without a robust tagging strategy, achieving visibility and control at scale is impossible. As an environment grows, the need for a systematic way to organize and identify resources becomes acute. A well-defined tagging strategy is not just a “best practice” — it is a mandatory foundation for modern cloud operations that underpins cost management, security posture, and DevOps efficiency.&lt;/p&gt;

&lt;p&gt;As your AWS usage grows to many resource types spanning multiple applications, you will need a mechanism to track which resources are assigned to which application. Use this mechanism to support your operational activities, such as cost monitoring, incident management, patching, backup, and access control.&lt;/p&gt;

&lt;p&gt;This article will explore the consequences of ignoring tags, the strategic benefits of a disciplined approach, the native AWS tools available for governance, and how a centralized, automated solution can transform tagging from a burdensome task into a strategic advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. The Chaos of Untagged Resources: Why Ignoring Tags Leads to Failure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Poor tagging practices create immediate and compounding problems across an organization. Each untagged resource contributes to a growing blind spot, leading to unreliable reporting, security vulnerabilities, and operational friction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Financial Anarchy and Budget Overruns&lt;/strong&gt;&lt;br&gt;
Without consistent cost allocation tags like CostCenter or Project, it is impossible to perform accurate showback or chargeback. This lack of visibility means cost spikes become untraceable, making it impossible to identify which teams, applications, or business units are responsible for spending. This leads to a significant portion of spending that is unallocatable, making budgets indefensible during financial reviews.&lt;/p&gt;

&lt;p&gt;A common symptom is a large pool of “unallocatable spend,” forcing FinOps teams to implement reactive strategies like automatically tagging all untagged resources with CostCenter:Unallocated just to highlight the visibility gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Blind Spots and Compliance Risks&lt;/strong&gt;&lt;br&gt;
Without security-centric tags like DataClassification or ComplianceScope, enforcing security policies at scale becomes untenable. Without reliable tags like DataClassification:Confidential, you cannot scope security services like Amazon Inspector to run targeted vulnerability scans on resources handling sensitive data, or configure AWS Firewall Manager to automatically apply stricter WAF rules to applications within a specific ComplianceScope like PCI.&lt;/p&gt;

&lt;p&gt;Furthermore, attribute-based access control — for instance, controlling access to AWS KMS keys based on a resource’s data classification — becomes unworkable. Reliable metadata is essential for protecting sensitive data, but it is critical to never store Personally Identifiable Information (PII) or other sensitive data directly within tags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automation Failures and Operational Drag&lt;/strong&gt;&lt;br&gt;
DevOps automation relies heavily on tags to identify and target resources for routine tasks. Scripts for automated patching, backups, or instance scheduling use tags to filter their targets. When tags are missing or inconsistent, these automated workflows fail silently or miss critical resources. This forces teams to revert to manual, error-prone processes, creating operational drag and increasing the risk of misconfiguration and outages.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. The Strategic Benefits of a Disciplined Tagging Strategy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Implementing a robust, organization-wide tagging strategy moves a team from a reactive to a proactive operational posture. It unlocks powerful capabilities in cost management, security, and automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost Allocation and FinOps Mastery&lt;/strong&gt;&lt;br&gt;
Tags are the cornerstone of Cloud Financial Management (FinOps). User-defined tags such as CostCenter, BusinessUnitId, and Project must be activated in the Billing and Cost Management console from the organization's management account. It's critical to note that these tags are not retrospective; they will only appear in cost reports from the point of activation forward.&lt;/p&gt;

&lt;p&gt;Once activated, they become available as filters in AWS Cost Explorer and appear in detailed billing reports, enabling granular cost analysis and supporting accurate showback and chargeback models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Granular Security Through Attribute-Based Access Control (ABAC)&lt;/strong&gt;&lt;br&gt;
Attribute-Based Access Control (ABAC) is a powerful security model where IAM policies grant permissions based on matching tags. ABAC’s power lies in its dual-sided validation: permissions are granted only when tags on the principal (the IAM user or role making the request) match the tags on the resource they are trying to access.&lt;/p&gt;

&lt;p&gt;For example, an engineer with the principal tag Team:Alpha can be granted permission to manage only the EC2 instances that also have the resource tag Team:Alpha. This is achieved using IAM condition keys like aws:ResourceTag/key-name and aws:PrincipalTag/key-name, enabling highly scalable and granular permission management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalable Automation for DevOps&lt;/strong&gt;&lt;br&gt;
Tags serve as a dynamic filter, allowing automation scripts to target specific subsets of resources without hardcoding resource IDs. This is fundamental to managing a dynamic cloud environment. Specific examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tagging EC2 and RDS instances with Schedule:mon-fri-9-5 to enable automated start/stop scripts that reduce costs in non-production environments.&lt;/li&gt;
&lt;li&gt;Tagging EC2 instances with PatchGroup:ProdLinux to direct AWS Systems Manager Patch Manager to apply the correct patch baselines during maintenance windows.&lt;/li&gt;
&lt;li&gt;Tagging critical resources with Backup:Required to ensure they are automatically included in AWS Backup plans, preventing data loss due to configuration oversight.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Visibility and Organization&lt;/strong&gt;&lt;br&gt;
Tags can be used to create AWS Resource Groups, which allow teams to create a consolidated view of an application or environment. This is especially useful for modern workloads that span multiple services and AWS Regions. Instead of navigating between different service consoles, a resource group provides a single place to view and manage all the components of a specific workload, simplifying management and improving operational visibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. The Native AWS Toolkit for Tag Governance: Powerful but Complex&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AWS provides a suite of native tools for enforcing tagging standards. While powerful, they are operationally complex to manage at scale, requiring a deep understanding of multiple services and their interactions. These tools can be categorized into proactive (preventing non-compliance) and reactive (detecting non-compliance) mechanisms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proactive Governance: Enforcing Standards at Creation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Organizations Tag Policies:&lt;/strong&gt; Tag Policies are used to standardize tag usage across an entire AWS Organization. They allow you to define rules for tag keys, including required case treatment and the specific values that are allowed (e.g., the Environment tag must be dev, test, or prod). Think of Tag Policies as a detective control for tag standardization; they tell you when a tag is non-compliant but won't stop the resource from being created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Control Policies (SCPs):&lt;/strong&gt; For stricter enforcement, SCPs can be used to deny actions if certain conditions are not met. An SCP can be configured to block a resource creation action, such as ec2:RunInstances, if the request does not include a required tag like CostCenter. However, this forceful approach can conflict with Infrastructure-as-Code services like AWS CloudFormation, which often create a resource and apply tags in two separate API calls. This can cause deployments to fail, as the initial creation step is blocked by the SCP before the tags can be applied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reactive Governance: Finding and Fixing Non-Compliance&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Config Rules:&lt;/strong&gt; AWS Config provides a managed rule called required-tags that is used to detect existing resources that are missing specified tags. This is a powerful tool for auditing compliance within an account and can be configured with automated remediation actions to tag non-compliant resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag Editor &amp;amp; Resource Groups Tagging API:&lt;/strong&gt; The Tag Editor in the AWS Management Console and the underlying Resource Groups Tagging API are the primary tools for finding resources based on their tags and correcting non-compliant tags on existing resources. This can be done manually for individual resources or programmatically to perform bulk corrections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Operational Challenge&lt;/strong&gt;&lt;br&gt;
Relying solely on this native toolkit creates a fragmented and brittle governance framework. Teams must stitch together policies across AWS Organizations, IAM, and AWS Config, often filling the gaps with custom Lambda functions. This patchwork system is difficult to maintain, hard to audit, and creates a significant operational drag that scales poorly as the organization grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. A Simplified Approach: Centralized and Automated Tagging with TagOps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To overcome the operational complexity of native AWS tools, a centralized and automated solution like TagOps provides a more streamlined and reliable approach to tag governance. It addresses the core challenges by unifying proactive and reactive tagging into a single, rule-based engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How TagOps Works: A Two-Pronged Approach&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Event-Based Tagging:&lt;/strong&gt; TagOps integrates with AWS CloudTrail to monitor for resource creation events. When a new resource is launched, TagOps evaluates it against defined rules and applies the required tags in near real-time, typically within a few minutes of creation. This ensures that new resources are compliant from the very start. TagOps also watches for changes to existing resources’ tagging, and if it detects a change, it will automatically tag the resource with the correct tags again, ensuring that the resource is always compliant with the tagging strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduled Scanning:&lt;/strong&gt; To handle existing resources and prevent configuration drift, TagOps performs periodic scans of all resources across all connected accounts and regions. These scans discover untagged resources or correct non-compliant ones, ensuring complete and continuous coverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features for DevOps and SecOps&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Tag Remediation and Persistence:&lt;/strong&gt; This directly solves the problem of tag drift, a critical gap in native tooling where tags can be removed manually, silently breaking cost reports and security policies. If a tag applied by a TagOps rule is removed or modified, TagOps automatically detects the change thanks to the event-based tagging and restores the correct tag, guaranteeing tagging consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag Templates:&lt;/strong&gt; This addresses the operational complexity of managing tag definitions across numerous scripts and policies. TagOps allows you to define reusable templates containing sets of constant and dynamic tags. A single rule can apply an entire template to thousands of resources, and any update to the template — a single source of truth — is automatically propagated everywhere it is used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Tags:&lt;/strong&gt; TagOps can automatically capture invaluable contextual metadata that is otherwise difficult to enforce. For instance, by extracting the IAM principal from the CloudTrail event, it can apply a createdBy tag, providing immediate, unambiguous ownership information for every resource. This eliminates manual guesswork and provides a bulletproof audit trail for security and cost investigations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Conclusion: From Tagging as a Task to Tagging as a Strategy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In a modern AWS environment, effective tagging is non-negotiable. It is the fundamental prerequisite for achieving the visibility, governance, and control required for secure, cost-effective, and efficient cloud operations. Without a disciplined approach, organizations are left flying blind, unable to accurately allocate costs, enforce security policies, or automate at scale.&lt;/p&gt;

&lt;p&gt;While native AWS tools provide the essential building blocks for tag governance, their complexity presents a significant operational burden. By centralizing rule management and automating enforcement, organizations can finally evolve from a reactive “tagging-as-a-task” mindset to a proactive “metadata-as-a-strategy” capability. This shift treats tagging not as a chore, but as the strategic enabler it is meant to be, unlocking the full potential of the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>finops</category>
      <category>secops</category>
    </item>
    <item>
      <title>Automate EC2 and RDS Instance Scheduling Based on Tags</title>
      <dc:creator>Mark Rayhshtat</dc:creator>
      <pubDate>Wed, 14 Jan 2026 20:51:28 +0000</pubDate>
      <link>https://dev.to/mark_rayhshtat_b33ccde07a/automate-ec2-and-rds-instance-scheduling-based-on-tags-2opi</link>
      <guid>https://dev.to/mark_rayhshtat_b33ccde07a/automate-ec2-and-rds-instance-scheduling-based-on-tags-2opi</guid>
      <description>&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%2Fem4j1xbpm4g8ge1dj6j4.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%2Fem4j1xbpm4g8ge1dj6j4.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running EC2 instances and RDS databases 24/7 when they’re only needed during business hours is one of the most common sources of unnecessary AWS costs. Development and testing environments, in particular, can consume significant resources while sitting idle nights and weekends.&lt;/p&gt;

&lt;p&gt;By implementing tag-based scheduling, you can automatically start and stop instances based on predefined schedules, reducing costs by up to ~70% for non-production workloads while maintaining full operational control.&lt;/p&gt;

&lt;p&gt;In this comprehensive guide, we’ll explore how to automate EC2 and RDS instance scheduling using tags with TagOps, AWS Systems Manager Maintenance Windows to create a robust, cost-effective scheduling solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Cost Impact of Unmanaged Instance Scheduling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before diving into the solution, let’s understand the problem. Consider a typical development environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Development EC2 Instances&lt;/strong&gt;: 10 instances (for example m6i.large) running 24/7 at $0.10/hour = $720/month per instance = $7,200/month total&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With Business Hours Scheduling&lt;/strong&gt;: Running only 50 hours/week (Mon-Fri, 8 AM-6 PM) = $2,000/month total&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Potential Savings&lt;/strong&gt;: $5,200/month (72% reduction) for development environments alone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For RDS databases, the savings can be even more significant, especially for Multi-AZ deployments. A single db.t3.medium RDS instance running 24/7 costs approximately $52/month, but with proper scheduling, you can reduce this to $15/month for business-hours-only usage — a 72% cost reduction.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why Tag-Based Scheduling?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tag-based scheduling provides several critical advantages over manual or hardcoded scheduling approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Automatically include new resources in scheduling without updating automation scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Different schedules for different environments (e.g., dev stops at 6 PM, staging runs 24/7)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability&lt;/strong&gt;: Centralized scheduling logic based on metadata rather than resource IDs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Ensure all resources matching criteria are scheduled, preventing manual configuration errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational Excellence&lt;/strong&gt;: Resources are automatically tagged when created, immediately included in scheduling workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Understanding the Scheduling Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A tag-based scheduling solution consists of three key components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tagging Automation (TagOps)&lt;/strong&gt;: Automatically applies scheduling tags to EC2 instances and RDS databases when they’re created or discovered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduling Engine&lt;/strong&gt;: AWS Systems Manager Maintenance Windows that read tags and execute start/stop actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation Documents&lt;/strong&gt;: Pre-built SSM documents like AWS-StartEC2Instance, AWS-StopEC2Instance, AWS-StopRdsInstance and AWS-StartRdsInstance that perform the actual start/stop operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Onboard Your AWS Accounts to TagOps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before configuring scheduling tags, ensure your AWS accounts are connected to TagOps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to console.tagops.cloud and log in to your account&lt;/li&gt;
&lt;li&gt;Go to the AWS Accounts page and click “Add AWS Account”&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide the required information:&lt;/p&gt;

&lt;p&gt;a. AWS Account Name: A descriptive name for your AWS account (e.g., “Production”, “Development”)&lt;br&gt;
b.AWS Account ID: Your 12-digit AWS account number&lt;br&gt;
c. IAM Role Name: The name of the IAM role TagOps will use to access your account&lt;br&gt;
d. External ID: A unique identifier for secure cross-account access&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create the CloudFormation stack in your AWS account to provision the necessary IAM role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click “Verify Account” to confirm successful onboarding&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Configure TagOps Rules for EC2/RDS Instance Scheduling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Create a TagOps rule to automatically tag EC2/RDS instances for scheduling in the environment you want to schedule. This ensures that any new instance matching your criteria is immediately included in your scheduling automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduling Rule Configuration&lt;/strong&gt;&lt;br&gt;
Navigate to the Rules page in TagOps and create a new rule with the following configuration:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Condition Operation: AND&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account ID Condition:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Type: Account ID
- Operator: Equal
- Value: (your AWS account ID)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Resource Type Condition:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Type: Resource Type
- Operator: Is In
- Value: ec2:instance, rds:db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fx8azh42nf202qcj47rbw.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%2Fx8azh42nf202qcj47rbw.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule Actions:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Add Tag: StopStartAutomation = enabled (for Systems Manager targeting)
- Add Tag: Environment = Development (or Staging, Test as needed)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fk5d1phucr31x4scy1m59.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%2Fk5d1phucr31x4scy1m59.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Create an IAM Role with Automation Permissions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before setting up maintenance windows, you need to create an IAM role that Systems Manager can assume to execute the automation documents for starting and stopping EC2 instances and RDS databases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the IAM Role via AWS Console&lt;/strong&gt;&lt;br&gt;
Follow these steps to create the IAM role through the AWS Management Console:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the IAM service in the AWS Management Console
2 .Click on “Roles” in the left navigation menu&lt;/li&gt;
&lt;li&gt;Click “Create role”&lt;/li&gt;
&lt;li&gt;Under “Select trusted entity”, choose “AWS service”&lt;/li&gt;
&lt;li&gt;Select “Systems Manager” from the service list&lt;/li&gt;
&lt;li&gt;Choose “Systems Manager” as the use case (for maintenance windows and automation)&lt;/li&gt;
&lt;li&gt;Click “Next”&lt;/li&gt;
&lt;li&gt;In the permissions policy search, find and select “AmazonSSMAutomationRole” policy&lt;/li&gt;
&lt;li&gt;Click “Next”&lt;/li&gt;
&lt;li&gt;Enter a role name (e.g., role-ssm-automation)&lt;/li&gt;
&lt;li&gt;Add a description: Role for Systems Manager to start/stop EC2 instances and RDS databases&lt;/li&gt;
&lt;li&gt;Click “Create role”&lt;/li&gt;
&lt;/ol&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%2Falr4c5ngx1kpcrr966ce.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%2Falr4c5ngx1kpcrr966ce.png" alt=" " width="470" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify the Role&lt;/strong&gt;&lt;br&gt;
After creating the role, note the role ARN. You’ll need it when registering tasks with maintenance windows. The ARN format will be: arn:aws:iam::ACCOUNT_ID:role/role-ssm-automation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Ensure the role has the necessary trust relationship to allow Systems Manager to assume it. The trust policy should include ssm.amazonaws.com as a trusted service.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Create a StopAutomation SSM Maintenance Window&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next, you will create an SSM Maintenance Window that automatically stops your instances based on the StopStartAutomation = enabled tag you configured in TagOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the Maintenance Window (StopInstances)&lt;/strong&gt;&lt;br&gt;
In the AWS Management Console:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to AWS Systems Manager → Maintenance Windows&lt;/li&gt;
&lt;li&gt;Click “Create maintenance window”&lt;/li&gt;
&lt;li&gt;Add a name, for example StopInstances, and a meaningful description such as Stop EC2 and RDS instances based on tags&lt;/li&gt;
&lt;li&gt;Under Targets, select “Allow unregistered targets” so you can target instances by tags&lt;/li&gt;
&lt;li&gt;In the Schedule section, choose Cron/Rate expression and enter a cron expression that fits your stop time.
To stop instances at 20:30 (8:30 PM) from Sunday to Friday, use:
cron(30 20 ? * SUN-FRI *)&lt;/li&gt;
&lt;li&gt;Set the Duration (for example, 2 hours) and Cutoff (for example, 1 hour) according to your needs&lt;/li&gt;
&lt;li&gt;Review the configuration and click “Create maintenance window”&lt;/li&gt;
&lt;/ol&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%2Fo6rhpoumlwi1b521g6e4.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%2Fo6rhpoumlwi1b521g6e4.png" alt=" " width="646" height="764"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Register Targets Using Tags&lt;/strong&gt;&lt;br&gt;
After the maintenance window is created:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the newly created maintenance window (e.g., StopInstances)&lt;/li&gt;
&lt;li&gt;Go to the Targets tab and click “Register target”&lt;/li&gt;
&lt;li&gt;Under Target selection, choose “Specify instance tags”&lt;/li&gt;
&lt;li&gt;Provide the tag key and value you configured in TagOps, for example: StopStartAutomation = enabled&lt;/li&gt;
&lt;li&gt;Save the target configuration&lt;/li&gt;
&lt;/ol&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%2Ft729ztr4ctdhd5c1417s.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%2Ft729ztr4ctdhd5c1417s.png" alt=" " width="442" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Register the Stop Task&lt;/strong&gt;&lt;br&gt;
Follow these steps to register the AWS-StopEC2Instance automation document:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the maintenance window you just created, go to the “Tasks” tab&lt;/li&gt;
&lt;li&gt;Click “Register tasks” (note: the button may say “Register task” or “Register tasks”)&lt;/li&gt;
&lt;li&gt;Under “Task type”, select “Automation”&lt;/li&gt;
&lt;li&gt;In the “Automation document” section:

&lt;ul&gt;
&lt;li&gt;Search for and select “AWS-StopEC2Instance” (owned by Amazon)&lt;/li&gt;
&lt;li&gt;Ensure the document version is set to “Default version at runtime”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Under “Target selection”, choose “Selecting registered target groups”&lt;/li&gt;
&lt;li&gt;Select the target group you created in the previous step (the one targeting instances with StopStartAutomation = enabled)&lt;/li&gt;
&lt;li&gt;Under “Input parameters”, configure the following:

&lt;ul&gt;
&lt;li&gt;InstanceId: Enter {{RESOURCE_ID}} (this is a placeholder that will be replaced with each target instance ID)&lt;/li&gt;
&lt;li&gt;AutomationAssumeRole: Enter the ARN of the IAM role you created in Step 3 (e.g., arn:aws:iam::ACCOUNT_ID:role/role-ssm-automation)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set “Task priority” to 1 (or your preferred priority)&lt;/li&gt;
&lt;li&gt;Configure “Concurrency” (e.g., 10 to stop up to 10 instances simultaneously)&lt;/li&gt;
&lt;li&gt;Configure “Errors threshold” (e.g., 1 to stop the task if more than 1 instance fails)&lt;/li&gt;
&lt;li&gt;Review the configuration and click “Register task”&lt;/li&gt;
&lt;/ol&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%2Fca3ju7usz7s2v0edtynt.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%2Fca3ju7usz7s2v0edtynt.png" alt=" " width="604" height="482"&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%2Fz0lngpnkgs6hroyc1c1p.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%2Fz0lngpnkgs6hroyc1c1p.png" alt=" " width="602" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop RDS Instances&lt;/strong&gt;&lt;br&gt;
For RDS Instance Stop Automation, create an additional maintenance window task, follow the same process but use different automation documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AWS-StopRdsInstance for stopping RDS instances&lt;/li&gt;
&lt;li&gt;Note: RDS instances take longer to start/stop than EC2 instances — plan your schedules accordingly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create a StartAutomation Maintenance Window&lt;/strong&gt;&lt;br&gt;
To automatically start instances in the morning, create a separate maintenance window:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new maintenance window named StartInstances with a schedule like cron(0 9 ? * MON-FRI *) (9:00 AM weekdays)&lt;/li&gt;
&lt;li&gt;Register the same target group (instances with StopStartAutomation = enabled)
Register a task using the AWS-StartEC2Instance and AWS-StartRdsInstance automation documents&lt;/li&gt;
&lt;li&gt;Use the same input parameters: InstanceId = {{RESOURCE_ID}} and the same AutomationAssumeRole&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Automating EC2 and RDS instance scheduling based on tags provides a scalable, maintainable solution for cost optimization. By combining TagOps for automatic tagging with AWS Systems Manager Maintenance Windows for execution, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce EC2 and RDS costs by 55–75% for non-production environments&lt;/li&gt;
&lt;li&gt;Eliminate manual scheduling configuration and maintenance&lt;/li&gt;
&lt;li&gt;Ensure consistent scheduling coverage across all eligible resources&lt;/li&gt;
&lt;li&gt;Maintain operational flexibility with tag-based resource selection
The key to success is starting with a clear tagging strategy, implementing TagOps rules for automatic tag application, and configuring maintenance windows that align with your business needs. With proper implementation, tag-based scheduling becomes a set-and-forget solution that continuously optimizes your AWS costs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Try TagOps free for 14 days (no credit card): &lt;a href="https://tagops.cloud" rel="noopener noreferrer"&gt;https://tagops.cloud&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

</description>
      <category>aws</category>
      <category>finops</category>
      <category>devops</category>
      <category>cloudcomputing</category>
    </item>
  </channel>
</rss>
