Lambda 的最终角色定义中的可信实体是什么?

What is trusted entities in resulting role definition of Lambda?

下面是SAM模板,

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
Properties:
  CodeUri: hello-world/
  Handler: app.LambdaHandler
  Runtime: nodejs8.10
  Policies:
  - AWSLambdaExecute  

为此,下面是为 Lambda 函数创建的角色(JSON):

{
  "roleName": "somestack-HelloWorldFunctionRole-AAAAAAAA",
  "policies": [
    {...}, # AWSLambdaExecute
    {...}, # AWSLambdaSQSQueueExecutionRole
    {....} # AWSLambdaBasicExecutionRole
  ],
  "trustedEntities": [
    "lambda.amazonaws.com"
  ]
}

这个JSON中的trustedEntities是什么?

可信实体是一组可以承担此角色的实体。如果您是通过 SAM 创建函数,SAM 创建的角色与您账户中的 Lambda 服务之间的信任关系将自动创建,这反过来意味着您的 Lambda 函数可以承担此角色。

如果您想将此角色分配给 EC2 实例,您将无法这样做,因为默认情况下您的角色不信任 EC2 服务。您需要修改信任关系并包括 EC2 服务。像这样:

"trustedEntities": [
    "lambda.amazonaws.com",
    "ec2.amazonaws.com"
  ]

如果您想创建一个可以跨账户承担的角色,这也很有用,您可以将其他账户指定为受信任的实体,以便其他账户能够承担该角色。

如果 trustedEntities 列表为空,则没有人能够担任该角色。