beginner Por Mathias Paulenko

Plantilla de Politica de Etiquetado de Recursos Cloud

Una plantilla de politica para aplicar etiquetas consistentes en recursos cloud y mejorar la asignacion de costos, la seguridad y las operaciones.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Descripcion General

El Etiquetado de Recursos Cloud es la practica de aplicar etiquetas de metadatos a recursos cloud como maquinas virtuales, buckets de almacenamiento, bases de datos y componentes de red. Las etiquetas consistentes permiten la asignacion de costos, el control de acceso, las operaciones automatizadas y la auditoria de seguridad. Esta plantilla de politica define etiquetas requeridas, convenciones de nombres, mecanismos de cumplimiento y controles de gobernanza.

Cuando Usar

  • For alternatives, see Infrastructure Cost Allocation Template.

  • Configurar una nueva cuenta cloud o landing zone.

  • Incorporar un equipo o carga de trabajo a la plataforma cloud.

  • Preparar reportes de costos o auditorias de seguridad que requieran propiedad de recursos.

  • Automatizar operaciones como backups, apagados o parches por etiqueta.

  • Limpiar recursos sin etiquetar o etiquetados inconsistentemente.

Prerequisitos

  • Un proveedor cloud o entorno multi-cloud como AWS, Azure o GCP.
  • Un dueno de la politica de etiquetado, tipicamente ingenieria de plataforma o gobernanza cloud.
  • Una lista de etiquetas requeridas acordada con finanzas, seguridad y operaciones.
  • Herramientas de policy-as-code o gobernanza de etiquetado nativas como AWS Organizations tag policies, Azure Policy o GCP Organization Policy.
  • Un mecanismo para reportar y remediar recursos no conformes.

Solucion

Plantilla de Politica

1. Etiquetas Requeridas

EtiquetaRequeridaFormatoEjemploProposito
ownerSiemail o ID de equipocheckout-team@example.comResponsabilidad
teamSiminusculas, sin espaciosplatformPropiedad del equipo
productSiminusculas, sin espaciosapi-gatewayMapeo de producto
environmentSiminusculasproduction, staging, developmentSeparacion de entornos
cost-centerSialfanumericocc-12345Asignacion financiera
budget-codeNoalfanumericobudget-2026-q3Seguimiento de presupuesto
data-classificationSipredefinidopublic, internal, confidential, restrictedClasificacion de seguridad
compliance-scopeNopredefinidopci, gdpr, soc2, noneAlcance de cumplimiento
auto-shutdownNotrue / falsetrueAutomatizacion operacional
backup-policyNopredefinidostandard, critical, noneAsignacion de backup

2. Convenciones de Nombres de Etiquetas

ReglaDescripcionEjemplo
MinusculasTodas las claves y valores de etiquetas en minusculasenvironment: production
Sin espaciosUsar guiones en lugar de espacioscost-center: cc-12345
Usar guiones, no guiones bajosSeparador consistente en claves y valoresbudget-code: budget-2026-q3
Sin caracteres especialesEvitar !@#$%^&* excepto guionesproduct: api-gateway
Significativas y cortasUsar abreviaturas clarasteam: sre
Valores controlados para etiquetas restringidasUsar valores permitidos para environment, clasificacion de datos, etc.environment: production

3. Matriz de Cobertura de Etiquetado

Tipo de RecursoEtiquetas RequeridasSoporte de Automatizacion
Instancias de computoowner, team, product, environment, cost-center, data-classificationSi
Buckets de almacenamientoowner, team, product, environment, cost-center, data-classificationSi
Bases de datosowner, team, product, environment, cost-center, data-classification, backup-policySi
Recursos de redowner, team, environment, cost-centerParcial
Load balancersowner, team, product, environment, cost-centerSi
Clusters Kubernetesowner, team, product, environment, cost-centerSi
Contenedores y podsteam, product, environmentVia labels
Funciones serverlessowner, team, product, environment, cost-centerSi
Roles y politicas IAMowner, team, environment, compliance-scopeSi

4. Mecanismos de Cumplimiento de Etiquetas

MecanismoAlcanceAccion ante No ConformidadHerramienta de Ejemplo
Linting de IaCPull requestBloquear mergeTerraform policy, Checkov, tfsec
Politica de despliegueCreacion de recursoBloquear o advertirAWS Organizations, Azure Policy, GCP Organization Policy
Remediacion automaticaRecursos existentesAgregar etiquetas por defecto o notificar duenoCloud Custodian, Azure Policy remediation
Escaneo de cumplimientoTodos los recursosGenerar reporte y ticketProwler, Cloud Custodian, herramientas nativas
Filtrado de reportes de costoFacturacionCostos sin etiquetar asignados a presupuesto centralAWS Cost Explorer, Azure Cost Management

5. Manejo de Excepciones

EscenarioProcesoDuenoVencimiento
Recurso legacy sin etiquetasAgregar etiquetas durante proxima ventana de mantenimiento o via remediacion automaticaDueno del recurso30 dias
Recurso gestionado por tercerosAplicar etiquetas a nivel de cuenta o proyecto si el etiquetado directo no es soportadoEquipo de plataforma90 dias
Recurso compartidoEtiquetar con dueno primario y agregar metadata de division de costos compartidosEquipo de plataforma90 dias
Recurso temporalRequerir etiquetas minimas al crear; auto-limpieza despues del vencimientoDueno del recursoVida util del recurso
Aprobacion de excepcionEnviar solicitud de excepcion con aceptacion de riesgo y fecha de revisionEquipo de gobernanza6 meses

6. Checklist de Gobernanza

  • Las etiquetas requeridas estan definidas y documentadas.
  • Las claves y valores de etiquetas siguen las convenciones de nombres.
  • Las plantillas de IaC exigen etiquetas al crear recursos.
  • La politica cloud impide la creacion de recursos sin etiquetas cuando sea posible.
  • El escaneo automatico reporta recursos no conformes semanalmente.
  • Los recursos sin etiquetar se asignan a un centro de costos por defecto y se remedian.
  • Los valores de etiquetas se mantienen en un registro central o lista de valores permitidos.
  • La politica se revisa trimestralmente y se actualiza para nuevos servicios.
  • El cumplimiento de etiquetas se incluye en revisiones de seguridad y costos.

Explicacion

Las etiquetas son metadatos que potencian la asignacion de costos, seguridad, operaciones y cumplimiento. Una politica de etiquetado asegura que cada recurso tenga etiquetas consistentes y significativas desde la creacion hasta la retirada. Sin gobernanza, las etiquetas se vuelven inconsistentes, haciendo que la automatizacion y los reportes sean poco confiables. La combinacion de etiquetas requeridas, convenciones de nombres y herramientas de cumplimiento crea un modelo de operacion cloud preparado para crecer.

Politica de Etiquetas con Terraform

# Modulo de etiquetas obligatorias para AWS
variable "required_tags" {
  type = map(string)
  default = {
    Team        = ""
    Environment = ""
    Project     = ""
    CostCenter  = ""
    Owner       = ""
  }
}

locals {
  default_tags = {
    Team        = var.required_tags["Team"]
    Environment = var.required_tags["Environment"]
    Project     = var.required_tags["Project"]
    CostCenter  = var.required_tags["CostCenter"]
    Owner       = var.required_tags["Owner"]
    ManagedBy   = "terraform"
    CreatedAt   = formatdate("YYYY-MM-DD", timestamp())
  }
}

# Aplicar etiquetas a todos los recursos
resource "aws_instance" "app" {
  ami           = data.aws_ami.app.id
  instance_type = var.instance_type
  tags          = local.default_tags
}

resource "aws_s3_bucket" "data" {
  bucket = var.bucket_name
  tags   = local.default_tags
}

resource "aws_db_instance" "database" {
  engine         = "postgres"
  instance_class = var.db_class
  tags           = local.default_tags
}

Script de Deteccion de Recursos Sin Etiquetar

#!/usr/bin/env python3
"""Detectar recursos sin etiquetar en AWS."""
import boto3
import json
from datetime import datetime

REQUIRED_TAGS = ['Team', 'Environment', 'Project', 'CostCenter', 'Owner']
REGIONS = ['us-east-1', 'eu-west-1', 'ap-southeast-1']

def check_ec2_instances(region):
    ec2 = boto3.client('ec2', region_name=region)
    untagged = []
    response = ec2.describe_instances()
    for res in response['Reservations']:
        for inst in res['Instances']:
            tags = {t['Key']: t['Value'] for t in inst.get('Tags', [])}
            missing = [t for t in REQUIRED_TAGS if t not in tags]
            if missing:
                untagged.append({
                    'resource_id': inst['InstanceId'],
                    'type': 'EC2',
                    'region': region,
                    'missing_tags': missing,
                    'launch_time': inst['LaunchTime'].isoformat()
                })
    return untagged

def check_s3_buckets(region):
    s3 = boto3.client('s3', region_name=region)
    untagged = []
    for bucket in s3.list_buckets()['Buckets']:
        tags = s3.get_bucket_tagging(Bucket=bucket['Name']).get('TagSet', [])
        tag_keys = [t['Key'] for t in tags]
        missing = [t for t in REQUIRED_TAGS if t not in tag_keys]
        if missing:
            untagged.append({
                'resource_id': bucket['Name'],
                'type': 'S3',
                'region': region,
                'missing_tags': missing
            })
    return untagged

def check_rds_instances(region):
    rds = boto3.client('rds', region_name=region)
    untagged = []
    for db in rds.describe_db_instances()['DBInstances']:
        arn = db['DBInstanceArn']
        tags = rds.list_tags_for_resource(ResourceName=arn).get('TagList', [])
        tag_keys = [t['Key'] for t in tags]
        missing = [t for t in REQUIRED_TAGS if t not in tag_keys]
        if missing:
            untagged.append({
                'resource_id': db['DBInstanceIdentifier'],
                'type': 'RDS',
                'region': region,
                'missing_tags': missing
            })
    return untagged

def main():
    all_untagged = []
    for region in REGIONS:
        all_untagged.extend(check_ec2_instances(region))
        all_untagged.extend(check_s3_buckets(region))
        all_untagged.extend(check_rds_instances(region))

    report = {
        'timestamp': datetime.now().isoformat(),
        'total_untagged': len(all_untagged),
        'resources': all_untagged
    }
    print(json.dumps(report, indent=2))

    if all_untagged:
        print(f'\nRecursos sin etiquetar: {len(all_untagged)}')
        for r in all_untagged:
            print(f"  {r['type']} {r['resource_id']} ({r['region']}): falta {', '.join(r['missing_tags'])}")

if __name__ == '__main__':
    main()

Variantes

  • Politica de etiquetado AWS: Usa AWS Organizations tag policies, AWS Config rules y Cost Allocation Tags.
  • Politica de etiquetado Azure: Usa Azure Policy, resource tags y cost management tags.
  • Politica de etiquetado GCP: Usa GCP labels, Organization Policy y Resource Manager labels.
  • Politica de etiquetado multi-cloud: Estandariza un conjunto comun de etiquetas en AWS, Azure y GCP con implementacion especifica por proveedor.
  • Politica de etiquetado de contenedores: Se enfoca en labels y annotations de Kubernetes para pods, namespaces y nodos.
  • Politica de etiquetado centrada en seguridad: Enfatiza clasificacion de datos, alcance de cumplimiento y etiquetas de segmentacion de red.

Lo que funciona

  • Exige etiquetas minimas requeridas al momento de crear recursos.
  • Usa policy-as-code para validar etiquetas en pipelines de CI/CD e IaC.
  • Aplica etiquetas consistentemente en computo, almacenamiento, red e IAM.
  • Manten los valores de etiquetas en un vocabulario controlado para evitar duplicados y errores tipograficos.
  • Usa automatizacion para remediar recursos sin etiquetar en lugar de depender de correcciones manuales.
  • Incluye el cumplimiento de etiquetas en revisiones de costos y seguridad.
  • Documenta la razon de cada etiqueta requerida para que los equipos entiendan el valor.
  • Revisa los valores permitidos trimestralmente a medida que cambian equipos y productos.

Errores Comunes

  • Permitir valores de texto libre para etiquetas que deberian ser controladas.
  • Etiquetar solo algunos tipos de recursos y omitir red o IAM.
  • Depender del etiquetado manual despues de crear recursos.
  • Usar convenciones de nombres diferentes en diferentes equipos o cuentas.
  • No actualizar etiquetas cuando cambia la propiedad o el entorno.
  • Tratar las etiquetas como metadata opcional en lugar de datos operativos.
  • No reportar recursos sin etiquetar o asignar propiedad de remediacion.

Troubleshooting

  • Instance is unreachable: check security groups, routes, DNS, and health status in the provider console. Verify that the OS firewall is not blocking the port.
  • Provisioning fails consistently: inspect the init script, IAM roles, and image availability. A missing permission is the most common root cause.
  • Resource exhaustion alerts: correlate CPU, memory, disk, and network metrics.
  • Backup restore does not work: test restores regularly. A backup that cannot be restored is not a backup.
  • Configuration drift: Recreate from the canonical definition when in doubt.

Preguntas frecuentes

Que pasa si un recurso es compartido por multiples equipos?
Etiqueta el recurso con el dueno primario o el equipo que lo gestiona. Usa metadata adicional como una etiqueta de shared-cost o un reporte de asignacion de costos para distribuir los costos...
Como cumplimos las etiquetas sin ralentizar el desarrollo?
Usa controles de policy-as-code en CI/CD que fallen rapido cuando faltan etiquetas requeridas. Provee plantillas y valores por defecto de auto-etiquetado para que los equipos no tengan que recordar...
Podemos etiquetar recursos existentes retroactivamente?
Si, usa herramientas nativas del cloud o automatizacion de terceros como Cloud Custodian para escanear, reportar y remediar recursos sin etiquetar. Establece un plazo para remediacion manual antes...
Como implementamos aplicacion de etiquetas en CI/CD?
Usa Terraform Cloud o GitHub Actions con validacion de etiquetas. Crea un script que analice el plan de Terraform y verifique que todos los recursos tengan las etiquetas requeridas (team,...
Que es Cloud Custodian y como nos ayuda?
Cloud Custodian (c7n) es una herramienta de codigo abierto para gestion de nube que permite escribir politicas en YAML para auditar, hacer cumplir y optimizar recursos en AWS, Azure y GCP. Puedes...
Como manejamos etiquetas para recursos compartidos?
Etiqueta el recurso con el dueno primario o el equipo que lo gestiona. Usa una etiqueta adicional Shared=true y un reporte de asignacion de costos para distribuir los costos compartidos. Documenta...
Con que frecuencia debemos auditar el cumplimiento de etiquetas?
Ejecuta escaneos automaticos diariamente para detectar recursos sin etiquetar. Genera un reporte semanal de cumplimiento para liderazgo. Realiza una auditoria completa trimestral que incluya:...
Como evitamos la proliferacion de valores de etiquetas no validos?
Mantén un registro central de valores permitidos para cada etiqueta. Usa AWS Organizations Tag Policies para restringir valores a nivel de organizacion. En Terraform, usa variables con validacion...