【问题标题】:How to Give Amazon SES Permission to Write to Your Amazon S3 Bucket如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限
【发布时间】: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 中。

标签: amazon-web-services amazon-s3 amazon-ses


【解决方案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 以将内容添加到您的存储桶...如果有人输入存储桶名称可能会发生这种情况
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2015-09-22
      • 2021-03-11
      相关资源
      最近更新 更多