Ir para o conteúdo

Como faço para alternar minhas chaves de acesso para um usuário do IAM existente do SES SMTP?

3 minuto de leitura
0

Quero alternar minhas credenciais do Simple Mail Transfer Protocol (SMTP) do Amazon Simple Email Service (Amazon SES) no AWS Identity and Access Management (AWS IAM).

Resolução

As chaves de acesso que você cria no console do IAM funcionam quando você se conecta ao endpoint do Amazon SES. No entanto, as chaves de acesso não funcionam com a interface SMTP do SES. Isso ocorre porque as chaves têm um formato diferente do exigido para as credenciais SMTP.

Para fazer com que as chaves de acesso funcionem com a interface SMTP do SES, é possível criar novas credenciais SMTP do SES. Ou também é possível converter a chave de acesso secreta existente em credenciais SMTP.

Importante: é uma prática recomendada criar novas credenciais SMTP do SES em vez de converter a chave de acesso secreta existente em credenciais SMTP.

Crie novas credenciais SES SMTP (prática recomendada)

Use o console do Amazon SES para criar novas credenciais SMTP do SES.

Observação: depois de obter as novas credenciais SMTP do SES, é possível remover ou desativar o usuário do IAM se não precisar dele.

Converta sua chave de acesso secreta existente em credenciais SMTP

Observação: para concluir essas etapas, você deve usar o Python versão 3 ou posterior.

Conclua as etapas a seguir:

  1. Atualize a política existente do usuário do IAM para conceder permissão para ses:SendRawEmail.

  2. Cole o código Python a seguir em um editor de texto e salve o arquivo 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. Execute o seguinte script em Python:

    python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P your-region
    

    Observação: substitua YOURKEYrrpg pela sua chave de acesso secreta existente e your-region pela região da AWS em que você usa a senha SMTP.
    Na saída do script, há uma nova senha SMTP que é possível usar com a interface SMTP do SES.

  4. Salve as novas credenciais SMTP com segurança em sua aplicação para autenticar-se nos endpoints SMTP do SES.