我正在追踪如何send an Email Using the AWS SDK for Python (Boto)。
在AWS开发人员指南using-credentials页面上,我读到:
对于安全性最佳实践,请使用AWS Identity and Access Management(IAM)用户访问密钥而不是AWS账户访问密钥[强调添加]。
然后在Managing Access Keys for IAM Users,我最终导致了这个section,我正式确认使用
aws iam list-access-keys
我刚刚创建的(以JSON格式):
{
"AccessKeyMetadata": [
{
"UserName": "My_User_Name",
"Status": "Active",
"CreateDate": "2018-09-03T00:43:37Z",
"AccessKeyId": "JRUFKDHUWHE8DD495CHD"
}
]
}
但我不清楚这个身份是否是我之前警告过的“AWS账户访问密钥”并不属于“安全最佳实践”。
如何创建IAM身份(用户访问+密码)以通过SES和boto发送电子邮件(同时消除了我暴露整个AWS账户的机会)?
Ranting(以及对AWS员工作者的建设性建议,如果在这里):具体的品牌推广会有所帮助。在宜家,我可能会订购一张名为Fjorstuvstok的无名椅子或桌子,但我肯定知道我正在订购我想要的椅子。
AWS账户访问密钥是root帐户用户拥有的密钥。要检查这些是什么,您需要知道您的root帐户用户名。可以使用AWS根凭证使用aws cli检查,或使用您的root帐户凭据登录AWS控制台,然后单击右上角用户名下的“我的安全凭据”。
假设您使用cli,请确保您已在~/.aws/credentials
中配置了根凭据。然后运行:
aws iam get-user
{
"User": {
"UserName": "my_root_user_name",
"PasswordLastUsed": "2018-09-03T06:40:38Z",
"CreateDate": "2017-03-01T08:53:36Z",
"UserId": "9XXXXXXXXXXX",
"Arn": "arn:aws:iam::9XXXXXXXXXXX:root"
}
}
这将为您提供root用户的详细信息。然后可以使用此用户名查询访问密钥:
aws iam list-access-keys --user-name my_root_user_name
如果从这个结果中列出的任何键被用于SES,那那就是坏消息。 AWS建议您使用分配给IAM用户(非root用户)的访问密钥。
AWS账户访问密钥表示您的AWS账户的Root account
访问/密钥。当您使用电子邮件向aws注册时,创建的帐户是Root account
。有关键,需要删除。 (由于这是Root帐户,它提供对所有AWS服务的无限制访问。请检查AWS Account Root User Credentials vs. IAM User Credentials
警告建议使用IAM用户访问密钥。因此,您可以在aws帐户中创建IAM用户,并创建关联的访问密钥ID和秘密访问密钥,并在运行代码的计算机上对其进行配置。 (这在较高的部署环境中不是好的做法。如果机器受到攻击,那么将暴露访问密钥)
由于不清楚如何运行应用程序代码(来自ECS or EC2 or AWS Lambda
),您应该创建IAM role
以授予从您运行代码的位置访问SES
的权限。这样可以避免从应用程序代码/机器中暴露出IAM access key Id
和Secret access key
。