AWS Cost Allocation Tags - Your first step in cost saving

by Yuval Oren, Co-Founder / CEO


If you’re looking to cut AWS Costs and don’t know where to start, this post will show you the first step you should take.

While it won’t immediately affect your bottom line, I promise, it will pay dividends later.

This is why we start all of our AWS cost cutting projects by working on a tagging strategy.

The problem with the AWS Cost Explorer

Looking at the Cost Explorer report can be, well, confusing.

You may see categories like “EC2 - Other” or “EU-Requests-Tier2” which don’t tell you much.

And worse, even when you do understand which service is causing that spike in cost, you can’t see which actual resource is responsible.

Here’s a simple example - The cost explorer shows you that EC2 Compute has a spike in cost this month. And you have hundreds of instances running at each given moment. Well, which project, or bunch of instances, is causing this spike?

And this is where cost allocation tags come in. When you have these tags in place, it adds a whole new dimension to the reports.

Tags in AWS

There are two types of tags in AWS:

  • User Defined Tags
  • AWS Generated Tags

Both tags are essentially key-value metadata associated with a resource.

User Defined Tags

These are the tags you add to a resource either on creation or later using the console, cli, or API.

An instance name, for example, is a tag.

EC2 Instance Tags

You can add tags to every type of AWS resource, and that includes Snapshots, IAM Policies, S3 Buckets… Everything.

And you should tag everything (and I will repeat it until it gets old).

AWS Generated Tags

These are tags that AWS will automatically attach to resources you create.

For example, it will add a tag called createdBy that will include the ARN of the user who created it.

Different services will have specific AWS Generated tags.

Here are a few examples:

  • aws:ecs:clusterName
  • aws:cloudformation:stack-id
  • aws:cloudformation:stack-name
  • aws:eks:cluster-name
  • aws:autoscaling:groupName

These tags are somewhat hidden and will mostly be relevant in CloudTrail and the Cost Explorer later.

AWS Cost Allocation Tags

So you may already have tags associated with your resources, but why can’t you see them in the Cost Explorer reports?

That’s because, by default, tags are not set as Cost Allocation Tags.

These are tags that are processed by the billing activities and later displayed there.

You actually have to go and explicitly set tags (both user defined and aws generated) as Cost Allocation tags.

And only after you do that, and from that point on, will this data start showing in the reports (well, there’s a way to fill in the last few months, but more on that later).

Activating Cost Allocation Tags

To designate a tag as a Cost Allocation Tag, you will have to go to the AWS Console → Billing → Cost Allocation Tags.

You will then see two tabs - one for User Defined Tags, and one for AWS Generated Tags.

Then, you can select the tags and click “Activate”. It will take a few hours or even a day, but from that moment on, these tags will start showing in the reports.

Well, that can be a bit annoying, isn’t it? Just because you set them as Cost Allocation tags, you can’t see past data?

That’s what the Backfill feature is for.

Want More Actionable AWS Cost Cutting Tips?

Download our free AWS Cost Optimization checklist to get started.

How to use the Cost Allocation Tags

Let’s assume that you created a few tags and the data started populating the reports.

You can now use it either as a Dimension or a Filter (or both) in the cost explorer reports.

For example, if you want to see the cost by the AWS Generated Tag createdBy, you can set it as the dimension:

AWS Cost Explorer with Cost Allocation Tag as Dimension

And you can then use filters to see different service usage.

The same also goes for using filters. For example, using the Service or Usage Type dimensions and then filtering by the tag.

Backfill

AWS added this feature a while ago to help you salvage some of that data, so you don’t have to start from square one.

You can initiate a backfill for data up to 12 months ago. Which, for most cost-saving purposes, is fine.

Note that it could take days or even a week to finish, so be patient.

Backfill AWS Cost Allocation Tags

A few best practices

Where should you start? Here are a few ideas and things we try to incorporate in our cost-cutting projects.

1. Tag Everything

Really. Just do it. And don’t overlook things like EBS volumes, Snapshots, etc. Especially on resources that tend to remain when deleting other resources.

If you are using IaC, then make sure to look at tags as part of your code reviews.

Oh, and I should be more clear - not every tag should be set as Cost Allocation Tags. But every resource should have Cost Allocation Tags.

2. Basic tags you should add

Here are a few tags we like to add for each project:

  1. Environment - dev/staging/production - use this tag to indicate which environment this resource belongs to.
  2. Owner - We use email addresses as values for this one. The owner tag allows you to see which engineers are spending too much money and may not be cost aware. By using email, you can later set up a few automations that can be helpful.
  3. Project - This is handy to track different initiatives.
  4. Customer - If you are running a multi-tenant environment and have dedicated resources for different customers, this is essential. It allows you to know how much a customer costs you, which is crucial for setting prices and negotiation.

There are many more tags that you can add depending on your setup, but if you want to hit the ground running, these will do.

Whatever you do, try to keep it consistent.

3. Review your tags

After a while, there will be some drift with your tagging strategy. You may add new tags that may be relevant, but forget to set them as Cost Allocation Tags.

So, take the time - set a scheduled reminder in your calendar to go over the Cost Allocation Tags and see if you need to make any modifications.

4. Automate

To ensure that tagging doesn’t fall through the cracks, add automation around it.

You can create an auto-tagging lambda with a combination of AWS services to catch resources without the proper tags.

Or maybe write a Cursor (or any other LLM-enabled tool you are using) that includes your Cost Allocation tags and instructions to verify that each element has tags.

Terraform Cloud and Enterprise can help you enforce tagging as well.

These guardrails are important, especially if your team is not cost-aware and would rather focus on other things.

More articles

AWS RDS Proxy - It's not set and forget

_In this post, I will show you how to use CloudFront or AWS WAF to enable geo-blocking (blocking based on geographical location) for your website or APIs._

Read more

AWS Geo Blocking with CloudFront and WAF

_In this post, I will show you how to use CloudFront or AWS WAF to enable geo-blocking (blocking based on geographical location) for your website or APIs._

Read more

Tell us about your project

Our offices

  • Israel
    5 Hatidhar St
    Ra'anana, Israel