new aws scripts
This commit is contained in:
parent
212341744c
commit
fc1d072404
|
|
@ -12,7 +12,7 @@ S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||||
RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3"
|
RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3"
|
||||||
|
|
||||||
# ------------------------
|
# ------------------------
|
||||||
# 1. S3 Bucket erstellen
|
# S3 Bucket erstellen
|
||||||
# ------------------------
|
# ------------------------
|
||||||
echo "S3 Bucket erstellen..."
|
echo "S3 Bucket erstellen..."
|
||||||
aws s3api create-bucket \
|
aws s3api create-bucket \
|
||||||
|
|
@ -68,7 +68,7 @@ aws s3api put-bucket-policy \
|
||||||
}'
|
}'
|
||||||
|
|
||||||
# ------------------------
|
# ------------------------
|
||||||
# 2. SES Domain-Identität erstellen
|
# SES Domain-Identität erstellen
|
||||||
# ------------------------
|
# ------------------------
|
||||||
echo "SES Domain-Identität erstellen..."
|
echo "SES Domain-Identität erstellen..."
|
||||||
aws sesv2 create-email-identity \
|
aws sesv2 create-email-identity \
|
||||||
|
|
@ -88,9 +88,6 @@ aws sesv2 put-email-identity-mail-from-attributes \
|
||||||
--behavior-on-mx-failure USE_DEFAULT_VALUE \
|
--behavior-on-mx-failure USE_DEFAULT_VALUE \
|
||||||
--region ${AWS_REGION}
|
--region ${AWS_REGION}
|
||||||
|
|
||||||
# --------------------------
|
|
||||||
# Receive Emails
|
|
||||||
# -------------------------
|
|
||||||
# 3. Receipt Rule Set erstellen
|
# 3. Receipt Rule Set erstellen
|
||||||
echo "Receipt Rule for bizmatch ruleset erstellen..."
|
echo "Receipt Rule for bizmatch ruleset erstellen..."
|
||||||
|
|
||||||
|
|
@ -107,31 +104,46 @@ aws ses create-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{
|
||||||
"TlsPolicy": "Require"
|
"TlsPolicy": "Require"
|
||||||
}'
|
}'
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------
|
||||||
|
# IAM-User erstellen
|
||||||
|
# -------------------------
|
||||||
USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username
|
USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username
|
||||||
|
|
||||||
# 1. IAM-User erstellen
|
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"
|
echo "Erstelle IAM-User: $USER_NAME"
|
||||||
aws iam create-user --user-name $USER_NAME
|
aws iam create-user --user-name $USER_NAME
|
||||||
|
|
||||||
# 2. Policy-Dokument für SES-Vollzugriff erstellen
|
# 2. Policy-Dokument für SES-Vollzugriff erstellen
|
||||||
|
POLICY_NAME="${USER_NAME}-SendRawEmailPolicy"
|
||||||
POLICY_DOCUMENT='{
|
POLICY_DOCUMENT='{
|
||||||
"Version": "2012-10-17",
|
"Version": "2012-10-17",
|
||||||
"Statement": [
|
"Statement": [
|
||||||
{
|
{
|
||||||
"Effect": "Allow",
|
"Effect": "Allow",
|
||||||
"Action": [
|
"Action": "ses:SendRawEmail",
|
||||||
"ses:*"
|
|
||||||
],
|
|
||||||
"Resource": "*"
|
"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)
|
||||||
|
|
||||||
# 3. Option 1: Managed Policy AmazonSESFullAccess anhängen
|
echo "Hänge Policy an: $POLICY_ARN"
|
||||||
echo "Hänge AmazonSESFullAccess Policy an"
|
|
||||||
aws iam attach-user-policy \
|
aws iam attach-user-policy \
|
||||||
--user-name $USER_NAME \
|
--user-name $USER_NAME \
|
||||||
--policy-arn arn:aws:iam::aws:policy/AmazonSESFullAccess
|
--policy-arn $POLICY_ARN
|
||||||
|
|
||||||
# 4. Access Key und Secret Key für den User erstellen
|
# 4. Access Key und Secret Key für den User erstellen
|
||||||
echo "Erstelle Access Key für den User: $USER_NAME"
|
echo "Erstelle Access Key für den User: $USER_NAME"
|
||||||
|
|
@ -149,3 +161,49 @@ echo "ACCESS_KEY: $ACCESS_KEY"
|
||||||
echo "SECRET_KEY: $SECRET_KEY"
|
echo "SECRET_KEY: $SECRET_KEY"
|
||||||
|
|
||||||
echo "WICHTIG: Speichere den Secret Key jetzt, da er später nicht mehr abgerufen werden kann!"
|
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"
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/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."
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# awss3.sh - Erstellt einen S3-Bucket für Amazon SES E-Mail-Speicherung
|
||||||
|
|
||||||
|
# Ü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"}
|
||||||
|
EMAIL_PREFIX=${EMAIL_PREFIX:-"emails/"}
|
||||||
|
S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||||
|
|
||||||
|
echo "=== S3 Bucket Configuration für $DOMAIN_NAME ==="
|
||||||
|
echo "Region: $AWS_REGION"
|
||||||
|
echo "Bucket-Name: $S3_BUCKET_NAME"
|
||||||
|
echo "E-Mail-Präfix: $EMAIL_PREFIX"
|
||||||
|
|
||||||
|
# ------------------------
|
||||||
|
# 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
|
||||||
|
echo "Ö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
|
||||||
|
echo "Lebenszyklus-Konfiguration hinzufügen (E-Mails werden nach 90 Tagen gelöscht)..."
|
||||||
|
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 für SES-Zugriff..."
|
||||||
|
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}'/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}'
|
||||||
|
|
||||||
|
echo "S3 Bucket $S3_BUCKET_NAME wurde erfolgreich erstellt und konfiguriert."
|
||||||
|
echo "Bucket-ARN: arn:aws:s3:::$S3_BUCKET_NAME"
|
||||||
|
|
||||||
|
# Exportiere Variablen für andere Scripte
|
||||||
|
echo
|
||||||
|
echo "Für die Verwendung in den anderen Scripten setzen Sie:"
|
||||||
|
echo "export S3_BUCKET_NAME=$S3_BUCKET_NAME"
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
#!/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:-"emails/"}
|
||||||
|
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
|
||||||
|
|
||||||
|
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."
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtaining Amazon SES SMTP credentials by converting existing AWS credentials
|
||||||
|
*
|
||||||
|
* Script based on:
|
||||||
|
* https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
const crypto = require('crypto');
|
||||||
|
|
||||||
|
const SMTP_REGIONS = [
|
||||||
|
'us-east-2', // US East (Ohio)
|
||||||
|
'us-east-1', // US East (N. Virginia)
|
||||||
|
'us-west-2', // US West (Oregon)
|
||||||
|
'ap-south-1', // Asia Pacific (Mumbai)
|
||||||
|
'ap-northeast-2', // Asia Pacific (Seoul)
|
||||||
|
'ap-southeast-1', // Asia Pacific (Singapore)
|
||||||
|
'ap-southeast-2', // Asia Pacific (Sydney)
|
||||||
|
'ap-northeast-1', // Asia Pacific (Tokyo)
|
||||||
|
'ca-central-1', // Canada (Central)
|
||||||
|
'eu-central-1', // Europe (Frankfurt)
|
||||||
|
'eu-west-1', // Europe (Ireland)
|
||||||
|
'eu-west-2', // Europe (London)
|
||||||
|
'sa-east-1', // South America (Sao Paulo)
|
||||||
|
'us-gov-west-1', // AWS GovCloud (US)
|
||||||
|
];
|
||||||
|
|
||||||
|
// These values are required to calculate the signature. Do not change them.
|
||||||
|
const DATE = '11111111';
|
||||||
|
const SERVICE = 'ses';
|
||||||
|
const MESSAGE = 'SendRawEmail';
|
||||||
|
const TERMINAL = 'aws4_request';
|
||||||
|
const VERSION = [0x04];
|
||||||
|
|
||||||
|
function sign(key, msg) {
|
||||||
|
return crypto.createHmac('sha256', key).update(msg).digest();
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculate_key(secret_access_key, region) {
|
||||||
|
if (!SMTP_REGIONS.includes(region)) {
|
||||||
|
throw new Error(`The ${region} Region doesn't have an SMTP endpoint`);
|
||||||
|
}
|
||||||
|
|
||||||
|
let signature;
|
||||||
|
|
||||||
|
signature = sign(`AWS4${secret_access_key}`, DATE);
|
||||||
|
signature = sign(signature, region);
|
||||||
|
signature = sign(signature, SERVICE);
|
||||||
|
signature = sign(signature, TERMINAL);
|
||||||
|
signature = sign(signature, MESSAGE);
|
||||||
|
|
||||||
|
const signature_and_version = Buffer.concat([
|
||||||
|
Buffer.from(VERSION),
|
||||||
|
signature,
|
||||||
|
]);
|
||||||
|
|
||||||
|
const smtp_password = Buffer.from(signature_and_version).toString('base64');
|
||||||
|
|
||||||
|
return smtp_password;
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
const [secret, region] = process.argv.slice(2);
|
||||||
|
|
||||||
|
console.log(calculate_key(secret, region));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (require.main === module) {
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# setup_email_domain.sh - Ein Wrapper-Script, das alle drei Skripte in der richtigen Reihenfolge ausführt
|
||||||
|
|
||||||
|
# Überprüfen, ob die Domain-Variable gesetzt ist
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Fehler: Keine Domain angegeben."
|
||||||
|
echo "Verwendung: ./setup_email_domain.sh domain.de [region]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOMAIN_NAME=$1
|
||||||
|
AWS_REGION=${2:-"us-east-2"}
|
||||||
|
|
||||||
|
# Variablen exportieren
|
||||||
|
export DOMAIN_NAME
|
||||||
|
export AWS_REGION
|
||||||
|
|
||||||
|
echo "=== AWS E-Mail-Infrastruktur für $DOMAIN_NAME einrichten ==="
|
||||||
|
echo "AWS-Region: $AWS_REGION"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Skripte nacheinander ausführen
|
||||||
|
echo "1. S3-Bucket erstellen..."
|
||||||
|
./awss3.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "2. SES-Konfiguration einrichten..."
|
||||||
|
export S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||||
|
./awsses.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "3. IAM-Benutzer und SMTP-Zugangsdaten erstellen..."
|
||||||
|
./awsiam.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "=== Setup abgeschlossen ==="
|
||||||
|
echo "Alle Schritte wurden abgeschlossen. Bitte überprüfen Sie die Ausgaben der einzelnen Skripte."
|
||||||
|
echo "Vergessen Sie nicht, die benötigten DNS-Einträge für Ihre Domain zu setzen, um die SES-Verifizierung abzuschließen."
|
||||||
Loading…
Reference in New Issue