繁体   English   中英

AWS:如何将策略附加到 IAM 用户,授予他创建已验证身份而不访问根身份的权限?

[英]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?

root 帐户中,我有一个经过验证的域身份,用于为交易电子邮件创建email 身份
在此处输入图像描述

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

我想向这个IAM 账户附加一个策略,允许它使用根账户中经过验证的域身份创建经过验证的 email 身份

并且他不能在 root 帐户中列出或使用经过验证的 email 身份

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

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


编辑 1:当我尝试使用IAM 帐户创建 email 时,只是为了看看 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 帐户创建email 身份时,我仍然得到这个:

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

我在这里不明白的是没有被授权在我试图创建的资源上执行ses:CreateEmailIdentity的含义,即新的 email。

如何授权我在仍然不存在的email 身份上执行此操作。


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

在此处输入图像描述

{
  "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": {}
    }
  ]
}

当我在后端发送 email 时,会记录以下内容:

~ file: emailServices.js ~ line 297 ~.then ~ error AccessDenied: User arn:aws:iam::12xxxxx5328:user/iam-user-name' is not authorized to perform ses:SendEmail' on resource `arn:aws: ses:us-west-2:1xxxxx28:identity/domain_name.com'

然后我授权 iam 用户使用相同的策略在Domain Identity上发送 email ,但应用于Domain Identity

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


注1:
我知道我不应该使用根账户,而应该只使用 IAM 账户。

为域中的任何 email 创建 email 身份的 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等创建 email 身份,因为 '*' 是通配符。 如果要将其限制为特定的 email 身份,还可以将"arn:aws:ses:us-west-2:12xxxxxxxx28:identity/test@domain_name.com"指定为资源。

修复发送 email 问题

如果出现以下情况,我可以复制该问题:

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

In scenarios where the domain identity ( domain_name.com ) is verified but not the specific email identity ( test@domain_name.com ), AWS tries to use the domain_name.com email identity to send the email, which is blocked by your IAM policy. 如果您尝试强制它使用test@domain_name.com email身份(SES SendEmail 中的SourceArn ,SES V2 SendEmail 中的 FromEmailAddressIdentityArn),它会给您正确的“电子邮件身份未验证”错误。

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

旁注:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM