有没有办法使用 cloudformation 创建 aws lambda 执行角色?

Posted

技术标签:

【中文标题】有没有办法使用 cloudformation 创建 aws lambda 执行角色?【英文标题】:Is there a way to create aws lambda execution role with cloudformation? 【发布时间】:2022-01-18 21:51:17 【问题描述】:

我正在尝试使用 cloudformation 创建一个 lambda 函数,但它需要一个 lambda 执行角色 - 有没有一种方法可以使用 cloudformation 生成一个?

【问题讨论】:

你看过this document吗? 【参考方案1】:

是的,CloudFormation 可用于创建 IAM 角色。 lambda 执行角色是一个 IAM 角色,就像任何其他 IAM 角色一样。这样做的documentation 显示了这个例子:

MyRole:
  Type: AWS::IAM::Role
  Properties: 
    AssumeRolePolicyDocument: Json
    Description: String
    ManagedPolicyArns: 
      - String
    MaxSessionDuration: Integer
    Path: String
    PermissionsBoundary: String
    Policies: 
      - Policy
    RoleName: String
    Tags: 
      - Tag

然后在 lambda 中,您使用对角色资源名称的 ref 来引用它。例如:

  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Role: !Ref MyRole
  

【讨论】:

lambda 执行角色不仅仅是一个简单的角色,它还包含一个内联托管策略,由 aws 在您创建 lambda 函数时生成。问题是,一方面您需要该角色在 cloudformation 上创建 lambda 函数,另一方面该角色仅在您创建 lambda 函数时创建。 您可以将托管策略添加到 CloudFormation 创建的 IAM 角色 - 如果您让 Lambda 使用控制台创建角色,则会添加相同的策略。但是控制台允许你选择一个现有的角色,所以这是一个很好的证据证明这个角色不是只有在你创建lambda时才被创建.您不需要需要让 lambda 创建执行角色。我有许多创建角色的 CloudFormation 模板,然后创建使用这些角色的 lambda。这是一个常见的用例。 这里有更多细节:docs.aws.amazon.com/lambda/latest/dg/… 不幸的是,我没有通过控制台创建 lambda 的选项,因为我需要 cloudformation 用于特定目的。我确实知道我可以使用 cloudformation 创建角色并附加相关策略,但问题是 - 我需要哪些相关策略才能让 lambda 函数使用角色?因为通过控制台策略是由系统生成的。我尝试附加文档中描述的策略,但出现此错误:“Policy arn:aws:iam::aws:policy/AWSLambdaBasicExecutionRole 不存在或不可附加。” 嗯,这实际上与您提出的问题不同。我不是建议您通过控制台创建 lambda,只是将其作为证据。如果您的 lambda 没有访问其他服务,则需要附加: arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole 您可以转到 IAM 并找到策略并从那里复制 ARN 以确保您使用的是正确的 - 您列出的不是正确的 ARN。

以上是关于有没有办法使用 cloudformation 创建 aws lambda 执行角色?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法对 AWS Cloudformation 模板进行单元测试

CloudFormation 将项目放入 DynamoDB 表中

CloudFormation 嵌套堆栈名称

我可以强制CloudFormation删除非空的S3 Bucket吗?

将现有 AWS 资源整合到 CloudFormation 堆栈中

创建没有资源的 CloudFormation 堆栈