关于AWS SAM自动创建Lambda IAM角色的命名及权限边界问题
关于SAM部署Lambda自动创建角色的疑问解答
1. 每次SAM部署都会创建新角色吗?
不会。SAM的默认行为逻辑如下:
- 当模板未显式定义Lambda执行角色时,SAM会先检查当前CloudFormation栈中是否存在符合要求的现有角色——即具备
lambda.amazonaws.com的信任关系,且附加了AWSLambdaBasicExecutionRole策略。 - 若找到匹配角色,会直接复用;仅当栈内无符合条件的角色时,才会自动创建新角色。
- 例外场景:删除原有栈后重新部署,或修改Lambda配置(比如添加需要额外权限的触发器)导致原有角色不再满足需求时,SAM会创建新角色。
2. 能否控制角色名称并添加权限边界?
完全可以,核心方法是在SAM模板中显式定义IAM角色,再让Lambda函数引用该角色,具体实现如下:
示例模板配置
Resources: # 自定义Lambda执行角色 MyCustomLambdaRole: Type: AWS::IAM::Role Properties: RoleName: MyFixedLambdaRoleName # 自定义固定角色名称 AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # 保留基础执行策略 PermissionsBoundary: arn:aws:iam::123456789012:policy/MyCustomPermissionsBoundary # 替换为你的权限边界ARN # Lambda函数绑定自定义角色 HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs18.x Role: !GetAtt MyCustomLambdaRole.Arn # 引用自定义角色的ARN
部署后,SAM会使用你定义的固定名称角色,不再自动生成带随机字符串的默认角色,同时该角色会严格遵循你指定的权限边界限制。
内容的提问来源于stack exchange,提问作者Jacek
相关产品推荐
相关产品推荐

