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

如何在Lambda事件中获取访问API的IAM用户名?

获取API Gateway访问者的IAM身份信息

要识别访问API端点的IAM用户(获取用户名/邮箱),核心是启用API Gateway的IAM授权,并在Lambda中提取身份信息后通过AWS服务获取用户详情。以下是具体实现步骤:

1. 配置API Gateway的IAM授权

在API Gateway控制台找到你的端点对应方法(如GET),将授权类型设置为AWS_IAM。这会强制所有请求必须携带有效的IAM签名,同时API Gateway会把调用者的身份信息传递给Lambda。

2. 修改Lambda函数提取并获取用户信息

Lambda的event参数中,requestContext.identity字段包含调用者的基础身份数据(如ARN、userId)。你可以通过AWS SDK调用IAM服务,获取用户的邮箱等详细信息。

修改后的Lambda代码示例:

import json
import logging
import boto3

logger = logging.getLogger()
logger.setLevel(logging.INFO)
iam_client = boto3.client('iam')

def respond(err, res=None):
    return {
        'statusCode': '400' if err else '200',
        'body': str(err) if err else json.dumps(res),
        'headers': {
            'Content-Type': 'application/json',
        },
    }

def lambda_handler(event, context):
    logger.info('Received event: %s' + json.dumps(event, indent=2))
    try:
        # 从event中提取调用者的IAM身份ARN
        caller_arn = event['requestContext']['identity']['userArn']
        # 从ARN中拆分出用户名(ARN格式:arn:aws:iam::账号ID:user/用户名)
        username = caller_arn.split('/')[-1]
        
        # 调用IAM API获取用户详情
        user_info = iam_client.get_user(UserName=username)['User']
        # 从用户标签中提取邮箱(需提前在IAM控制台给用户添加email标签)
        user_email = next((tag['Value'] for tag in user_info.get('Tags', []) if tag['Key'] == 'email'), None)
        # 若用户名本身是邮箱格式,也可直接使用
        # user_email = username if '@' in username else None

        param1 = event['queryStringParameters']['name']
        param2 = event['queryStringParameters']['age']
        
        res_data = {
            'message': 'Hello World!',
            'caller_username': username,
            'caller_email': user_email,
            'received_params': {'name': param1, 'age': param2}
        }
        return respond(None, res=res_data)
    except Exception as e:
        logger.error(f"处理请求出错: {str(e)}")
        return respond(e)

3. 配置Lambda执行角色权限

确保Lambda的执行角色拥有iam:GetUser权限,否则无法调用IAM API获取用户信息。给该角色添加如下权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:GetUser",
            "Resource": "arn:aws:iam::你的账号ID:user/*"
        }
    ]
}

注意事项

  • 若调用者使用IAM角色临时凭证访问(如EC2实例角色、SSO角色),userArn会是角色ARN,此时需调用sts:GetCallerIdentity接口获取实际调用者身份后再处理。
  • 用户邮箱需提前在IAM控制台配置(通过标签或设置用户名为邮箱格式),否则无法直接获取。
  • 测试时,需使用带AWS签名的请求工具(如Postman的AWS签名认证、AWS CLI),确保请求携带有效IAM凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:28