Saltar al contenido

¿Cómo puedo rotar mis claves de acceso para un usuario de IAM de SMTP existente de SES?

3 minutos de lectura
0

Quiero rotar mis credenciales del Protocolo simple de transferencia de correo (SMTP) de Amazon Simple Email Service (Amazon SES) en AWS Identity and Access Management (IAM).

Resolución

Las claves de acceso que creas en la consola de IAM funcionan cuando te conectas al punto de enlace de Amazon SES. Sin embargo, las claves de acceso no funcionan con la interfaz de SMTP de SES. Esto se debe a que las claves tienen un formato diferente al que se requiere para las credenciales de SMTP.

Para que las claves de acceso funcionen con la interfaz de SMTP de SES, puedes crear nuevas credenciales de SMTP de SES. O bien, también puedes convertir la clave de acceso secreta existente en credenciales de SMTP.

Importante: Se recomienda crear nuevas credenciales de SMTP de SES en lugar de convertir la clave de acceso secreta existente en credenciales SMTP.

Creación de nuevas credenciales de SMTP de SES (práctica recomendada)

Utiliza la consola de Amazon SES para crear nuevas credenciales de SMTP de SES.

Nota: Una vez que obtengas las nuevas credenciales de SMTP de SES, puedes eliminar o desactivar el usuario de IAM si no lo necesitas.

Conversión de la clave de acceso secreta existente en credenciales de SMTP

Nota: Para completar estos pasos, debes usar la versión 3 o posterior de Python.

Sigue estos pasos:

  1. Actualiza la política del usuario de IAM existente para conceder permisos a ses:SendRawEmail.

  2. Pega el siguiente código de Python en un editor de texto y, a continuación, guarda el archivo como 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. Ejecuta el siguiente script de Python:

    python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P your-region
    

    Nota: Sustituye YOURKEYrrpg por tu clave de acceso secreta existente y your-region por la región de AWS en la que utilizas la contraseña de SMTP.
    En la salida del script, hay una nueva contraseña de SMTP que puedes usar con la interfaz de SMTP de SES.

  4. Guarda las nuevas credenciales de SMTP de forma segura en tu aplicación para autenticarte en los puntos de enlace de SMTP de SES.