Blog

Bereitstellung von AWS SES-Domänenidentitäten und DKIM-Einträgen mit CloudFormation

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
2 Minuten

In AWS CloudFormation gibt es keine Möglichkeit, SES-Domain-Identitäten zu generieren oder die DKIM-Tokens zu erhalten, die zum Senden und Empfangen von E-Mails mit AWS Simple Email Service erforderlich sind. Da wir eine 100%ige Reproduzierbarkeit anstreben, haben wir einen benutzerdefinierten Anbieter sowohl für die Domain-Identitätals auch für die DKIM-Validierungstoken erstellt. Diese benutzerdefinierten Anbieter geben sowohl die Token als auch die erforderlichen DNS-Datensätze zurück, die für die Validierung der Domäne und des E-Mail-Absenders erforderlich sind .

Wie füge ich SES Domain Identity in CloudFormation hinzu?

Es ist ganz einfach: Sie geben eine CloudFormation-Ressource vom Typ Custom::DomainIdentity an:

Resources:
  DomainIdentity:
    Type: Custom::DomainIdentity
    Properties:
      Domain: !Ref 'ExternalDomainName'
      Region: !Ref 'EmailRegion'
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-ses-provider'

Dadurch wird eine Domain-Identität in der angegebenen Region erstellt und sowohl das Validierungs-Token als auch die DNS-Einträge als Attribute zurückgegeben. Um gegenüber SES zu beweisen, dass Sie die Domain besitzen, müssen Sie einen Route53-Datensatz hinzufügen:

  DomainVerificationRecord:
    Type: AWS::Route53::RecordSetGroup
    Properties:
        Comment: !Sub 'SES identity for ${ExternalDomainName}'
        HostedZoneId: !Ref 'HostedZone'
        RecordSets: !GetAtt 'DomainIdentity.RecordSets'

Wie erhalte ich DKIM-Tokens in CloudFormation?

Es ist ganz einfach: Sie geben eine CloudFormation-Ressource vom Typ Custom::DkimTokens an:

Resources:
  DkimTokens:
    Type: Custom::DkimTokens
    Properties:
      Domain: !GetAtt 'DomainIdentity.Domain'
      Region: !GetAtt 'DomainIdentity.Region'
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-ses-provider'

Dies gibt die DKIM-Tokens und die DNS-Einträge als Attribute für eine bestehende Domainidentität zurück. So kann der Empfänger von überprüfen, ob die Nachrichten vom Eigentümer der Domäne gesendet wurden. Sie können dies wie folgt verwenden:

  DkimRecords:
    Type: AWS::Route53::RecordSetGroup
    Properties:
      HostedZoneId: !Ref 'HostedZone'
      RecordSets: !GetAtt 'DkimTokens.RecordSets'

Installation

Um diese benutzerdefinierten Ressourcen zu installieren, geben Sie ein:

git clone https://github.com/binxio/cfn-ses-provider.git
cd cfn-ses-provider
aws cloudformation deploy 
    --capabilities CAPABILITY_IAM 
    --stack-name cfn-ses-provider 
    --template-file ./cloudformation/cfn-resource-provider.yaml 

Diese CloudFormation-Vorlage verwendet unseren vorgefertigten Provider von s3://binxio-public-{{your-region}}/lambdas/cfn-ses-provider-0.6.1.zip.

Demo

Um die Demo dieser benutzerdefinierten Ressource zu installieren, geben Sie ein:

aws cloudformation deploy 
    --stack-name cfn-ses-provider-demo 
    --template-file ./cloudformation/demo-stack.yaml

die installierte Identität anzeigen:

aws --region eu-west-1 ses list-identities

Fazit

Mit dem Custom CloudFormation SES-Provider können Sie Domain-Identitäten und DKIM-Tokens erstellen. Dadurch wird sichergestellt, dass Ihre komplette Umgebung mit CloudFormation definiert werden kann und ohne manuelle Eingriffe vollständig reproduzierbar ist.

Sobald Sie Ihre SES-Domain-Identität konfiguriert haben, sollten Sie auch lesen, wie Sie Ihren AWS SES-Zugangsschlüssel und Ihr SMTP-Passwort mithilfe von AWS CloudFormation im Parameterspeicher bereitstellen.

Wenn Sie Fragen haben, zögern Sie nicht, mich zu kontaktieren.

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.