#!/bin/bash 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 # Skript mit Fehlercode beenden fi AWS_REGION="us-east-2" EMAIL_PREFIX="emails/" S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}') # Ersetzen Sie alle Punkte durch Bindestriche und erstellen Sie den RULE_NAME RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3" # ------------------------ # S3 Bucket erstellen # ------------------------ echo "S3 Bucket erstellen..." aws s3api create-bucket \ --bucket ${S3_BUCKET_NAME} \ --region ${AWS_REGION} \ --create-bucket-configuration LocationConstraint=${AWS_REGION} # Öffentlichen Zugriff blockieren aws s3api put-public-access-block \ --bucket ${S3_BUCKET_NAME} \ --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" # Lebenszyklus-Konfiguration hinzufügen aws s3api put-bucket-lifecycle-configuration \ --bucket ${S3_BUCKET_NAME} \ --lifecycle-configuration '{ "Rules": [ { "ID": "DeleteOldEmails", "Status": "Enabled", "Expiration": { "Days": 90 }, "Filter": { "Prefix": "" } } ] }' echo "S3 Bucket Policy hinzufügen..." aws s3api put-bucket-policy \ --bucket ${S3_BUCKET_NAME} \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::'${S3_BUCKET_NAME}'", "arn:aws:s3:::'${S3_BUCKET_NAME}'/*" ] } ] }' # ------------------------ # SES Domain-Identität erstellen # ------------------------ echo "SES Domain-Identität erstellen..." aws sesv2 create-email-identity \ --email-identity ${DOMAIN_NAME} \ --region ${AWS_REGION} # DKIM-Signierung aktivieren aws sesv2 put-email-identity-dkim-attributes \ --email-identity ${DOMAIN_NAME} \ --signing-enabled \ --region ${AWS_REGION} # 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} # 3. Receipt Rule Set erstellen echo "Receipt Rule for bizmatch ruleset 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": "emails/" } }], "TlsPolicy": "Require" }' # -------------------------- # IAM-User erstellen # ------------------------- USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username NODE_SCRIPT_PATH="./generate_ses_smtp_password.js" # Prüfen, ob das Node.js-Script existiert if [ ! -f "$NODE_SCRIPT_PATH" ]; then echo "Fehler: Das Node.js-Script '$NODE_SCRIPT_PATH' wurde nicht gefunden." echo "Bitte stelle sicher, dass das Script im angegebenen Pfad existiert." exit 1 fi echo "Erstelle IAM-User: $USER_NAME" aws iam create-user --user-name $USER_NAME # 2. Policy-Dokument für SES-Vollzugriff erstellen POLICY_NAME="${USER_NAME}-SendRawEmailPolicy" POLICY_DOCUMENT='{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }' echo "Erstelle benutzerdefinierte Policy für SES SendRawEmail" POLICY_ARN=$(aws iam create-policy \ --policy-name $POLICY_NAME \ --policy-document "$POLICY_DOCUMENT" \ --query 'Policy.Arn' \ --output text) echo "Hänge Policy an: $POLICY_ARN" aws iam attach-user-policy \ --user-name $USER_NAME \ --policy-arn $POLICY_ARN # 4. Access Key und Secret Key für den User erstellen echo "Erstelle Access Key für den User: $USER_NAME" KEY_OUTPUT=$(aws iam create-access-key --user-name $USER_NAME) # 5. Keys ausgeben (am besten in eine sichere Datei speichern) echo "Zugriffsschlüssel wurden erstellt. Bitte sicher aufbewahren:" echo "$KEY_OUTPUT" | jq . # Optional: Keys in separaten Variablen speichern für weitere Verwendung ACCESS_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.AccessKeyId) SECRET_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.SecretAccessKey) echo "ACCESS_KEY: $ACCESS_KEY" echo "SECRET_KEY: $SECRET_KEY" echo "WICHTIG: Speichere den Secret Key jetzt, da er später nicht mehr abgerufen werden kann!" # -------------------------- # SMTP Passwort generieren # -------------------------- echo -e "\nGeneriere SMTP-Passwort für Region $AWS_REGION..." # Führe das Node.js-Script aus, um das SMTP-Passwort zu generieren SMTP_PASSWORD=$(node "$NODE_SCRIPT_PATH" "$SECRET_KEY" "$AWS_REGION") # Prüfen, ob die Ausführung erfolgreich war if [ $? -ne 0 ]; then echo "Fehler bei der Generierung des SMTP-Passworts. Bitte überprüfe das Node.js-Script." exit 1 fi # SMTP-Benutzername ist der Access Key SMTP_USERNAME="$ACCESS_KEY" # Ausgabe der SMTP-Anmeldeinformationen echo -e "\nSMTP-Anmeldeinformationen für Amazon SES in Region $AWS_REGION:" echo "--------------------------------------------------------------" echo "SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com" echo "SMTP-Port: 587 (TLS) oder 465 (SSL)" echo "SMTP-Benutzername: $SMTP_USERNAME" echo "SMTP-Passwort: $SMTP_PASSWORD" # Speichere die Anmeldeinformationen in einer Datei echo -e "\nSpeichere SMTP-Anmeldeinformationen in ses_smtp_credentials.txt" cat > "ses_smtp_credentials.txt" << EOF SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com SMTP-Port: 587 (TLS) oder 465 (SSL) SMTP-Benutzername: $SMTP_USERNAME SMTP-Passwort: $SMTP_PASSWORD EOF # Hinweise für die weitere Konfiguration echo -e "\nHinweise:" echo "1. Stellen Sie sicher, dass Ihre Domains in Amazon SES verifiziert sind." echo "2. Bei Bedarf beantragen Sie die Aufhebung der SES-Sandbox-Einschränkungen." echo "3. Für SMTP-Anwendungen verwenden Sie die SMTP-Anmeldeinformationen (nicht die IAM-Zugangsdaten)." # Format für .env-Datei echo -e "\nFür .env-Datei:" echo "AWS_SES_SMTP_USERNAME=$SMTP_USERNAME" echo "AWS_SES_SMTP_PASSWORD=$SMTP_PASSWORD" echo "AWS_SES_SMTP_HOST=email-smtp.$AWS_REGION.amazonaws.com" echo "AWS_SES_SMTP_PORT=587"