#!/bin/bash # awsses.sh - Konfiguriert Amazon SES für eine Domain und erstellt eine Receipt Rule # Überprüfen, ob die Domain-Variable gesetzt ist if [ -z "$DOMAIN_NAME" ]; then echo "Fehler: DOMAIN_NAME ist nicht gesetzt." echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'" exit 1 fi # Überprüfen, ob S3_BUCKET_NAME gesetzt ist if [ -z "$S3_BUCKET_NAME" ]; then echo "Warnung: S3_BUCKET_NAME ist nicht gesetzt." echo "Wird automatisch aus DOMAIN_NAME generiert, verwenden Sie idealerweise zuerst awss3.sh." S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}') echo "Generierter Bucket-Name: $S3_BUCKET_NAME" fi # Konfiguration AWS_REGION=${AWS_REGION:-"us-east-2"} EMAIL_PREFIX=${EMAIL_PREFIX:-""} RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3" echo "=== SES Konfiguration für $DOMAIN_NAME ===" echo "Region: $AWS_REGION" echo "S3 Bucket: $S3_BUCKET_NAME" echo "Receipt Rule Name: $RULE_NAME" # ------------------------ # SES Domain-Identität erstellen # ------------------------ echo "SES Domain-Identität erstellen..." IDENTITY_RESULT=$(aws sesv2 create-email-identity \ --email-identity ${DOMAIN_NAME} \ --region ${AWS_REGION}) echo "Identity erstellt. Überprüfen Sie die DNS-Einträge für die Domain-Verifizierung." echo "$IDENTITY_RESULT" | jq . # DKIM-Signierung aktivieren echo "DKIM-Signierung aktivieren..." aws sesv2 put-email-identity-dkim-attributes \ --email-identity ${DOMAIN_NAME} \ --signing-enabled \ --region ${AWS_REGION} # Mail-From-Domain konfigurieren echo "Mail-From-Domain konfigurieren..." aws sesv2 put-email-identity-mail-from-attributes \ --email-identity ${DOMAIN_NAME} \ --mail-from-domain "mail.${DOMAIN_NAME}" \ --behavior-on-mx-failure USE_DEFAULT_VALUE \ --region ${AWS_REGION} # Überprüfen, ob der Rule Set existiert, sonst erstellen echo "Überprüfe oder erstelle Receipt Rule Set..." RULESET_EXISTS=$(aws ses describe-receipt-rule-sets --region ${AWS_REGION} | jq -r '.RuleSets[] | select(.Name == "bizmatch-ruleset") | .Name') if [ -z "$RULESET_EXISTS" ]; then echo "Receipt Rule Set 'bizmatch-ruleset' existiert nicht, wird erstellt..." aws ses create-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION} else echo "Receipt Rule Set 'bizmatch-ruleset' existiert bereits." fi # Receipt Rule erstellen echo "Receipt Rule für E-Mail-Empfang erstellen..." aws ses create-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{ "Name": "'"${RULE_NAME}"'", "Enabled": true, "ScanEnabled": true, "Actions": [{ "S3Action": { "BucketName": "'"${S3_BUCKET_NAME}"'", "ObjectKeyPrefix": "'"${EMAIL_PREFIX}"'" } }], "TlsPolicy": "Require", "Recipients": ["'"${DOMAIN_NAME}"'"] }' --region ${AWS_REGION} # Prüfen, ob der Rule Set aktiv ist ACTIVE_RULESET=$(aws ses describe-active-receipt-rule-set --region ${AWS_REGION} | jq -r '.Metadata.Name') if [ "$ACTIVE_RULESET" != "bizmatch-ruleset" ]; then echo "Aktiviere Rule Set 'bizmatch-ruleset'..." aws ses set-active-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION} else echo "Rule Set 'bizmatch-ruleset' ist bereits aktiv." fi # ------------------------ # Lambda-Funktion mit SES verknüpfen # ------------------------ echo "Verknüpfe Lambda-Funktion 'ses-to-sqs' mit SES..." # Lambda ARN ermitteln LAMBDA_ARN=$(aws lambda get-function \ --function-name ses-to-sqs \ --region ${AWS_REGION} \ --query 'Configuration.FunctionArn' \ --output text) if [ -z "$LAMBDA_ARN" ]; then echo "FEHLER: Lambda-Funktion 'ses-to-sqs' nicht gefunden!" echo "Bitte zuerst Lambda-Funktion deployen." exit 1 fi echo "Lambda ARN: $LAMBDA_ARN" # SES Permission für Lambda hinzufügen (falls noch nicht vorhanden) echo "Füge SES-Berechtigung zur Lambda-Funktion hinzu..." aws lambda add-permission \ --function-name ses-to-sqs \ --statement-id "AllowSESInvoke-${DOMAIN_NAME//./}" \ --action "lambda:InvokeFunction" \ --principal ses.amazonaws.com \ --source-account $(aws sts get-caller-identity --query Account --output text) \ --region ${AWS_REGION} 2>/dev/null || echo "Permission bereits vorhanden" # Receipt Rule UPDATE: Lambda Action hinzufügen echo "Aktualisiere Receipt Rule mit Lambda Action..." aws ses update-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{ "Name": "'"${RULE_NAME}"'", "Enabled": true, "ScanEnabled": true, "Actions": [ { "S3Action": { "BucketName": "'"${S3_BUCKET_NAME}"'", "ObjectKeyPrefix": "'"${EMAIL_PREFIX}"'" } }, { "LambdaAction": { "FunctionArn": "'"${LAMBDA_ARN}"'", "InvocationType": "Event" } } ], "TlsPolicy": "Require", "Recipients": ["'"${DOMAIN_NAME}"'"] }' --region ${AWS_REGION} echo "✅ Lambda-Funktion erfolgreich mit SES verknüpft!" echo "SES-Konfiguration für $DOMAIN_NAME abgeschlossen." echo echo "WICHTIG: Überprüfen Sie die Ausgabe oben für DNS-Einträge, die Sie bei Ihrem DNS-Provider setzen müssen:" echo "1. DKIM-Einträge (3 CNAME-Einträge)" echo "2. MAIL FROM MX und TXT-Einträge" echo "3. SPF-Eintrag (TXT): v=spf1 include:amazonses.com ~all" echo echo "Nach dem Setzen der DNS-Einträge kann es bis zu 72 Stunden dauern, bis die Verifizierung abgeschlossen ist."