AWS SAM模板复用已有SNS主题的权限配置优化问题
AWS SAM中SNS发布权限的优化配置方案
问题场景
现有AWS SAM模板如下:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Parameters: SNSTopicARN: Type: String Description: "要使用的SNS_TOPIC_ARN" Resources: Messages2SNSFunction: Type: 'AWS::Serverless::Function' Properties: Policies: - SNSPublishMessagePolicy: TopicName: SNSTopicARN # 执行失败,此处需传入主题名称而非完整ARN Environment: Variables: SNS_TOPIC_ARN: !Ref SNSTopicARN # 代码中使用该ARN发布消息
核心问题:SNSPublishMessagePolicy预定义策略仅支持传入主题名称,直接使用ARN会导致权限配置失效。新增SNSTopicName参数会造成输入冗余,且若SNS主题属于其他AWS账户,无法通过拼接ARN的方式提取主题名称。
最优解决方案
放弃使用预定义的SNSPublishMessagePolicy,改用自定义IAM策略直接基于完整ARN授予发布权限,模板修改如下:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Parameters: SNSTopicARN: Type: String Description: "要使用的SNS_TOPIC_ARN" Resources: Messages2SNSFunction: Type: 'AWS::Serverless::Function' Properties: Policies: - Statement: - Effect: Allow Action: sns:Publish Resource: !Ref SNSTopicARN Environment: Variables: SNS_TOPIC_ARN: !Ref SNSTopicARN # 代码中使用该ARN发布消息
方案优势
- 直接通过
Resource字段引用完整SNS主题ARN,绕过预定义策略的主题名称限制 - 无需新增参数,避免冗余输入
- 完美支持跨账户SNS主题,只要目标主题的资源策略允许当前Lambda函数的执行角色发布消息即可
内容的提问来源于stack exchange,提问作者Lucke
相关产品推荐
相关产品推荐

