Wie kann ich meine Zugangsschlüssel für einen bestehenden Amazon SES SMTP IAM-Benutzer rotieren?

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. Wie kann ich einen Benutzernamen und ein Passwort erstellen, die mit Amazon SES kompatibel sind?

Behebung

Zugriffsschlüssel, die Sie in der IAM-Konsole für einen SMTP-Benutzer erstellen, funktionieren, wenn der Kunde eine Verbindung zum SES-API-Endpunkt herstellt. Sie funktionieren jedoch nicht mit der Amazon SES-SMTP-Schnittstelle. Die in der IAM-Konsole generierten Schlüssel haben ein anderes Format als das Format als die für Amazon SES SMTP-Server erforderlichen Anmeldeinformationen.

Es hat sich bewährt, neue Amazon SES-SMTP-Anmeldeinformationen zu erstellen, anstatt einen vorhandenen geheimen Zugriffsschlüssel zu konvertieren. 

Gehen Sie wie folgt vor, um Anmeldeinformationen für die Amazon SES SMTP-Schnittstelle einzurichten:

Neue Amazon SES SMTP-Anmeldeinformationen erstellen (empfohlen)

1.Verwenden Sie die Amazon SES-Konsole, um neue Amazon SES-SMTP-Anmeldeinformationen zu erstellen.

2.Nachdem Sie die neuen Anmeldeinformationen erhalten haben, können Sie die vorhandenen Amazon SES-Anmeldeinformationen in IAM löschen, falls Sie sie nicht benötigen.

Konvertieren Sie Ihren vorhandenen geheimen Zugriffsschlüssel in das Amazon SES SMTP-Format

Hinweis: Sie müssen Python 3 oder neuere Versionen mit den folgenden Schritten ausführen.

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

2.Fügen Sie den folgenden Python-Code in einen Texteditor ein und speichern Sie 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.    Um das Python-Skript auszuführen, geben Sie Ihren vorhandenen geheimen Zugriffsschlüssel ein. Geben Sie dann ein Leerzeichen und die AWS-Region ein, in der Sie das SMTP-Passwort verwenden. Verwenden Sie den folgenden Befehl:

python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P us-east-1

Wichtig: Geben Sie unbedingt Ihre Anmeldeinformationen ein und führen Sie dieses Skript auf einer sicheren und vertrauenswürdigen Maschine aus.

4.    Das Skript gibt einen neuen geheimen Zugriffsschlüssel aus, den Sie mit Amazon SES verwenden können. Speichern Sie die generierten SMTP-Anmeldeinformationen in Ihrer Anwendung und verwenden Sie die Anmeldeinformationen dann, um eine Verbindung zu SES-SMTP-Endpunkten herzustellen.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren