You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda发送指定号码SMS的IAM角色权限配置咨询

解决方案:AWS Lambda向指定手机号发送SMS的最小权限实现

核心思路

通过限定IAM角色的SNS资源范围,让Lambda仅能向指定手机号发送短信,既避免通配符权限过大,又无需创建IAM用户密钥。SNS的SMS资源格式为arn:aws:sns:区域ID:AWS账号ID:带国际区号的手机号,直接将目标手机号对应的ARN写入策略即可实现最小权限控制。

步骤1:配置Lambda执行角色的IAM策略

创建或修改Lambda的执行角色,附加以下自定义策略(替换示例中的区域、账号ID和实际手机号):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:+1333xxxxxxx",
                "arn:aws:sns:us-east-1:123456789012:+1444xxxxxxx"
            ]
        }
    ]
}

步骤2:Lambda函数代码示例(Python)

在函数中根据日期逻辑选择目标手机号,调用SNS发送短信:

import boto3
from datetime import datetime

def lambda_handler(event, context):
    sns_client = boto3.client('sns')
    # 替换为实际带国际区号的手机号
    my_mobile = "+1333xxxxxxx"
    partner_mobile = "+1444xxxxxxx"

    today = datetime.today().day
    # 根据日期逻辑确定发送对象和内容
    if today == 1:
        target = my_mobile
        msg = "每月1号提醒:你的待办任务已更新"
    elif today == 15:
        target = partner_mobile
        msg = "每月15号提醒:需与合作伙伴同步进度"
    else:
        return {"statusCode": 200, "body": "今日无需发送短信"}

    response = sns_client.publish(PhoneNumber=target, Message=msg)
    return {"statusCode": 200, "body": f"短信已发送至{target},消息ID:{response['MessageId']}"}

关键注意事项

  • 手机号必须带国际区号(如中国手机号为+8613xxxxxxxxx),否则SNS无法识别发送目的地。
  • 若后续需新增目标手机号,只需在IAM策略的Resource列表中添加对应手机号的ARN即可。
  • 此方案遵循AWS权限最小化原则,Lambda仅拥有向指定号码发送短信的权限,无额外风险。

内容的提问来源于stack exchange,提问作者Dora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:12:07