如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限
Posted
技术标签:
【中文标题】如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限【英文标题】:How to Give Amazon SES Permission to Write to Your Amazon S3 Bucket 【发布时间】:2017-06-08 17:26:06 【问题描述】:我希望我的 SES(AWS) 可以接收电子邮件,所以我按照以下教程进行操作, http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-getting-started-receipt-rule.html
当我在最后一步创建规则时,会出现以下错误, 无法写入存储桶:“电子邮件接收”
我用谷歌搜索,发现 (http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-permissions.html) 上的这些信息可以解决问题。
但是,当添加我的策略语句时,它会出现错误 - 此策略包含以下错误:已禁止字段 Principal 有关 IAM 策略语法的更多信息,请参阅 AWS IAM 策略。
我的政策声明是,
“版本”:“2012-10-17”, “陈述”: [ "Sid": "GiveSESPermissionToWriteEmail", “效果”:“允许”, “主要的”: “服务”: [ “ses.amazonaws.com” ] , “行动”: [ “s3:放置对象” ], "资源": "arn:aws:s3:::mybulketname/*", “健康)状况”: “字符串相等”: "aws:Referer": "my12accountId" ]
如果我起飞
“校长”: “服务”: [ “ses.amazonaws.com” ]
验证政策将通过。
谢谢
【问题讨论】:
您在哪里尝试创建此策略? 在 IAM 中。问题已解决。该策略应在 S3 上的存储桶上创建,而不是在 IAM 中。 【参考方案1】:找到bucket->permission->bucketPolicy
"Version": "2012-10-17",
"Statement": [
"Sid": "AllowSESPuts",
"Effect": "Allow",
"Principal":
"Service": "ses.amazonaws.com"
,
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BUCKEN_NAME/*",
"Condition":
"StringEquals":
"aws:Referer": "YOUR ID"
]
在此处阅读更多信息https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-permissions.html
要在 AWS 管理控制台上查找您的 AWS 账户 ID 号,请选择右上角导航栏上的支持,然后选择支持中心。您当前登录的帐户 ID 显示在支持菜单下方的右上角。
在此处阅读更多信息https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html
【讨论】:
这个解决方案对我有用,但是我确实花了一些时间才弄好。在注意到其他人提到删除Condition
部分有效后,我确定这是我的错误所在。实际上,问题在于我的帐户 ID 中使用了破折号。不要将您的帐户 ID 输入格式如下的策略:"aws:Referer": "####-####-####-####"
。而是输入不带破折号的帐户 ID,如下所示:"aws:Referer": "################"
。
我为Finding Your AWS Account ID
提供的链接确实显示了不带破折号的帐户 ID。您在哪里找到带有破折号的?
当然,该链接显示的是不带破折号的账户 ID,但如果您是账户所有者(而不是别名)并按照链接中的说明在 AWS Web 控制台中找到您的 ID用破折号显示您的 ID。
我是帐户所有者,我按照我在答案中输入的说明进行操作,我看到我的account number
没有任何破折号,但它不在右上角,而是在右上角-左角,但文档中的图像与实际相同。
谢谢@Yevgeniy。请注意其他人,如果您收到此错误:Error: Action does not apply to any resource(s) in statement
,那么您需要将/*
添加到资源字符串中,如上面的答案所示。当我从头开始生成策略时,我错过了您必须指定一个key_name
,它可以只是一个*
通配符。【参考方案2】:
我遵循了这个建议,但我仍然遇到问题。经过多次调试,我意识到 SES 无法写入,因为我将默认服务器端加密(在存储桶上)设置为“AWS-KMS”
我进行了 5 分钟的谷歌搜索,但在任何地方都找不到这种不兼容的记录。
您可以通过将目标存储桶上的默认加密设置更新为“AES-256”或“无”来解决此问题。
【讨论】:
这个!这是我看到的问题。感谢您做此记录。 今天遇到了同样的问题。谢谢提及。 这是为我做的。 hashcorp 网站上的示例提到了 kms,这可能是许多人失败的原因。【参考方案3】:这个问题已经解决了。 在要授予 SES 权限的存储桶上创建策略,而不是在 IAM 中
【讨论】:
【参考方案4】:请注意,即使在正确指定权限后,我仍然会出现此错误。如果您使用的是跨区域(例如 SES 在弗吉尼亚北部,S3 Bucket 在非洲),那么您需要在区域中指定存储桶名称,或者只需将存储桶放在同一区域。
【讨论】:
【参考方案5】:我有同样的问题,如果我只删除“条件” 策略通过,“RuleSet”正常:
"Version": "2012-10-17",
"Statement": [
"Sid": "GiveSESPermissionToWriteEmail",
"Effect": "Allow",
"Principal":
"Service": "ses.amazonaws.com"
,
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::mybulketname/*"
]
【讨论】:
"Version": "2012-10-17", "Statement": [ "Sid": "AllowSESPuts", "Effect": "Allow", "Principal": "Service “:“ses.amazonaws.com”,“操作”:“s3:PutObject”,“资源”:“arn:aws:s3:::mybulketname/*”,“条件”:“StringEquals”:“ aws:Referer": "myIdAccount" ] 资源字段中的/*
很重要
删除条件不是一个好主意,因为它允许不同帐户中的其他人配置 ses 以将内容添加到您的存储桶...如果有人输入存储桶名称可能会发生这种情况以上是关于如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限的主要内容,如果未能解决你的问题,请参考以下文章
Ruby/node.js + Amazon SES:是不是有 Amazon SES API?