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

已登录Cognito用户的ASP.NET Razor网站调用AWS Lambda函数咨询

Cognito登录场景下调用AWS Lambda的凭证选择

你提供的Lambda调用代码框架没问题,但凭证来源的选择要严格遵循安全规范:

AmazonLambdaClient alc = new AmazonLambdaClient(credentials);
Amazon.Lambda.Model.InvokeRequest ir = new Amazon.Lambda.Model.InvokeRequest();
ir.FunctionName = "arn:aws:lambda:us-east-1:xxxx:function:get-data";
ir.Payload = "";
var res = alc.InvokeAsync(ir);

直接说结论:绝对不要用长期访问密钥/密钥,必须从User.Identity对应的Cognito会话中获取临时凭证。

原因和具体操作说明:

  • 长期访问密钥是永久有效的全局凭证,在网站场景下硬编码或直接使用,一旦泄露会导致整个AWS账户面临被盗用的风险,完全违反AWS安全最佳实践
  • 用户通过Cognito登录后,Cognito会自动分发临时访问密钥、密钥和会话令牌,这类凭证有有效期限制,且权限可以通过IAM角色精准管控(比如仅允许调用指定的Lambda函数)
  • 你可以从Cognito的用户身份信息中提取这些临时凭证,用来初始化AmazonLambdaClient,调整后的代码示例如下:
// 从Cognito用户会话中提取临时凭证信息
var cognitoCredentials = new SessionAWSCredentials(
    userIdentity.AccessKeyId,
    userIdentity.SecretAccessKey,
    userIdentity.SessionToken
);

AmazonLambdaClient alc = new AmazonLambdaClient(cognitoCredentials);
Amazon.Lambda.Model.InvokeRequest ir = new Amazon.Lambda.Model.InvokeRequest();
ir.FunctionName = "arn:aws:lambda:us-east-1:xxxx:function:get-data";
ir.Payload = "";
var res = alc.InvokeAsync(ir);
  • 额外注意:需要给Cognito用户关联的IAM角色配置lambda:InvokeFunction权限,确保用户具备调用目标Lambda函数的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:21:02