#!/bin/bash # awsiam.sh - Erstellt einen IAM-Benutzer für Amazon SES mit SMTP-Zugangsdaten # Ü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 # Konfiguration AWS_REGION=${AWS_REGION:-"us-east-2"} USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username NODE_SCRIPT_PATH="./generate_ses_smtp_password.js" OUTPUT_FILE="${DOMAIN_NAME//./_}_ses_credentials.txt" # Sichere Dateibenennung # 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 "=== IAM-Benutzer für SES SMTP-Zugang erstellen ===" echo "Domain: $DOMAIN_NAME" echo "Region: $AWS_REGION" echo "IAM-Benutzername: $USER_NAME" # -------------------------- # IAM-User erstellen # -------------------------- echo "Erstelle IAM-User: $USER_NAME" aws iam create-user --user-name $USER_NAME # Benutzerdefinierte Policy für SES-Sendeberechtigungen 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 # 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) # Keys ausgeben und in Variablen speichern echo "Zugriffsschlüssel wurden erstellt. Bitte sicher aufbewahren:" echo "$KEY_OUTPUT" | jq . 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 $OUTPUT_FILE" cat > "$OUTPUT_FILE" << EOF DOMAIN_NAME: $DOMAIN_NAME SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com SMTP-Port: 587 (TLS) oder 465 (SSL) SMTP-Benutzername: $SMTP_USERNAME SMTP-Passwort: $SMTP_PASSWORD IAM-Benutzer: $USER_NAME Access Key ID: $ACCESS_KEY Secret Access Key: $SECRET_KEY EOF chmod 600 "$OUTPUT_FILE" # Nur für den Besitzer lesbar machen # 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" echo -e "\nHinweise:" echo "1. Die SMTP-Anmeldeinformationen wurden in $OUTPUT_FILE gespeichert." echo "2. Verwenden Sie diese SMTP-Anmeldeinformationen in Ihrer E-Mail-Anwendung oder Ihrem E-Mail-Server." echo "3. Der IAM-Benutzer hat nur die Berechtigung, E-Mails über SES zu senden."