CloudFormation 模板 - 将现有 IAM 角色用于 Lambda 函数

Posted

技术标签:

【中文标题】CloudFormation 模板 - 将现有 IAM 角色用于 Lambda 函数【英文标题】:CloudFormation template - Using existing IAM role in for Lambda functions 【发布时间】:2021-09-28 11:15:12 【问题描述】:

我正在尝试使用 cloudformation 模板中的现有角色(存在于 AWS 账户中)来设置 lambda 函数,我计划在多个 AWS 账户中使用它。

在 CF 模板中,我使用参数来设置角色的名称,然后在 Lambda 函数的角色属性中使用 Ref。这就是我的模板的样子,

"Parameters" : 
  "ExistingRoleName" : 
    "Type" : "String",
    "Default" : "MyCustomRole"
  
"Resources" : 
  "CustomLambdaFunction" : 
    "Type" : "AWS::Lambda::Function",
     "Properties" : 
      "MemorySize" : "128",
      "Role" :  "Ref" : "ExistingRoleName" ,
    
  ,
  ...

但是,CF 模板失败并出现以下错误:

Properties validation failed for resource CustomLambdaFunction with message: #/Role: failed validation constraint for keyword [pattern]

这是因为 Cloudformation 中的 Lambda 资源需要角色 arn 而不是我在此文档中看到的 RoleNameaws-resource-lambda-function

基于我这样更新CF,

"Resources" : 
  "CustomLambdaFunction" : 
    "Type" : "AWS::Lambda::Function",
     "Properties" : 
      "MemorySize" : "128",
      "Role" : "arn:aws:iam::AccountID:role/MyCustomRole",
    
  ,

但是,我仍然看到同样的错误。

Properties validation failed for resource CustomLambdaFunction with message: #/Role: failed validation constraint for keyword [pattern]

我想知道我是否在这里遗漏了什么?

【问题讨论】:

arn 看起来不错。也许您实际使用的那个不正确,此处未显示。 另外,我猜AccountID 只是一个占位符,而不是您真实代码中的实际字符串? 【参考方案1】:

The Ref of an IAM Role “returns the resource name”,而不是它的 ARN。但是您可以在角色的Arn 属性上使用GetAtt

在 JSON 中:

"Fn::GetAtt": ["MyRole", "Arn"]

在 YAML 中:

!GetAtt MyRole.Arn

【讨论】:

【参考方案2】:

引用 iam 角色 arn 的格式 "角色" : "Fn::Sub" : "arn:aws:iam::$AWS::AccountId:role/MyCustomRole"

【讨论】:

感谢您的回复,我想这也可以。【参考方案3】:

这对我有用,

“角色”:“Fn::Join”:[“”,[“arn:aws:iam::”,“Ref”:“AWS::AccountId”,“:role/MyCustomRole”] ]

【讨论】:

以上是关于CloudFormation 模板 - 将现有 IAM 角色用于 Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章

将现有 AWS Lambda 和 API Gateway 导出到 Cloudformation 模板

如何在我的新 CloudFormation 模板中引用现有角色?

如何使用 CloudFormation 模板更新现有 AWS API Gateway

使用 AWS CLI 将现有资源导入 CloudFormation

使用AWS CLI将现有资源导入CloudFormation

Cloud Formation 模板将入口规则添加到现有安全组