AWS SES - 连接到 boto 集而不在代码中公开访问密钥

AWS SES - Connect to boto set without exposing access keys in code

我正在使用 python 通过 AWS 简单电子邮件服务发送电子邮件。

为了获得最好的安全性,我想 在代码中不暴露我的访问密钥的情况下建立 boto SES 连接。

现在我正在建立这样的连接

ses = boto.ses.connect_to_region(
   'us-west-2',
    aws_access_key_id='<ACCESS_KEY>',
    aws_secret_access_key='<SECRET_ACCESS_KEY>'
)

Is there a way to do this without exposing my access keys inside the script?

最简单的解决方案是使用您可以在 Python 代码中通过 os.environ 检索到的环境变量。

export AWS_ACCESS_KEY_ID=<YOUR REAL ACCESS KEY>
export AWS_SECRET_ACCESS_KEY=<YOUR REAL SECRET KEY>

并且在 Python 代码中:

from os import environ as os_env

ses = boto.ses.connect_to_region(
   'us-west-2',
    aws_access_key_id=os_env['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=os_env['AWS_SECRET_ACCESS_KEY']'
)

首选的身份验证方法是使用 boto3 读取您的 AWS 凭证文件的能力。

使用 aws configure 命令配置您的 AWS CLI。

然后,在您的脚本中,您可以使用 Session 调用来获取凭据: session = boto3.Session(profile_name='default')

两个选项是设置一个名为 ACCESS_KEY 的环境变量和另一个名为 SECRET_ACCESS_KEY 的环境变量,然后在您的代码中您将拥有:

import os
ses = boto.ses.connect_to_region(
'us-west-2',
aws_access_key_id=os.environ['ACCESS_KEY'],
aws_secret_access_key=os.environ['SECRET_ACCESS_KEY']
)

或使用 json 文件:

import json
path_to_json = 'your/path/here.json'

with open(path_to_json, 'r') as f:
    keys = json.load(f)

ses = boto.ses.connect_to_region(
'us-west-2',
aws_access_key_id=keys['ACCESS_KEY'],
aws_secret_access_key=keys['SECRET_ACCESS_KEY']
)

json 文件将包含: {'ACCESS_KEY':<ACCESS_KEY>, 'SECRET_ACCESS_KEY':<SECRET_ACCESS_KEY>}

为您的 EC2 实例附加一个具有 SES 权限的 IAM 角色,这样您就不必显式传递凭据。您的脚本将自动从元数据服务器获取凭据。

参见:Easily Replace or Attach an IAM Role to an Existing EC2 Instance by Using the EC2 Console。那么你的代码将是这样的:

ses = boto.ses.connect_to_region('us-west-2')