skip to content

In Amazon SES, what is the difference between verifying a domain identity and verifying an email address identity, and which should a production service use?

level: middleimportance: should knowfreq 61%

answer

  1. two ways to prove you own the From
  2. one is a click, one is DNS
  3. no-reply@ has nobody to click
  4. any local part once the domain is verified
  5. identities are per Region

basics

~20 s

An email identity verifies one exact address by emailing a confirmation link to it. A domain identity is verified by publishing DNS records, and then any address at that domain may be the From. Production services verify the domain, because addresses like no-reply@ have no mailbox to click a link.

solid answer

~50 s

SES will only send from an identity you have proven you control, and there are two kinds. An **email address identity** is verified by SES mailing a confirmation link to that exact mailbox — quick, but it authorises only that one address, and it presumes somebody can open the mailbox. A **domain identity** is verified by publishing DNS records in the domain's zone; once verified you can use *any* local part at that domain as the From address, including `no-reply@` and `receipts@` that have no mailbox behind them. Production uses the domain identity: it scales to as many sender addresses as the product needs, it survives people leaving, and it is the identity type that carries domain-level sending configuration such as DKIM signing. Two traps: verification is per Region, so a domain must be verified in every Region you send from; and if the DNS records are ever removed, SES can mark the identity as failed and sending from it stops.

code

bash · 9 lines
bash
# Address identity: SES emails a confirmation link to this mailbox
aws sesv2 create-email-identity --email-identity [email protected]

# Domain identity: returns the DNS records to publish in the zone
aws sesv2 create-email-identity --email-identity example.com

# Is it actually still verified, in this Region?
aws sesv2 get-email-identity --email-identity example.com \
  --query '{Type:IdentityType,Verified:VerifiedForSendingStatus}'

go deeper

for a junior

Know that SES only sends from an identity you verified, that an address identity is confirmed by clicking a link and a domain identity by adding DNS records, and that real services verify the domain.

for a middle

Explain why the domain identity is the production choice — any local part works, no mailbox is needed for no-reply@ — and that identities are per-Region resources that SES keeps rechecking in DNS.

for a senior

Demonstrate that you monitor identity verification status as production state, know the failure mode when a zone change drops the records, and keep verification firmly separate from deliverability in your reasoning.

for a principal

Own who controls the zone and therefore who can send as the company: domain identity plus scoped send permissions, with a deliberate decision about whether business units share one sending domain or get subdomains.

## Why identities exist at all SES will not let an arbitrary account send mail claiming to be `[email protected]`. Before any send, you must hold a **verified identity** proving control of the From address or its domain. This is the anti-abuse floor of the service, and it applies both inside and outside the sandbox. There are exactly two identity types. ## Email address identity You call `CreateEmailIdentity` with an address (or add it in the console). SES sends a confirmation link to that mailbox; someone clicks it; the identity becomes verified. The scope is *that one address, in that one Region*. This is genuinely useful for a developer's own address during early testing, or for a one-off sender. Its limits show up fast in production: - Every new From address is a fresh manual verification, each needing a real mailbox and a human. - The addresses a product actually wants to send from — `no-reply@`, `alerts@`, `receipts@` — often have **no mailbox at all**, so there is nobody to click the link. - The verification is tied to a person's ability to read that inbox, which quietly breaks when they leave. ## Domain identity You create the identity for the domain (`example.com`) and SES gives you DNS records to publish in the zone. Publishing them proves you control the domain, because only whoever controls the zone can add records to it. In practice SES's modern flow hands you a set of CNAME records that both verify the domain and turn on DKIM signing, and if the domain is hosted in Route 53 the console can write them for you. Once verified: - **Any local part** at that domain can be the From address, with no further verification. `[email protected]` and `[email protected]` just work. - A verified parent domain generally covers sending from its subdomains; you verify a subdomain separately when you want it to carry its own DKIM keys or its own configuration. - Domain-level features hang off this identity, because they are properties of the domain rather than of one mailbox. This is why every real service verifies the domain. It is one setup, done by whoever controls DNS, and it never needs revisiting when the product adds a new sender address. ## The operational traps **Region scope.** An identity is a per-Region resource. The DNS records are published once in the zone, but the identity must be created and verified in each Region you send from. Deploying a sender to a second Region without doing this is a top-two SES incident. **DNS fragility.** SES rechecks the records. If a zone migration, a Terraform refactor, or a registrar change drops them, the identity can move to a failed state and sends from it start failing. Treat the SES records as production infrastructure and monitor the identity's verification status, rather than assuming that verified once means verified forever. **Verification is not deliverability.** A verified identity means SES will *accept* your message. Whether Gmail puts it in the inbox is a separate matter of domain authentication and reputation. Candidates who conflate the two — "we verified the domain so DMARC is fine" — are exposing a real gap. **Ownership.** The DNS records mean the team that controls the zone effectively controls who can send as the company. That is the correct place for the control to sit, and it is worth saying out loud: it is why an email identity for a shared address is a weaker control than the domain identity plus a scoped IAM permission to send. ## Choosing, in one line Email identity for a developer sandbox or a genuine one-address special case; domain identity for anything a customer will receive.

  • Your domain identity was verified a year ago and mail suddenly starts failing. What do you check first?
    The DNS records. SES rechecks them, so a zone migration, a registrar change, or an infrastructure refactor that dropped the SES records can move the identity to a failed state and stop sends. Check the identity's verification status in the sending Region, compare the published records against what SES expects, and monitor that status rather than assuming verification is permanent.
  • If a domain is verified, does that mean Gmail will put the mail in the inbox?
    No. Verification only proves control to AWS so SES will accept the message; it says nothing about how receiving providers judge it. Inbox placement depends on domain authentication and sending reputation, which are separate concerns. Treat identity verification as the gate to send at all, never as evidence of deliverability.
  • A product team wants to send from ten new addresses at your domain. What has to happen?
    Nothing in SES, if the domain identity is verified — any local part at that domain is already authorised as a From address. That is precisely why production verifies the domain rather than individual addresses: adding senders becomes a code change, not a fresh manual verification with a real mailbox and a human clicking a link.

saying these in an interview costs you the question

  • Verifying each From address individually in production
  • Assuming a verified domain replicates across Regions
  • Thinking verification guarantees inbox placement
  • Believes no-reply@ needs a real mailbox to verify
  • Treats SES DNS records as one-time setup, not monitored infra

context