Direkt zum Inhalt

Wie rotiere ich meine Zugangsschlüssel für einen vorhandenen SES SMTP IAM-Benutzer?

Lesedauer: 3 Minute
0

Ich möchte meine Simple Mail Transfer Protocol-Anmeldeinformationen (SMTP) für Amazon Simple Email Service (Amazon SES) in AWS Identity and Access Management (IAM) rotieren.

Lösung

Die Zugriffsschlüssel, die du in der IAM-Konsole erstellst, funktionieren, wenn du eine Verbindung zum Amazon SES-Endpunkt herstellst. Die Zugriffsschlüssel funktionieren jedoch nicht mit der SES-SMTP-Schnittstelle. Dies liegt daran, dass die Schlüssel ein anderes Format haben als das, was für die SMTP-Anmeldeinformationen erforderlich ist.

Damit die Zugriffsschlüssel mit der SES-SMTP-Schnittstelle funktionieren, kannst du neue SES-SMTP-Anmeldeinformationen erstellen. Du kannst den vorhandenen geheimen Zugriffsschlüssel auch in SMTP-Anmeldeinformationen konvertieren.

Wichtig: Es hat sich bewährt, neue SES-SMTP-Anmeldeinformationen zu erstellen, anstatt den vorhandenen geheimen Zugriffsschlüssel in SMTP-Anmeldeinformationen umzuwandeln.

Neue SES-SMTP-Anmeldeinformationen erstellen (Bewährte Methoden)

Verwende die Amazon SES-Konsole, um neue SES-SMTP-Anmeldeinformationen zu erstellen.

Hinweis: Nachdem du die neuen SES-SMTP-Anmeldeinformationen erhalten hast, kannst du den IAM-Benutzer entfernen oder deaktivieren, wenn du den Benutzer nicht benötigst.

Vorhandenen geheimen Zugriffsschlüssel in SMTP-Anmeldeinformationen umwandeln

Hinweis: Um diese Schritte auszuführen, musst du Python Version 3 oder höher verwenden.

Führe die folgenden Schritte aus:

  1. Aktualisiere die Richtlinie des vorhandenen IAM-Benutzers, um die permission for ses:SendRawEmail zu gewähren.

  2. Füge den folgenden Python-Code in einen Texteditor ein und speichere die Datei dann unter dem Namen seskey.py.

    #!/usr/bin/env python3
    import hmac
    import hashlib
    import base64
    import argparse
    
    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.
    DATE = "11111111"
    SERVICE = "ses"
    MESSAGE = "SendRawEmail"
    TERMINAL = "aws4_request"
    VERSION = 0x04
    
    
    def sign(key, msg):
        return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()
    
    
    def calculate_key(secret_access_key, region):
        if region not in SMTP_REGIONS:
            raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")
    
        signature = sign(("AWS4" + secret_access_key).encode('utf-8'), DATE)
        signature = sign(signature, region)
        signature = sign(signature, SERVICE)
        signature = sign(signature, TERMINAL)
        signature = sign(signature, MESSAGE)
        signature_and_version = bytes([VERSION]) + signature
        smtp_password = base64.b64encode(signature_and_version)
        return smtp_password.decode('utf-8')
    
    
    def main():
        parser = argparse.ArgumentParser(
            description='Convert a Secret Access Key for an IAM user to an SMTP password.')
        parser.add_argument(
            'secret', help='The Secret Access Key to convert.')
        parser.add_argument(
            'region',
            help='The AWS Region where the SMTP password will be used.',
            choices=SMTP_REGIONS)
        args = parser.parse_args()
        print(calculate_key(args.secret, args.region))
    
    
    if __name__ == '__main__':
        main()
  3. Führe das folgende Python-Skript aus:

    python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P your-region
    

    Hinweis: Ersetze YOURKEYrrpg durch den vorhandenen geheimen Zugriffsschlüssel und your-region durch die AWS-Region, in der du das SMTP-Passwort verwendest.
    In der Skriptausgabe gibt es ein neues SMTP-Passwort, das du mit der SES-SMTP-Schnittstelle verwenden kannst.

  4. Speichere die neuen SMTP-Anmeldeinformationen sicher in der Anwendung, um sich bei den SES-SMTP-Endpunkten zu authentifizieren.