Obtenção de credenciais SMTP do Amazon SES - Amazon Simple Email Service

Obtenção de credenciais SMTP do Amazon SES

Você precisa de um nome de usuário e senha de SMTP do Amazon SES para acessar a interface SMTP do Amazon SES.

As credenciais que você usa para enviar e-mails por meio da interface SMTP do Amazon SES são exclusivas de cada região da AWS. Se usar a interface SMTP do Amazon SES para enviar e-mails em mais de uma região, você deve gerar um conjunto de credenciais SMTP para cada região que pretende usar.

Sua senha SMTP é diferente da sua chave de acesso secreta da AWS. Para obter mais informações sobre credenciais, consulte Tipos de credenciais do Amazon SES.

nota

Os endpoints SMTP não estão disponíveis atualmente na África (Cidade do Cabo), Europa (Milão), Oriente Médio (Bahrein).

Obtenção de credenciais SMTP do Amazon SES usando o console do Amazon SES

Quando usa o fluxo de trabalho do SES abaixo para gerar credenciais de SMTP usando o console, você está usando um console do IAM para criar um usuário do IAM com as políticas adequadas para chamar o Amazon SES e fornecer as credenciais SMTP associadas a esse usuário.

Requisito

Um usuário do Amazon SES pode criar credenciais SMTP do Amazon SES, mas a política de usuário do IAM deve conceder a ele permissão para usar o IAM em si, pois as credenciais SMTP do Amazon SES são criadas usando o IAM. Sua política do IAM deve permitir que você execute as seguintes ações do IAM: iam:ListUsers, iam:CreateUser, iam:CreateAccessKey e iam:PutUserPolicy. Se tentar criar as credenciais SMTP do Amazon SES usando o console e o usuário do IAM não tiver essas permissões, você verá um erro que diz que sua conta é "not authorized to perform iam:ListUsers" (não autorizada a realizar iam:ListUsers).

Para criar suas credenciais SMTP

  1. Faça login no AWS Management Console e abra o console do Amazon SES em https://console.aws.amazon.com/ses/.

  2. No painel de navegação, selecione Account dashboard (Painel da conta).

  3. No contêiner Simple Mail Transfer Protocol (SMTP) settings (Configurações do Simple Mail Transfer Protocol, SMTP), escolha Create SMTP credentials (Criar credenciais de SMTP) no canto inferior esquerdo - o console do IAM será aberto.

  4. Para Criar usuário para SMTP, digite um nome para seu usuário SMTP no campo IAM User Name (Nome de usuário IAM). Como alternativa, você pode usar o valor padrão que é fornecido nesse campo. Ao terminar, escolha Create (Criar) no canto inferior direito.

  5. Expanda Show User SMTP Security Credentials (Mostrar credenciais de segurança de SMTP do usuário) - suas credenciais de SMTP serão mostradas na tela.

  6. Baixe essas credenciais escolhendo Download Credentials (Baixar credenciais) ou copie e armazene-as em local seguro, porque você não poderá visualizar nem salvar as credenciais depois que fechar esta caixa de diálogo.

  7. Escolha Close Window.

É possível exibir uma lista de credenciais SMTP que você criou usando esse procedimento no console do IAM em Access management (Gerenciamento de acesso) e escolhendo Users (Usuários). Depois, use a barra de pesquisa para localizar todos os usuários aos quais você atribuiu credenciais SMTP.

Também é possível usar o console do IAM para excluir usuários SMTP existentes. Para saber mais sobre como excluir usuários, consulte Gerenciar usuários do IAM no Guia de conceitos básicos do IAM.

Se pretender alterar a senha SMTP, exclua o usuário SMTP existente no console do IAM. Depois, para gerar um novo conjunto de credenciais SMTP, realize os procedimentos anteriores.

Obtenção de credenciais SMTP do Amazon SES convertendo as credenciais existentes da AWS

Se tiver um usuário do IAM que foi configurado usando a interface do IAM, você pode derivar as credenciais SMTP do Amazon SES do usuário das credenciais dela da AWS.

Importante

Não use credenciais temporárias da AWS para obter credenciais SMTP. A interface SMTP do Amazon SES não é compatível com credenciais SMTP que foram geradas a partir de credenciais de segurança temporárias.

Para que o usuário do IAM possa enviar e-mails usando a interface SMTP do Amazon SES, faça o seguinte:

  • Derive as credenciais SMTP do usuário das credenciais dele da AWS usando o algoritmo fornecido nesta seção. Como você está partindo das credenciais da AWS, o nome de usuário SMTP é o mesmo que o ID da chave de acesso da AWS, portanto, você só precisa gerar a senha SMTP.

  • Aplique a política a seguir ao usuário do IAM:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }

    Para obter mais informações sobre como usar o Amazon SES com o IAM, consulte Gerenciamento de identidade e acesso no Amazon SES.

nota

Embora você possa gerar credenciais SMTP do Amazon SES para qualquer usuário do IAM, recomendamos que você crie um usuário do IAM separado quando gerar suas credenciais SMTP. Para obter mais informações sobre por que é uma prática recomendada criar usuários para fins específicos, consulte Melhores práticas do IAM.

O pseudocódigo a seguir mostra o algoritmo que converte uma chave de acesso secreta da AWS em uma senha SMTP do Amazon SES.

// Modify this variable to include your AWS secret access key key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"; // Modify this variable to refer to the AWS Region that you want to use to send email. region = "us-west-2"; // The values of the following variables should always stay the same. date = "11111111"; service = "ses"; terminal = "aws4_request"; message = "SendRawEmail"; version = 0x04; kDate = HmacSha256(date, "AWS4" + key); kRegion = HmacSha256(region, kDate); kService = HmacSha256(service, kRegion); kTerminal = HmacSha256(terminal, kService); kMessage = HmacSha256(message, kTerminal); signatureAndVersion = Concatenate(version, kMessage); smtpPassword = Base64(signatureAndVersion);

Algumas linguagens de programação incluem bibliotecas que você pode usar para converter uma chave de acesso secreta do IAM em uma senha SMTP. Esta seção inclui um exemplo de código que você pode usar para converter uma chave de acesso secreta da AWS em uma senha SMTP do Amazon SES usando o Python.

nota

O exemplo a seguir usa f-strings que foram introduzidos no Python 3.6; se estiver usando uma versão mais antiga, elas não funcionarão.

Atualmente, o Python SDK (Boto3) suporta oficialmente as versões 2.7 e 3.6 (ou posterior). No entanto, o suporte da versão 2.7 está defasado e será descontinuado em 15/7/2021, portanto, você precisará atualizar pelo menos para a versão 3.6.

Python
#!/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()

Para obter sua senha SMTP usando esse script, salve o código anterior como smtp_credentials_generate.py. Depois, na linha de comando, execute o seguinte comando:

python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1

No comando anterior, faça o seguinte:

  • Substitua path/to/ pelo caminho para o local em que você salvou smtp_credentials_generate.py.

  • Substitua wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY pela chave de acesso secreta que você deseja converter em uma senha SMTP.

  • Substitua us-east-1 pela região da AWS na qual você deseja usar as credenciais SMTP.

Quando esse script é executado com êxito, a única saída é sua senha SMTP.

Para usar esse script, primeiro salve o código anterior como smtp_credentials_generate.py. Depois, na linha de comando, execute o seguinte comando:

python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1

No comando anterior, faça o seguinte:

  • Substitua path/to/ pelo caminho para o local em que você salvou smtp_credentials_generate.py.

  • Substitua wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY pela chave de acesso secreta que você deseja converter em uma senha SMTP.

  • Substitua us-east-1 pela região da AWS na qual você deseja usar as credenciais SMTP.

Quando esse script é executado com êxito, a única saída é sua senha SMTP.