为什么我的访问密钥会更改?(使用 AWS JavaScript 和 node.js API for Lambda)



在客户端javascript中,我设置了:

    AWS.config.credentials = { 
        "accessKeyId": ak,  // starts with "AKIA..."
        "secretAccessKey": sk // something long and cryptic
    };

然后最终打电话

    var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});
    var params = {
      FunctionName: 'my-function-name',
      InvokeArgs : my_data
    };
    lambda.invokeAsync(params, function(err, data) {
    ...

HTML 请求似乎包含正确的访问密钥:

    authorization:AWS4-HMAC-SHA256 Credential=AKIA...

在服务器端节点.js中,我不手动设置任何 AWS 凭证,但前提是在客户端设置它们就足够了,因为:

   var AWS = require('aws-sdk');
   var s3 = new AWS.S3();
   ...

请求后,将按预期调用服务器的上载处理程序,但在该处理程序中,s3.putObject()失败并显示"拒绝访问"错误。为了调试它,我将console.log(AWS.config.credentials(添加到上传处理程序中,Cloudwatch显示:

    accessKeyId: 'ASIA...

我不认识显示的访问密钥 ID,它肯定与请求标头中提供的 accessKeyId 不匹配。 我在这里做错了什么,还是这是预期的行为?

Lambda 函数不使用您在客户端 JavaScript 代码中使用的 AWS 凭证。客户端代码中的凭证用于向 AWS API 发出 Lambda.invoke(( 命令。在这种情况下,您在客户端使用的凭证只需要 Lambda 调用权限。

然后,AWS Lambda 服务会调用您的 Lambda 函数。Lambda 服务会将 IAM 执行角色附加到您在创建/配置 Lambda 函数时指定的调用。该 IAM 执行角色需要具有适当的 S3 访问权限。

最新更新