Configurar DMARC en AWS SES: guía para desarrolladores
Guía técnica para desarrolladores: configura SPF, DKIM y DMARC en Amazon SES. Incluye comandos CLI, ejemplos de código y buenas prácticas.

Introducción
Amazon Simple Email Service (SES) es una plataforma de correo potente y rentable para desarrolladores. Sin embargo, configurar correctamente la autenticación es fundamental para la entregabilidad y para evitar la carpeta de spam en SES.
Esta guía técnica cubre la configuración completa de autenticación de correo en AWS SES, incluyendo comandos CLI y ejemplos de infraestructura como código.
Lo que aprenderás:
- Configurar la identidad de dominio en SES con SPF y DKIM
- Implementar una política DMARC
- Gestionar múltiples dominios de envío
- Monitorizar y depurar la autenticación
- Buenas prácticas para despliegues en producción
Requisitos previos:
- Cuenta de AWS con acceso a SES
- Dominio con gestión DNS
- AWS CLI instalado y configurado
- Conocimientos básicos de DNS y autenticación de correo
Paso 1: Verificar el dominio en SES
1.1: Verificar la identidad del dominio (consola)
Abre la consola de SES
- Navega a la consola de SES
- Selecciona tu región
Crear la identidad del dominio
- Haz clic en "Identities" → "Create identity"
- Selecciona "Domain"
- Introduce tu dominio:
tudominio.com - Marca "Assign a default configuration set" (opcional)
- Haz clic en "Create identity"
Copia los registros DNS
- SES proporciona los registros DNS a añadir:
- Verificación del dominio (TXT o CNAME)
- Registros DKIM (3 registros CNAME)
- (Opcionalmente) Custom MAIL FROM
- SES proporciona los registros DNS a añadir:
1.2: Verificar la identidad del dominio (CLI)
aws ses verify-domain-identity --domain tudominio.com --region us-east-1
aws ses verify-domain-dkim --domain tudominio.com --region us-east-1Salida:
{
"DkimTokens": [
"token1abc123",
"token2def456",
"token3ghi789"
]
}1.3: Verificar el dominio con CloudFormation
AWSTemplateFormatVersion: '2010-09-09'
Resources:
SESIdentity:
Type: AWS::SES::EmailIdentity
Properties:
EmailIdentity: tudominio.com
DkimSigningAttributes:
NextSigningKeyLength: RSA_2048_BIT1.4: Verificar el dominio con Terraform
resource "aws_ses_domain_identity" "main" {
domain = "tudominio.com"
}
resource "aws_ses_domain_dkim" "main" {
domain = aws_ses_domain_identity.main.domain
}Paso 2: Configurar los registros DNS
2.1: Añadir el registro de verificación del dominio
SES proporciona un token de verificación. Añade un registro TXT:
- Name:
_amazonses.tudominio.com - Type: TXT
- Value: Token de verificación de SES
Ejemplo:
_amazonses.tudominio.com TXT "abc123def456ghi789..."2.2: Añadir los registros DKIM
SES proporciona tres tokens DKIM. Crea tres registros CNAME:
token1abc123._domainkey.tudominio.com CNAME token1abc123.dkim.amazonses.com
token2def456._domainkey.tudominio.com CNAME token2def456.dkim.amazonses.com
token3ghi789._domainkey.tudominio.com CNAME token3ghi789.dkim.amazonses.comCon Route 53 CLI:
ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name tudominio.com \
--query "HostedZones[0].Id" --output text)
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch '{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "token1abc123._domainkey.tudominio.com",
"Type": "CNAME",
"TTL": 1800,
"ResourceRecords": [{"Value": "token1abc123.dkim.amazonses.com"}]
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "token2def456._domainkey.tudominio.com",
"Type": "CNAME",
"TTL": 1800,
"ResourceRecords": [{"Value": "token2def456.dkim.amazonses.com"}]
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "token3ghi789._domainkey.tudominio.com",
"Type": "CNAME",
"TTL": 1800,
"ResourceRecords": [{"Value": "token3ghi789.dkim.amazonses.com"}]
}
}
]
}'2.3: Verificar el estado de DKIM
Consola: Comprueba el estado de la identidad (debería mostrar "Verified" con DKIM activado)
CLI:
aws ses get-identity-dkim-attributes --identities tudominio.com --region us-east-1Salida esperada:
{
"DkimAttributes": {
"tudominio.com": {
"DkimEnabled": true,
"DkimVerificationStatus": "Success",
"DkimTokens": ["token1abc123", "token2def456", "token3ghi789"]
}
}
}Paso 3: Configurar SPF para SES
3.1: Registro SPF básico
Añade un registro TXT:
- Name:
@otudominio.com - Type: TXT
- Value:
v=spf1 include:amazonses.com ~all
3.2: SPF con múltiples servicios
Si usas SES + otros servicios:
v=spf1 include:amazonses.com include:_spf.google.com ~all3.3: Consideraciones regionales de SPF
Importante: SES envía desde endpoints regionales. El include amazonses.com cubre todas las regiones.
Alternativa (específico por región):
- US East (N. Virginia):
include:ses-email.us-east-1.amazonses.com - US West (Oregon):
include:ses-email.us-west-2.amazonses.com - EU (Ireland):
include:ses-email.eu-west-1.amazonses.com
Se recomienda usar include:amazonses.com (cubre todas las regiones).
3.4: Añadir SPF con Route 53 CLI
ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name tudominio.com \
--query "HostedZones[0].Id" --output text)
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "tudominio.com",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [{"Value": "\"v=spf1 include:amazonses.com ~all\""}]
}
}]
}'3.5: Verificar SPF
dig tudominio.com TXTO usa: SPF Checker →
Paso 4: Configurar Custom MAIL FROM (opcional pero recomendado)
4.1: Por qué usar Custom MAIL FROM
Por defecto, SES utiliza amazonses.com como dominio MAIL FROM, lo que provoca problemas de alineación SPF con DMARC.
Ventajas del Custom MAIL FROM:
- Alineación SPF correcta
- Mejor cumplimiento DMARC
- Apariencia más profesional
4.2: Establecer el dominio Custom MAIL FROM
Elige un subdominio: bounce.tudominio.com o mail.tudominio.com
Desde la consola:
- Ve a la identidad en SES
- Haz clic en "Custom MAIL FROM domain"
- Introduce el subdominio:
bounce.tudominio.com - Elige "Use a default value" o "Reject email"
- Guarda
Desde CLI:
aws ses set-identity-mail-from-domain \
--identity tudominio.com \
--mail-from-domain bounce.tudominio.com \
--behavior-on-mx-failure UseDefaultValue \
--region us-east-14.3: Añadir registros DNS para Custom MAIL FROM
SES requiere dos registros:
Registro MX:
- Name:
bounce.tudominio.com - Type: MX
- Value:
10 feedback-smtp.us-east-1.amazonses.com - Priority: 10
Registro SPF:
- Name:
bounce.tudominio.com - Type: TXT
- Value:
v=spf1 include:amazonses.com ~all
Route 53 CLI:
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch '{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "bounce.tudominio.com",
"Type": "MX",
"TTL": 300,
"ResourceRecords": [{"Value": "10 feedback-smtp.us-east-1.amazonses.com"}]
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "bounce.tudominio.com",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [{"Value": "\"v=spf1 include:amazonses.com ~all\""}]
}
}
]
}'4.4: Verificar Custom MAIL FROM
aws ses get-identity-mail-from-domain-attributes \
--identities tudominio.com \
--region us-east-1Paso 5: Implementar DMARC
5.1: Crear el registro DMARC
Añade un registro TXT:
- Name:
_dmarc.tudominio.com - Type: TXT
- Value:
v=DMARC1; p=none; rua=mailto:dmarc@tudominio.com; fo=1
5.2: Route 53 CLI
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "_dmarc.tudominio.com",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [{"Value": "\"v=DMARC1; p=none; rua=mailto:dmarc@tudominio.com; fo=1\""}]
}
}]
}'5.3: Política DMARC progresiva
Monitorización (semanas 1-4):
v=DMARC1; p=none; rua=mailto:dmarc@tudominio.comCuarentena (semanas 5-8):
v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@tudominio.com; adkim=r; aspf=rRechazo (semana 9 en adelante):
v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@tudominio.com; adkim=r; aspf=r5.4: Verificar DMARC
dig _dmarc.tudominio.com TXTO usa: DMARC Checker →
Paso 6: Enviar correo de prueba
6.1: Enviar prueba con AWS SDK (Python)
import boto3
ses = boto3.client('ses', region_name='us-east-1')
response = ses.send_email(
Source='test@tudominio.com',
Destination={'ToAddresses': ['destinatario@ejemplo.com']},
Message={
'Subject': {'Data': 'Test Email - DMARC Verification'},
'Body': {'Text': {'Data': 'This is a test email to verify authentication.'}}
}
)
print(f"Email sent. Message ID: {response['MessageId']}")6.2: Enviar prueba con CLI
aws ses send-email \
--from test@tudominio.com \
--to destinatario@ejemplo.com \
--subject "Test Email" \
--text "Test authentication" \
--region us-east-16.3: Verificar las cabeceras del correo
- Envía a Gmail/Outlook
- Visualiza el mensaje original
- Comprueba la cabecera Authentication-Results
Resultado esperado:
Authentication-Results: mx.google.com;
dkim=pass header.i=@tudominio.com;
spf=pass smtp.mailfrom=tudominio.com;
dmarc=passPaso 7: Buenas prácticas para producción
7.1: Usar Configuration Sets
Rastrea envíos, aperturas, clics y rebotes:
aws ses create-configuration-set \
--configuration-set Name=production-emails \
--region us-east-17.2: Configurar Event Publishing
Monitoriza rebotes y quejas:
aws ses put-configuration-set-event-destination \
--configuration-set-name production-emails \
--event-destination '{
"Name": "CloudWatch",
"Enabled": true,
"MatchingEventTypes": ["send","bounce","complaint"],
"CloudWatchDestination": {
"DimensionConfigurations": [{
"DimensionName": "ses:configuration-set",
"DimensionValueSource": "messageTag",
"DefaultDimensionValue": "production-emails"
}]
}
}'7.3: Monitorizar la reputación de envío
aws ses get-account-sending-enabled --region us-east-1
aws ses get-send-quota --region us-east-17.4: Gestionar rebotes y quejas
Configura un topic de SNS para notificaciones:
aws ses set-identity-notification-topic \
--identity tudominio.com \
--notification-type Bounce \
--sns-topic arn:aws:sns:us-east-1:123456789012:ses-bouncesResolución de problemas
Problema: La verificación DKIM falla
Síntomas: El estado de DKIM muestra "Pending" o "Failed"
Solución:
- Verifica que los tres registros CNAME están correctamente añadidos
- Comprueba errores tipográficos en los tokens DKIM
- Espera hasta 72 horas para la propagación DNS
- Usa
digpara verificar los registros CNAME
Problema: La alineación SPF falla con DMARC
Síntomas: SPF pasa pero DMARC falla la alineación
Solución:
- Configura un dominio Custom MAIL FROM
- Asegúrate de que el Custom MAIL FROM tiene los registros MX y SPF correctos
- Usa alineación relajada en DMARC:
aspf=r
Problema: Correos en modo sandbox
Síntomas: Solo puedes enviar a direcciones verificadas
Solución: Solicita acceso a producción:
aws ses get-account-sending-enabledEjemplos de infraestructura como código
Ejemplo completo con Terraform
resource "aws_ses_domain_identity" "main" {
domain = "tudominio.com"
}
resource "aws_ses_domain_dkim" "main" {
domain = aws_ses_domain_identity.main.domain
}
resource "aws_ses_domain_mail_from" "main" {
domain = aws_ses_domain_identity.main.domain
mail_from_domain = "bounce.${aws_ses_domain_identity.main.domain}"
}
resource "aws_route53_record" "dkim" {
count = 3
zone_id = aws_route53_zone.main.zone_id
name = "${element(aws_ses_domain_dkim.main.dkim_tokens, count.index)}._domainkey"
type = "CNAME"
ttl = 300
records = ["${element(aws_ses_domain_dkim.main.dkim_tokens, count.index)}.dkim.amazonses.com"]
}
resource "aws_route53_record" "spf" {
zone_id = aws_route53_zone.main.zone_id
name = ""
type = "TXT"
ttl = 300
records = ["v=spf1 include:amazonses.com ~all"]
}
resource "aws_route53_record" "dmarc" {
zone_id = aws_route53_zone.main.zone_id
name = "_dmarc"
type = "TXT"
ttl = 300
records = ["v=DMARC1; p=none; rua=mailto:dmarc@tudominio.com"]
}Resumen
La configuración de autenticación en AWS SES implica:
- Verificación del dominio: Verificar la identidad del dominio en SES
- DKIM: Añadir tres registros CNAME (autoconfigurados)
- SPF: Añadir
include:amazonses.com - Custom MAIL FROM: Configurar para una alineación SPF correcta
- DMARC: Enforcement progresivo de la política
Plazos:
- Configuración: 30-45 minutos
- Propagación DNS: 1-24 horas
- Monitorización: 2-4 semanas
- Enforcement completo: 6-8 semanas
Siguientes pasos
Verifica tu configuración de AWS SES:
¿Necesitas monitorización DMARC automatizada? Empieza gratis →
Artículos relacionados:
¿Listo para mejorar la entregabilidad de tus emails?
Empieza a monitorizar tus reportes DMARC y obtén información sobre tu configuración de autenticación.
Comenzar Prueba GratuitaArtículos Relacionados
platform guidesCómo configurar DMARC en Microsoft 365 (guía para Office 365)
Guía paso a paso para configurar SPF, DKIM y DMARC en Microsoft 365. Incluye ejemplos de registros DNS y consejos de resolución de problemas.
platform guidesConfiguración de DMARC en Zoho Mail: guía completa
Guía paso a paso para configurar SPF, DKIM y DMARC en Zoho Mail. Protege tu dominio y mejora la entregabilidad de tus correos con una autenticación correcta.
platform guidesCómo configurar DMARC, SPF y DKIM en Constant Contact
Guía completa para configurar SPF, DKIM y DMARC en Constant Contact. Resuelve problemas de autenticación y mejora la entregabilidad de tus correos.