Passer au contenu

Comment puis-je alterner mes clés d'accès pour un utilisateur IAM SMTP SES existant ?

Lecture de 3 minute(s)
0

Je souhaite alterner mes informations d'identification Simple Mail Transfer Protocol (SMTP) Amazon Simple Email Service (Amazon SES) dans Gestion des identités et des accès AWS (AWS IAM).

Résolution

Les clés d'accès que vous créez dans la console IAM fonctionnent lorsque vous vous connectez au point de terminaison Amazon SES. Cependant, les clés d'accès ne fonctionnent pas avec l'interface SMTP de SES. Cela est dû au fait que les clés présentent un format différent de celui requis pour les informations d'identification SMTP.

Pour que les clés d'accès fonctionnent avec l'interface SMTP de SES, vous pouvez créer de nouvelles informations d'identification SMTP SES. Vous pouvez également convertir la clé d'accès secrète existante en informations d'identification SMTP.

Important : Il est recommandé de créer de nouvelles informations d'identification SMTP SES plutôt que de convertir la clé d'accès secrète existante en informations d'identification SMTP.

Créer de nouvelles informations d'identification SMTP SES (bonne pratique)

Utilisez la console Amazon SES pour créer de nouvelles informations d'identification SMTP SES.

Remarque : Après avoir obtenu les nouvelles informations d'identification SMTP SES, vous pouvez supprimer ou désactiver l'utilisateur IAM si vous n'en avez pas besoin.

Convertir votre clé d'accès secrète existante en informations d'identification SMTP

Remarque : Pour effectuer ces étapes, vous devez utiliser Python version 3 ou ultérieure.

Procédez comme suit :

  1. Mettez à jour la politique de l'utilisateur IAM existant pour accorder l’autorisation pour ses:SendRawEmail.

  2. Collez le code Python suivant dans un éditeur de texte, puis enregistrez le fichier sous le nom 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. Exécutez le script Python suivant :

    python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P your-region
    

    Remarque : Remplacez YOURKEYrrpg par votre clé d'accès secrète existante, et your-region par la région AWS dans laquelle vous utilisez le mot de passe SMTP.
    La sortie des scripts contient un nouveau mot de passe SMTP que vous pouvez utiliser avec l'interface SMTP de SES.

  4. Enregistrez les nouvelles informations d'identification SMTP en toute sécurité dans votre application pour vous authentifier auprès des points de terminaison SMTP SES.