mcpField
R
resource-tagging

resource-tagging

github.com/ancoleman云与 DevOps52569 次安装46 周前更新
代码仓库

关于 resource-tagging

面向多云环境的云资源标签策略技能,指导组织设计标签规范、执行合规检查并用于成本分摊与自动化。适合负责云治理、FinOps 和基础设施运营的团队。

主要功能

  1. 01设计必需与可选标签
  2. 02统一标签命名约定
  3. 03通过 IaC 和策略强制执行
  4. 04审计标签合规性
  5. 05按标签分析成本
  6. 06配置标签继承策略

适用场景

  1. 01按团队或项目拆分云支出
  2. 02检查资源是否缺少必需标签
  3. 03为合规范围和策略标记资源
  4. 04依据标签自动管理备份与生命周期

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ancoleman/ai-design-components --skill resource-tagging

安装后在 Claude Code 中输入/resource-tagging确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

outputs.yaml
examples/kubernetes/
gatekeeper-constraints.yaml
examples/terraform/
aws-required-tags.tf
azure-tag-policies.tf
references/
compliance-auditing.md
cost-allocation.md
enforcement-patterns.md
tag-taxonomy.md
scripts/
audit_tags.py

详细介绍

资源标记

应用全面的云资源标记策略,以在多云环境中实现成本分摊、所有权跟踪、合规性强制执行和基础设施自动化。

目的

资源标记为云治理提供基础元数据层。标记支持精准的成本分摊(最多可将未分摊支出减少 80%)、快速识别所有者、定义合规范围,以及自动管理生命周期。缺少适当的标记,云成本将无法追踪,安全事件会缺乏上下文,自动化策略也无法有效定位资源。

适用场景

在以下情况使用资源标记:

  • 实施云治理框架,以实现成本分摊和责任追踪
  • 构建 FinOps 实践,以按团队、项目或部门查看支出
  • 通过自动化策略强制执行合规要求(PCI、HIPAA、SOC2)
  • 设置自动化资源生命周期管理(备份、监控、关机)
  • 管理多租户或多项目云环境
  • 根据重要性实施灾难恢复和备份策略
  • 跟踪资源所有权,以便响应安全事件
  • 通过支出分析和展示分摊/费用分摊优化云成本

最小可行标记策略

首先为所有云资源添加必需的 “六大标记”:

标记用途示例值
Name人类可读的标识符prod-api-server-01
Environment生命周期阶段prod | staging | dev
Owner负责团队的联系方式[email protected]
CostCenter用于计费的财务代码CC-1234
Project业务计划ecommerce-platform
ManagedBy资源创建方式terraform | pulumi | manual

根据具体需求添加可选标记:

  • Application:需要应用级隔离的多应用项目
  • Component:资源角色(web、api、database、cache)
  • Backup:备份策略(daily、weekly、none)
  • Compliance:监管范围(PCI、HIPAA、SOC2)
  • SLA:服务级别(critical、high、medium、low)

标记命名约定

在整个组织中选择一种命名约定,并始终如一地执行:

约定格式示例最适用场景
PascalCaseCostCenter、ProjectNameAWS 标准以 AWS 为主的组织
lowercasecostcenter、projectGCP 标签(必需)以 GCP 为主的组织
kebab-casecost-center、project-nameAzure(不区分大小写)以 Azure 为主的组织
Namespacedcompany:environment、team:owner多组织标记策略大型企业

**重要:**各云服务提供商对大小写的处理方式不同:

  • AWS:区分大小写(Environment ≠ environment)
  • Azure:不区分大小写(Environment = environment)
  • GCP:必须使用小写(仅限 environment)
  • Kubernetes:区分大小写(environment ≠ Environment)

标记类别

所有标记类别的详细分类,请参阅 references/tag-taxonomy.md。

技术标记

面向运维的元数据:Name、Environment、Version、ManagedBy

业务标记

成本分摊元数据:Owner、CostCenter、Project、Department

安全标记

合规元数据:Confidentiality、Compliance、DataClassification、SecurityZone

自动化标记

生命周期元数据:Backup、Monitoring、Schedule、AutoShutdown

运维标记

支持元数据:SLA、ChangeManagement、CreatedBy、CreatedDate

自定义标记

组织专属元数据:Customer、Application、Component、Stack

云服务提供商标签限制

提供商标签限制键长度值长度区分大小写继承方式
AWS50 个用户定义标签128 个字符256 个字符是通过标签策略
Azure50 对512 个字符256 个字符否通过 Azure Policy
GCP64 个标签63 个字符63 个字符否通过组织策略
Kubernetes无限制253 个字符前缀 + 63 个字符名称63 个字符是通过命名空间

标签强制执行模式

基础设施即代码(推荐)

通过 Terraform/Pulumi 自动应用标签,可将人工错误减少 95%:

# Terraform: Provider-level default tags
provider "aws" {
  default_tags {
    tags = {
      Environment = var.environment
      Owner       = var.owner
      CostCenter  = var.cost_center
      Project     = var.project
      ManagedBy   = "terraform"
    }
  }
}

所有资源都会自动继承这些标签。特定资源的标签会与默认标签合并。

如需查看完整的 Terraform、Pulumi 和 CloudFormation 示例,请参阅 examples/terraform/、examples/pulumi/ 和 examples/cloudformation/。

基于策略的强制执行

在创建资源时强制执行标签要求:

AWS:使用 AWS Config 规则检查标签合规性(发出警报或拒绝) Azure:使用 Azure Policy 实现标签继承和强制执行 GCP:使用 Organization Policies 限制标签值 Kubernetes:使用 OPA Gatekeeper 或 Kyverno 进行准入控制

如需了解强制执行的实现模式,请参阅 references/enforcement-patterns.md。

标签合规性审计

定期开展审计(建议每周一次),以发现未加标签的资源:

AWS Config 查询(SQL):

SELECT resourceId, resourceType, configuration.tags
WHERE resourceType IN ('AWS::EC2::Instance', 'AWS::RDS::DBInstance')
  AND (configuration.tags IS NULL OR NOT configuration.tags.Environment EXISTS)

Azure Resource Graph 查询(KQL):

Resources
| where type in~ ('microsoft.compute/virtualmachines')
| where isnull(tags.Environment) or isnull(tags.Owner)
| project name, type, resourceGroup, tags

GCP Cloud Asset Inventory:

gcloud asset search-all-resources \
  --query="NOT labels:environment OR NOT labels:owner" \
  --format="table(name,assetType,labels)"

如需查看完整的审计查询和脚本,请参阅 references/compliance-auditing.md 和 scripts/audit_tags.py。

使用标签进行成本分摊

启用成本分摊标签,按团队、项目或部门跟踪支出:

AWS Cost Explorer

激活成本分摊标签(激活最多需要 24 小时):

# Enable cost allocation tags via Terraform
resource "aws_ce_cost_allocation_tag" "environment" {
  tag_key = "Environment"
  status  = "Active"
}

resource "aws_ce_cost_allocation_tag" "project" {
  tag_key = "Project"
  status  = "Active"
}

按标签设置成本异常检测,以发现异常支出:

resource "aws_ce_anomaly_monitor" "project_monitor" {
  name         = "project-cost-monitor"
  monitor_type = "DIMENSIONAL"

  monitor_specification = jsonencode({
    Tags = {
      Key    = "Project"
      Values = ["ecommerce", "mobile-app"]
    }
  })
}
Azure Cost Management

在 Azure Cost Management 仪表板中按标签对成本分组。导出按标签细分的成本数据:

az consumption usage list \
  --start-date 2025-12-01 \
  --query "[].{Cost:pretaxCost, Project:tags.Project, Team:tags.Owner}"
GCP Cloud Billing

将账单数据导出到 BigQuery,并按标签细分:

SELECT
  labels.key AS label_key,
  labels.value AS label_value,
  SUM(cost) AS total_cost
FROM `project.dataset.gcp_billing_export_v1_XXXXX`
CROSS JOIN UNNEST(labels) AS labels
WHERE labels.key IN ('environment', 'project', 'costcenter')
GROUP BY label_key, label_value
ORDER BY total_cost DESC

如需了解成本分摊的实现详情,请参阅 references/cost-allocation.md。

决策框架:必需标签与可选标签

确定在资源创建时需要强制执行哪些标签:

必需(强制拒绝):

  • 成本分摊:Owner、CostCenter、Project
  • 生命周期:Environment、ManagedBy
  • 标识:Name

建议(软性强制执行——仅发出警报):

  • 运维:Backup、Monitoring、Schedule
  • 安全:Compliance、DataClassification
  • 支持:SLA、ChangeManagement

可选(不强制执行):

  • 自定义:Application、Component、Customer
  • 实验性:任何非标准标签

强制执行方式:

  1. 硬性强制执行(拒绝创建资源):用于成本分摊标签

    • AWS:使用拒绝模式的 AWS Config 规则
    • Azure:使用拒绝效果的 Azure Policy
    • GCP:使用带约束的组织策略
  2. 软性强制执行(仅发出警报):用于运维标签

    • AWS:使用带通知的 AWS Config 规则
    • Azure:使用审计效果的 Azure Policy
    • GCP:使用 Cloud Asset Inventory 报告
  3. 不强制执行(尽力而为):用于自定义/实验性标签

标签继承策略

通过自动继承减少手动添加标签的工作:

AWS 标签策略

从 AWS Organizations 账户层级继承标签:

{
  "tags": {
    "Environment": {
      "tag_key": {
        "@@assign": "Environment"
      },
      "enforced_for": {
        "@@assign": ["ec2:instance", "s3:bucket"]
      }
    }
  }
}
Azure 标签继承

使用 Azure Policy 从资源组继承标签:

resource "azurerm_policy_assignment" "inherit_environment" {
  name                 = "inherit-environment-tag"
  policy_definition_id = azurerm_policy_definition.inherit_tags.id

  parameters = jsonencode({
    tagName = { value = "Environment" }
  })
}
GCP 标签继承

通过组织策略从文件夹/项目继承标签:

resource "google_organization_policy" "require_labels" {
  org_id     = var.organization_id
  constraint = "constraints/gcp.resourceLabels"

  list_policy {
    allow {
      values = ["environment:prod", "environment:staging"]
    }
    inherit_from_parent = true
  }
}
Kubernetes 标签传播

使用 Kyverno 从命名空间自动生成标签:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-default-labels
spec:
  rules:
  - name: add-environment-label
    match:
      resources:
        kinds: [Pod, Deployment]
    mutate:
      patchStrategicMerge:
        metadata:
          labels:
            +(environment): "{{request.namespace}}"

常见反模式

反模式 1:标签命名不一致

问题:不同资源上同一标签存在多种命名形式

# BAD: Tag sprawl
Environment: prod
environment: production
Env: prod
ENVIRONMENT: PROD

解决方案:通过 IaC 和标签策略强制采用统一命名规范

# GOOD: Consistent naming
Environment: prod  # Single standard format
反模式 2:手动创建资源但不添加标签

问题:通过 CLI/控制台创建的资源缺少必需标签

解决方案:通过 Config/Policy 规则阻止创建未添加标签的资源,或使用带预置标签模板的 AWS Service Catalog/Azure Blueprints

反模式 3:不强制执行标签(自愿添加标签)

问题:标签为可选项,常被遗忘,导致 35% 的支出无法分配

解决方案:在 IaC 中使用提供商默认标签,并在账户/订阅级别强制执行策略

反模式 4:标签泛滥(自定义标签过多)

问题:每个资源有 30 多个标签,大多数都未使用,导致成本报告杂乱

解决方案:仅从必需的“六大标签”开始。只有在存在明确用例时才添加可选标签。

反模式 5:静态标签未更新

问题:标签在创建时设置,但之后从不更新(例如,团队变更后,Owner 已过时)

解决方案:运行自动化标签审计(建议每周执行),使用 IaC 以编程方式更新标签,并与身份提供商集成以更新所有者信息

与其他技能的集成

infrastructure-as-code:通过 Terraform/Pulumi 模块中的 default_tags/stackTags 自动应用标签

cost-optimization:标签支持成本分摊、成本展示/分摊,以及按项目/团队设置预算提醒

compliance-frameworks:标签可用于证明 PCI/HIPAA/SOC2 审计跟踪和自动化策略强制执行的范围

security-hardening:标签用于强制执行安全策略(例如,根据 SecurityZone 标签控制公开与内部访问)

disaster-recovery:标签用于识别备份策略涵盖的资源(例如,Backup: daily 会触发自动快照)

kubernetes-operations:标签用于 Pod 调度、资源配额、网络策略和服务选择

实施清单

实施资源标签时:

  • 定义“六大”必需标签及其允许值
  • 选择一种命名约定(PascalCase、lowercase、kebab-case)
  • 在 IaC 中实施标签(Terraform/Pulumi 提供商的 default_tags)
  • 设置强制执行策略(AWS Config、Azure Policy、GCP 组织策略)
  • 在账单控制台中启用成本分配标签(AWS Cost Explorer、Azure Cost Management)
  • 创建标签合规性审计流程(建议每周执行)
  • 在组织 Wiki/运行手册中记录标签标准
  • 为未添加标签的资源设置自动提醒
  • 将标签与监控/提醒集成,以便联系所有者
  • 为不合规资源创建修复操作手册

快速参考

各提供商的标签强制执行工具
提供商强制执行工具用途
AWSAWS Config Rules标签合规性监控 + 修复
AWSTag Policies (Organizations)在账户级别强制执行标签
AzureAzure Policy标签强制执行 + 继承
GCPOrganization Policies标签限制 + 继承
KubernetesOPA Gatekeeper标签的准入控制
KubernetesKyverno自动生成标签 + 验证
成本分配工具
工具用途
AWS Cost Explorer基于标签的成本分析 + 异常检测
Azure Cost Management标签分组 + 预算
GCP Cloud Billing基于标签的成本细分
CloudHealth多云成本优化
Kubecost按标签分配 Kubernetes 成本
验证工具(部署前)
工具用途
CheckovIaC 标签验证(提交前)
tflintTerraform 标签规则检查
terraform-compliance标签策略的 BDD 测试

附加资源

详细的实施指南:

  • 标签分类体系和类别:参阅 references/tag-taxonomy.md
  • 实施模式(AWS、Azure、GCP、K8s):参阅 references/enforcement-patterns.md
  • 成本分配设置:参阅 references/cost-allocation.md
  • 合规审计查询:参阅 references/compliance-auditing.md
  • Terraform 示例:参阅 examples/terraform/
  • Kubernetes 清单:参阅 examples/kubernetes/
  • 审计脚本:参阅 scripts/audit_tags.py、scripts/cost_by_tag.py

关键要点

  1. 从“六大”必需标签开始:Name、Environment、Owner、CostCenter、Project、ManagedBy
  2. 在创建时强制执行:使用 AWS Config、Azure Policy、GCP 组织策略阻止创建未标记的资源
  3. 使用 IaC 自动化:Terraform/Pulumi 默认标签可将人工错误减少 95%
  4. 启用成本分配:激活计费标签,将未分配支出减少 80%
  5. 选择一种命名规范:PascalCase、lowercase 或 kebab-case,并始终如一地执行
  6. 从父级继承标签:资源组、文件夹、命名空间会自动传播标签
  7. 定期审计:每周进行标签合规检查,及时发现偏差并防止标签泛滥
  8. 标签继承可减少工作量:让父级资源将通用标签传播给子级

评论

支持 Markdown