【问题标题】:AWS: How to attach a policy to an IAM user that grants him the privilege to create a verified identity and not access root identities?AWS:如何将策略附加到 IAM 用户,授予他创建已验证身份而不访问根身份的权限?
【发布时间】:2022-02-01 04:48:36
【问题描述】:

root 帐户中,我有一个已验证的域身份,用于为交易电子邮件创建 电子邮件身份

现在,我创建了一个新的 IAM 帐户

我想为这个 IAM 帐户附加一个政策,允许它使用该已验证的已验证电子邮件身份 root 帐户中的域身份

并且他必须不能列出或使用根帐户中的已验证的电子邮件身份

我应该为此使用内联策略(我知道应该避免并作为最后的手段)还是正常的权限配置

如果是这样,我应该如何编写或选择这样的政策?


编辑 1: 当我尝试使用 IAM 帐户 创建电子邮件时,只是为了看看 AWS 会说什么,通知中是这样写的:

您没有足够的访问权限来执行此操作。

用户:arn:aws:iam::122443365328:user/iam-user-name 不是 授权执行:ses:CreateEmailIdentity on resource:

arn:aws:ses:us-region:122443365328:identity/test@dmain_name.com 因为没有 基于身份的策略允许 ses:CreateEmailIdentity 操作

当我在内联策略创建仪表板中搜索CreateEmailIdentity 时,没有找到:


编辑 2:

当我选择SES-v2 作为服务时,我实际上已经找到了它:

我已授予 IAM 用户以下权限:

在资源部分:

我添加了已验证域名的ARN

这是结果:

但是,当我尝试使用 IAM 帐户 创建 电子邮件身份 时,我仍然得到以下信息:

您没有足够的访问权限来执行此操作。用户: arn:aws:iam::12xxxxxx5328:user/iam-user-name 无权 在资源上执行:ses:CreateEmailIdentity: arn:aws:ses:us-west-2:122443365328:identity/dev@domain_name.com 因为没有基于身份的策略允许 ses:CreateEmailIdentity 行动

我在这里不明白的是没有被授权对我正在尝试创建的新电子邮件资源执行ses:CreateEmailIdentity 的含义。

如何授权我使用仍然不存在的电子邮件身份执行此操作。


编辑 3:
即使在使用 root 用户 创建电子邮件并授予 IAM 用户 使用此策略使用该电子邮件发送电子邮件的权限之后:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "stmt1643366831422",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::12xxxxxx328:user/iam-user-name"
      },
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail",
        "ses:SendTemplatedEmail",
        "ses:SendBulkTemplatedEmail"
      ],
      "Resource": "arn:aws:ses:us-west-2:12xxxxxxxx28:identity/test2@domain_name.com",
      "Condition": {}
    }
  ]
}

当我在后端发送电子邮件时,会记录以下内容:

???? ~ 文件:emailServices.js ~ 第 297 行 ~ .then ~ 错误访问被拒绝: 用户arn:aws:iam::12xxxxx5328:user/iam-user-name' is not authorized to perform ses:SendEmail' 在资源上 `arn:aws:ses:us-west-2:1xxxxx28:identity/domain_name.com'

然后我授权 iam 用户在 Domain Identity 上使用相同的策略发送电子邮件,但应用在 Domain Identity 上。

现在,可以使用 IAM 用户凭证发送电子邮件了。
问题是他可以使用所有已验证的电子邮件身份发送电子邮件。
但是,我希望他能够通过仅使用专门为该 IAM 用户创建的相应电子邮件身份来做到这一点。


注意 1:
我知道我不应该使用 root 帐户,而应该只使用 IAM 帐户。

【问题讨论】:

    标签: amazon-web-services cloud amazon-iam amazon-ses aws-policies


    【解决方案1】:

    为域中的任何电子邮件创建电子邮件身份的 IAM 政策

    您的 IAM 政策需要类似于以下内容:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "CreateEmailIdentity",
                "Effect": "Allow",
                "Action": "ses:CreateEmailIdentity",
                "Resource": "arn:aws:ses:us-west-2:12xxxxxxxx28:identity/*@domain_name.com"
            }
        ]
    }
    

    请注意,我使用的是*@domain_name.com 而不是domain_name.com。这将允许您为test@domain.comtest2@domain.com 等创建电子邮件身份,因为“*”是通配符。如果要将其限制为特定的电子邮件身份,还可以将 "arn:aws:ses:us-west-2:12xxxxxxxx28:identity/test@domain_name.com" 指定为资源。

    修复发送电子邮件问题

    如果满足以下条件,我可以复制该问题:

    1. domain_name.com 电子邮件身份已正确创建和验证
    2. 我使用sesv2 CreateEmailIdentity 创建test@domain_name.com 电子邮件身份,但实际上并未通过单击AWS 发送的验证电子邮件中的确认链接进行验证。控制台会说电子邮件身份已验证(因为整个域的电子邮件身份 domain_name.com 已验证)但这是不正确的。 aws sesv2 list-email-identities 给出了所有电子邮件身份的实际验证状态。

    在验证域身份 (domain_name.com) 但未验证特定电子邮件身份 (test@domain_name.com) 的情况下,AWS 会尝试使用 domain_name.com 电子邮件身份发送电子邮件,这被您的 IAM 策略阻止.如果您尝试强制它使用test@domain_name.com 电子邮件身份(SES SendEmail 中的SourceArn,SES V2 SendEmail 中的 FromEmailAddressIdentityArn ),它会给您正确的“电子邮件身份未验证”错误。

    如果test@domain_name.com 电子邮件身份确实经过验证,则它可以正常工作。

    旁注:

    1. 正确的术语是 IAM 用户,而不是 IAM 帐户。
    2. 我应该为此使用内联策略(我知道应该避免并作为最后的手段)还是正常的权限配置?

    我不知道您所说的“正常权限配置”是什么意思,但是您可以将三种类型的策略附加到 IAM 用户:

    • AWS 托管策略:这些几乎不可能用于任何细粒度策略,并且不适用于您的要求。
    • 客户托管策略:您可以创建自己的自定义托管策略并将其用于多个 IAM 用户、角色和组。可用于满足您的要求。
    • 内联策略:您可以创建仅适用于特定 IAM 用户、角色或组的内联策略。可用于满足您的要求。
    1. 如何授权我使用仍然不存在的电子邮件身份执行此操作。

    ARN 格式完全取决于要验证的电子邮件或域,这就是为什么即使资源事先不存在,您也可以将其添加到 IAM 策略中。

    【讨论】:

    • 我在添加了您提到的策略并稍作调整后创建了资源。我不得不将“ses:TagResource”添加到操作列表中。但是,我仍然无法使用 IAM 用户凭证发送电子邮件。这是记录的内容:AccessDenied: User arn:aws:iam::12xxxx328:user/iam-user-name' is not authorized to perform ses:SendEmail' on resource `arn:aws:ses:us-west-2:122xxxxx328:identity/domain_name.com'
    • 您是否使用aws sesv2 list-email-identities 验证您尝试发送电子邮件所使用的电子邮件身份是否实际启用了发送电子邮件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2010-10-07
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多