Cloud Tag Coverage Analyzer
Audit cloud inventory tags, find resources missing required keys or allowed values, and export coverage, gap ledgers, charts, and cleanup queues.| Measure | Value | Evidence | Copy |
|---|---|---|---|
| {{ row.measure }} | {{ row.value }} | {{ row.evidence }} |
| Resource | Type | Provider | Region | Covered | Missing or invalid tags | Status | Copy |
|---|---|---|---|---|---|---|---|
| {{ row.resourceId }} | {{ row.type }} | {{ row.provider }} | {{ row.region }} | {{ row.coveredDisplay }} | {{ row.gapDisplay }} | {{ row.status }} | |
|
No resource gap rows available
Paste valid resource rows or remove ignored resource type filters to rebuild the ledger.
|
|||||||
| Required tag | Coverage | Missing key | Invalid value | Affected resources | Next action | Copy |
|---|---|---|---|---|---|---|
| {{ row.tagKey }} | {{ row.coverageDisplay }} | {{ row.missingCount }} | {{ row.invalidCount }} | {{ row.examplesDisplay }} | {{ row.action }} | |
|
No remediation rows available
Add at least one required tag key to build the tag remediation queue.
|
||||||
Cloud resources are easier to run when their metadata answers the same questions everywhere: who owns this, what environment is it in, which cost center pays for it, and how sensitive is the data? Tags and labels turn those answers into searchable key-value metadata. The key names the question, such as Owner, Environment, or CostCenter. The value gives the answer that reporting, automation, and people can act on.
Coverage matters because cloud inventories rarely grow through one clean path. A resource may come from infrastructure code, a console test, a marketplace product, a migration script, or a managed service that creates child resources. If the metadata is incomplete, cost reports become harder to reconcile, incident responders lose the trail to the owning team, and cleanup campaigns may delete the wrong thing or miss the expensive orphan.
The useful audit question is more specific than "does this resource have tags?" A production database with Owner= still lacks an owner. A bucket tagged Env=prod may fail a policy that expects Environment=prod. A resource with DataClass=restricted may be valid in one organization and invalid in another if the approved vocabulary only allows public, internal, and confidential.
| Term | Practical meaning | Common mistake |
|---|---|---|
| Scope | The account, subscription, project, resource group, management group, or export slice being judged. | Combining unrelated environments and making the percentage hard to assign. |
| Tag dictionary | The approved list of required keys and allowed values. | Letting old spellings, aliases, or one-off values count as clean evidence. |
| Coverage target | The minimum percentage of complete resources expected for the audit to pass. | Choosing a high target while quietly excluding resource types that should still be reviewed. |
A strong tag audit starts by locking both scope and dictionary before calculating a percentage. Without those decisions, a high number can hide exclusions, and a low number can mix true gaps with resources that were never supposed to carry user-managed tags.
Provider details can change the audit result. AWS tag keys and values are case-sensitive in most tagging contexts. Azure tag names are case-insensitive for operations, while tag values remain case-sensitive. Google Cloud labels have their own naming rules and are separate from Google Cloud tags used for policy conditions. Across providers, some resources have lower limits or do not support user metadata at all.
A coverage percentage is a point-in-time evidence check, not a guarantee that billing exports, policy engines, provider portals, and ownership records already agree. It is most reliable when the inventory is current, exclusions are narrow and documented, and the approved tag dictionary comes from the same governance process that teams use to create or update resources.
How to Use This Tool:
Use one inventory slice at a time so the result can be handed to a specific owner. The analyzer calculates from the rows you paste or load, then updates the coverage summary, ledger, remediation queue, chart, and JSON report from the same inputs.
- Enter a clear
Cloud scopelabel, such as an account, subscription, project, resource group, management group, or export segment. - List required keys in
Required tags. Separate keys with commas or new lines. Add controlled values withKey=value1|value2, for exampleEnvironment=prod|stage|dev. - Paste a cloud inventory into
Resource inventory CSV, browse for a.csv,.txt, or.tsvfile, or drop the file on the text area. Files over 1 MiB are rejected for browser-side analysis. - Prefer rows with headers for
resource_id,type,provider,region, andtags. The tags cell can contain pairs such asOwner=team;Environment=prod, pipe-separated pairs, or a small JSON object. - Use
Normalizeafter parsing when you want the current rows rewritten into the standard inventory shape before copying, downloading, or comparing another run. - Set
Coverage target,Key matching, andValue rule. Strict keys are better for policy evidence. Case-insensitive keys are useful during discovery when exports mix casing. - Open
Advancedonly when you need to exclude resource types that should not be counted or highlight high-value keys in the remediation queue withPriority tags. - Verify the result before sharing it.
Coverage Snapshotshould show the intended scope, target, required tag count, resource count, and any parser warnings; unresolved warnings mean the ledger may not represent the export correctly.
Read Coverage Snapshot first, then move to Resource Gap Ledger for row-level evidence and Tag Remediation Queue for cleanup grouped by required key. Use Required Tag Coverage when you need a quick visual of valid, missing, and invalid slots by tag. The snapshot, ledger, remediation queue, chart, and JSON view all support copy or download paths for handoff evidence.
Interpreting Results:
Resource coverage is the main gate. A resource is complete only when every required tag rule passes for that row. If one required key is missing or has an invalid value, the whole resource is counted as incomplete even when the other required tags are valid.
Tag debt measures cleanup workload. It counts missing required keys plus blank or invalid required values across checked resources. One resource can add several debt slots, so a small number of affected resources can still produce a large cleanup queue.
| Visible cue | What it means | First check |
|---|---|---|
coverage gap |
The checked resources did not meet the configured target. | Confirm the denominator, target percentage, and ignored resource types. |
target met |
The resource-level percentage is at or above the target. | Sample passing rows to confirm the tag values are truthful, not just present. |
Invalid value |
A required key exists, but the value is blank or outside the allowed list. | Check spelling, casing, old vocabulary values, and missing dictionary entries. |
Largest gap |
One required tag is responsible for the biggest missing-or-invalid count. | Look for clusters by resource type, provider, region, or creation path. |
Parser warnings |
The input may not have been read as intended. | Fix headers, tag columns, quoting, or missing resource IDs before using the result formally. |
The Required Tag Coverage chart stacks valid, missing-key, and invalid-value counts for each required tag. Use it to find the tag that blocks the most resources, but use the ledger before assigning work because the chart does not show every affected resource in context.
Table exports are most useful for ticket handoff. Copy or download Coverage Snapshot for the audit summary, Resource Gap Ledger for row-level proof, and Tag Remediation Queue for grouped cleanup. The JSON report is better for archiving or passing the same evidence into another workflow.
A clean result still deserves a governance check. Coverage can show that the declared keys and values are present in the supplied rows, but it cannot prove that an owner team still exists, a cost center is active, a resource supports provider-side tagging, or recent billing data has already absorbed the latest metadata change.
Technical Details:
Tag coverage is a resource-level completeness measure. A checked resource passes only when every required key is present and every required value rule is satisfied. That makes the percentage stricter than a tag-slot average: one missing owner or invalid data-class value makes the whole resource incomplete for the resource coverage gate.
The denominator is the set of parsed resources after ignored resource types are removed. The numerator is the subset of those resources with zero required-tag gaps. The result is deterministic for the same inventory text, required tag list, matching mode, value rule, ignored resource types, priority tags, and target percentage. No live cloud-provider lookup is made, so freshness depends on the inventory export supplied for the audit.
Headered comma-delimited and tab-delimited rows are the most reliable input shape. Common aliases are recognized for the resource ID, type, provider, region, and tag evidence columns, including names such as resource, service, cloud, platform, labels, and tag_set. If no usable header is present, rows are read by position, which is faster for small ad hoc lists but easier to misread in formal evidence.
Formula Core
Ignored resource types are removed first. Coverage is then the number of checked resources with every required tag rule satisfied divided by the number of checked resources. The displayed percentage is rounded to one decimal place, and the summary target passes when coverage is greater than or equal to the selected target.
If 9 of 12 checked resources satisfy every required key, resource coverage is 75.0%. If one database is missing Owner, the same database has a blank CostCenter, and one queue has Environment=sandbox outside the allowed list, tag debt is 3 slots.
| Rule condition | Outcome | Why it matters |
|---|---|---|
| The required key is absent after the selected matching mode is applied. | Missing key. | The resource cannot be counted as complete until the key is backfilled or the export is fixed. |
The key exists, Require non-empty values is selected, and the value is blank. |
Invalid value. | An empty key does not answer ownership, environment, cost, or classification questions. |
| The required key has an allowed-value list and the resource value is outside that list. | Invalid value. | The value must be remapped to the approved vocabulary or the dictionary must be expanded deliberately. |
The resource type matches Ignored resource types. |
Excluded from checked resources. | The denominator changes, so exclusions should be narrow and documented. |
A required key is also listed in Priority tags. |
Sorted earlier in remediation output. | Ownership, cost, and classification keys can be assigned before lower-impact cleanup. |
Matching and Queue Rules
Strict matching compares tag keys exactly. Case-insensitive matching normalizes keys before comparison, which can reveal intended coverage when older exports contain mixed casing. Allowed values are compared under the same matching mode, while the ledger keeps the resource's original value text for evidence.
The remediation queue sorts priority tags first, then higher affected counts, then tag key name. A required tag with many missing keys or invalid values rises above a lower-impact tag, and a key listed as a priority tag rises ahead of routine cleanup even when counts are similar.
Repeated runs are comparable only when the inventory source, required tags, matching mode, value rule, ignored resource types, and target stay the same. Change one assumption at a time when you want to prove whether remediation improved coverage.
Limitations:
The audit is only as current and complete as the inventory you provide. It does not discover resources, call provider APIs, check tag-on-create enforcement, test whether a specific service supports tags, or verify that billing exports have already received tag changes.
- Do not put secrets, credentials, personal data, or sensitive text values in cloud tags or labels. Provider documentation treats tags and labels as metadata that can appear in reports, logs, commands, exports, or billing data.
- Provider rules differ. AWS, Azure, and Google Cloud use different terminology, casing behavior, limits, support coverage, and policy semantics.
- CSV parsing handles ordinary quoted rows, comma-delimited rows, and tab-delimited rows. It is not a full data-cleaning system for malformed exports or multiline tag cells.
- Allowed values should come from an approved tag dictionary. A partial list can turn real legacy values into false cleanup work.
- Ignored resource types can make the percentage look better. Keep the exclusion list small and record why each class is outside the audit.
Advanced Tips:
- Use strict key matching for final policy evidence, then run a separate case-insensitive pass to find casing cleanup that may otherwise look like missing coverage.
- Keep
Ignored resource typesas a short exception list. If an excluded type appears often, verify whether it truly cannot be tagged or whether the export needs a better source. - Put ownership, cost, and data classification keys in
Priority tagswhen cleanup needs to feed incident routing, billing allocation, or security review first. - Compare remediation over time by keeping the same target, dictionary, matching mode, value rule, and export scope. If the denominator changes, record why before claiming improvement.
- Use allowed-value lists for controlled vocabularies such as environments and data classes, but leave free-text keys such as owner names unrestricted when the authoritative directory changes often.
Worked Examples:
Shared production inventory below target
A production scope has twelve checked resources and requires Owner, Environment=prod|stage|dev, CostCenter, and DataClass=public|internal|confidential. Nine rows pass all rules, two rows miss CostCenter, and one row has DataClass=restricted. Coverage is 75.0%, tag debt is 3 slot(s), and the remediation queue points cleanup at CostCenter and DataClass.
Mixed casing during discovery
An export contains environment=prod on one virtual machine while the required key is Environment. Strict key matching reports that row as missing Environment. Case-insensitive key matching can count the row as covered if the value is valid. That discovery result is useful, but strict cleanup is still needed before policy evidence depends on exact key spelling.
Missing tag column in an export
A resource export includes IDs, resource types, providers, and regions, but the tag evidence column has an unrecognized name. The snapshot reports parser warnings, and the ledger may show every resource as missing every required tag. Rename the column to a recognized tag or label header, rerun the same scope, and compare the warning count before assigning cleanup work.
FAQ:
What inventory columns should I provide?
Use resource_id,type,provider,region,tags when possible. Common aliases are also recognized, and the tags cell can contain semicolon-separated pairs, pipe-separated pairs, or a small JSON object.
Why is a tag invalid instead of missing?
The key was found, but the value was blank while non-empty values were required, or the value did not match an allowed list such as prod|stage|dev.
Should I use strict or case-insensitive key matching?
Use strict matching for formal policy evidence. Use case-insensitive matching for discovery when provider exports or older resources contain mixed casing that should be standardized later.
Does a passing target mean the tag program is healthy?
Not by itself. The target only checks the supplied rows against the required keys and value rules. You still need to verify that owners, cost centers, environment names, and data classes match the current business records.
Why did the result say no checked resources?
The inventory may be empty, the rows may not parse, or Ignored resource types may have excluded every parsed row. Remove the exclusion or rerun a smaller, clearer export slice.
Glossary:
- Allowed value
- A value list attached to a required key, such as
prod|stage|dev. - Checked resource
- A parsed inventory row that remains after ignored resource types are removed.
- Complete resource
- A checked row where every required tag passes the current key and value rules.
- Resource coverage
- The percentage of checked resources that are complete.
- Tag debt
- The total missing, blank, or invalid required-tag slots across checked resources.
- Priority tag
- A required key that should appear earlier in remediation guidance.
References:
- What are tags?, AWS tagging best practices.
- Best practices and strategies, AWS Resource Groups Tagging API and Tag Editor documentation.
- Use tags to organize your Azure resources and management hierarchy, Microsoft Learn, last updated 2025-09-15.
- Overview of labels, Google Cloud documentation, last updated 2026-05-29.