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

使用AWS JavaScript SDK v2在Lambda中扮演跨账号角色时的凭证错误排查

跨账号S3访问的CredentialsError问题解决思路
  • 检查Lambda执行角色的sts:AssumeRole权限策略
    确保策略中指定的Resource是目标跨账号角色的完整ARN(格式为arn:aws:iam::目标账号ID:role/cross-account-role-staging),不能使用错误的ARN或过度宽松的通配符。示例正确策略:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": "arn:aws:iam::123456789012:role/cross-account-role-staging"
        }
      ]
    }
    
  • 验证目标跨账号角色的信任策略
    目标角色cross-account-role-staging的信任策略必须允许Lambda所在账号的执行角色发起AssumeRole请求。示例信任策略:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::Lambda所在账号ID:role/你的Lambda执行角色名称"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 修正STS调用代码的实现
    Lambda运行时会自动注入执行角色的临时凭证,无需手动配置。调用STS时不要手动指定credentials,让SDK自动获取Lambda的角色凭证。
    Node.js(v2 SDK)示例:

    const AWS = require('aws-sdk');
    const sts = new AWS.STS();
    
    exports.handler = async (event) => {
      const params = {
        RoleArn: 'arn:aws:iam::目标账号ID:role/cross-account-role-staging',
        RoleSessionName: 'cross-account-session'
      };
    
      try {
        const data = await sts.assumeRole(params).promise();
        const s3 = new AWS.S3({
          accessKeyId: data.Credentials.AccessKeyId,
          secretAccessKey: data.Credentials.SecretAccessKey,
          sessionToken: data.Credentials.SessionToken
        });
        // 执行S3操作,比如s3.listBuckets().promise()
      } catch (err) {
        console.error('AssumeRole失败:', err);
        throw err;
      }
    };
    

    注意:不要手动设置AWS_ACCESS_KEY_ID或AWS_SECRET_ACCESS_KEY环境变量,否则会覆盖Lambda自动注入的凭证。

  • 排查SDK版本与环境变量冲突

    • 升级AWS SDK到最新稳定版,旧版本可能存在Lambda凭证注入的兼容性问题;若使用v3 SDK,参考对应的AssumeRole调用逻辑。
    • 移除AWS_SDK_LOAD_CONFIG=1环境变量,该变量用于加载本地~/.aws/config文件,Lambda环境中无此文件,设置后无效。
    • 确认Lambda未配置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY这类环境变量,避免覆盖默认凭证。
  • 用IAM策略模拟器验证权限
    进入Lambda执行角色的IAM页面,使用「策略模拟器」测试sts:AssumeRole操作,指定目标跨账号角色ARN为资源,确认权限能正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:53