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). ¿Cómo puedo crear un nombre de usuario y una contraseña compatibles con Amazon SES?
Resolución
Las claves de acceso que creas en la consola de IAM para un usuario de SMTP funcionan cuando el cliente se conecta al punto de enlace de la API de SES, pero no funcionan con la interfaz SMTP de Amazon SES. Las claves generadas en la consola de IAM tienen un formato diferente al requerido para las credenciales requeridas para los servidores SMTP de Amazon SES.
Se recomienda crear nuevas credenciales SMTP de Amazon SES en lugar de convertir una clave de acceso secreta existente.
Para configurar las credenciales de la interfaz SMTP de Amazon SES, realiza una de las siguientes acciones:
Crear nuevas credenciales SMTP de Amazon SES (recomendado)
1. Utiliza la consola de Amazon SES para crear nuevas credenciales SMTP de Amazon SES.
2. Tras obtener las nuevas credenciales, puedes eliminar las credenciales de Amazon SES existentes en IAM si no las necesitas.
Convierte tu clave de acceso secreta existente al formato SMTP de Amazon SES
Nota: Debes utilizar Python 3 o versiones posteriores con los siguientes pasos.
1. Actualiza la política del usuario de IAM existente para conceder permisos a ses:SendraWEmail como mínimo.
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. Para ejecutar el script de Python, introduce tu clave de acceso secreta existente. A continuación, introduce un espacio y la región de AWS en la que utilizas la contraseña SMTP. Utiliza el siguiente comando:
python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P us-east-1
Importante: Asegúrate de introducir tus credenciales y ejecutar este script en un equipo seguro y de confianza.
4. El script genera una nueva clave de acceso secreta que puedes utilizar con Amazon SES. Guarda las credenciales SMTP generadas en tu aplicación y, a continuación, utilízalas para conectarte a los puntos de enlace SMTP de SES.