179 lines
6.1 KiB
Bash
Executable File
179 lines
6.1 KiB
Bash
Executable File
#!/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 prüfen/erstellen..."
|
|
|
|
# Wir prüfen erst, ob es die Identity schon gibt (get-email-identity)
|
|
# Wenn NICHT (!), dann erstellen wir sie.
|
|
if ! aws sesv2 get-email-identity --email-identity ${DOMAIN_NAME} --region ${AWS_REGION} >/dev/null 2>&1; then
|
|
|
|
echo "Identity existiert nicht, wird erstellt..."
|
|
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 .
|
|
|
|
else
|
|
echo "Identity '${DOMAIN_NAME}' existiert bereits. Überspringe Erstellung."
|
|
fi
|
|
|
|
# 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}
|
|
|
|
# ------------------------
|
|
# Rule Set & Receipt Rule
|
|
# ------------------------
|
|
|
|
# 1. Rule Set prüfen/erstellen
|
|
echo "Überprüfe Rule Set 'bizmatch-ruleset'..."
|
|
# Korrekter Befehl ist 'list-receipt-rule-sets'
|
|
RULESET_EXISTS=$(aws ses list-receipt-rule-sets --region ${AWS_REGION} | jq -r '.RuleSets[] | select(.Name == "bizmatch-ruleset") | .Name')
|
|
|
|
if [ "$RULESET_EXISTS" != "bizmatch-ruleset" ]; 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
|
|
|
|
# 2. Receipt Rule prüfen/erstellen
|
|
echo "Überprüfe Receipt Rule '${RULE_NAME}'..."
|
|
|
|
# Wir prüfen, ob die Regel schon existiert. Wenn NICHT (!), erstellen wir sie.
|
|
if ! aws ses describe-receipt-rule --rule-set-name "bizmatch-ruleset" --rule-name "${RULE_NAME}" --region ${AWS_REGION} >/dev/null 2>&1; then
|
|
|
|
echo "Erstelle Receipt Rule '${RULE_NAME}'..."
|
|
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}
|
|
|
|
else
|
|
echo "Receipt Rule '${RULE_NAME}' existiert bereits. Überspringe Erstellung."
|
|
fi
|
|
|
|
# 3. Rule Set aktivieren (falls noch nicht aktiv)
|
|
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." |