当我尝试部署到Lambda@Edge时,为什么会出现“执行角色必须可被假定”的错误?

78
我正尝试在AWS中部署Lambda@Edge,但是当我点击“Deploy”时,会出现以下错误信息:
"纠正以下错误并重试。 您的函数执行角色必须可被edgelambda.amazonaws.com服务主体承担。" 输入图像描述

上面的屏幕截图已被剪裁,以省略底部的文本,该文本当前指出“Lambda将添加必要的权限,以使Amazon CloudFront从此触发器调用您的Lambda函数。” - 这个声明是不正确的。 - symcbean
3个回答

140

根据Lambda@Edge IAM角色文档

您必须创建一个IAM角色,可由服务主体lambda.amazonaws.com和edgelambda.amazonaws.com扮演。当它们执行您的函数时,这个角色就会被服务主体扮演。有关更多信息,请参见IAM用户指南中“AWS作业功能的AWS管理策略”主题中的“创建角色和附加策略(控制台)”。

您可以在IAM的信任关系标签下添加此角色(不要在权限标签下添加)。

以下是示例角色信任策略:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "Service": [
               "lambda.amazonaws.com",
               "edgelambda.amazonaws.com"
            ]
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
注意:如果您是通过AWS控制台进行此操作,则在更新IAM角色后必须刷新浏览器。 来源:评论@AJB

76
请注意:如果您通过AWS控制台进行操作,则在更新IAM角色后必须刷新浏览器。该控制台似乎会缓存检查结果,并在您调整IAM角色后仍然不断地显示错误。 - AJB
15
谢谢指点。我感到困惑是因为Lambda自动创建了角色但没有信任关系。我只需要进入IAM控制台,找到自动生成的角色,并修改信任关系以包括“edgelambda.amazonaws.com”。 - Nogwater
2
啊,我现在明白了。你的措辞有些令人困惑。正如你所建议的那样,你既没有添加角色也没有添加策略。当你创建 Lambda 函数时,角色会自动创建。你真正的意思是通过添加这个信任策略来编辑 Lambda 函数的角色。 - Cerin
3
这个角色是直接从我在回答开头提供的 AWS 文档中复制的:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-permissions.html 请注意,文档中写道:“您需要在 IAM 的“信任关系”选项卡中添加此角色(不要将其添加到“权限”选项卡下方)。”。 - Mark B
2
更新:是的,显然有延迟。12小时后它可以工作了。 - Geyser14
显示剩余5条评论

14
  1. 前往Lambda函数,点击“配置”标签 -> 然后从左侧菜单中选择“权限”选项卡 -> 点击您的角色名称。
  2. 然后它将导航到相应的IAM角色页面。
  3. 点击“信任关系”选项卡。
  4. 点击“编辑策略”按钮并添加@Mark提到的内容。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接