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

如何在@aws-crypto/client-node中配置代理及解决凭证缺失错误

我来帮你逐个解决这两个问题:

1. 在@aws-crypto/client-node中配置代理服务器

@aws-crypto/client-node 底层依赖 AWS SDK for JavaScript,所以代理配置逻辑和AWS SDK完全一致,这里有两种常用实现方式:

  • 全局环境变量配置(简单快捷):
    如果你希望所有AWS相关请求都走代理,可以直接设置系统环境变量:

    HTTP_PROXY=http://your-proxy-host:port
    HTTPS_PROXY=http://your-proxy-host:port
    NO_PROXY=localhost,127.0.0.1 # 可选,指定不需要走代理的地址
    

    配置后,所有基于AWS SDK的请求都会自动使用这个代理。

  • 自定义KMS客户端配置(精准控制):
    如果你只想让加密客户端的请求走代理,可以手动创建带代理配置的KMS客户端,再传给KmsKeyringNode:

    const { KmsKeyringNode, encrypt, decrypt } = require("@aws-crypto/client-node");
    const { KMSClient } = require("@aws-sdk/client-kms");
    const { NodeHttpHandler } = require("@aws-sdk/node-http-handler");
    const http = require("http");
    const https = require("https");
    
    // 创建带代理的HTTP/HTTPS处理器
    const httpHandler = new NodeHttpHandler({
      httpAgent: new http.Agent({
        proxy: "http://your-proxy-host:port",
        keepAlive: true
      }),
      httpsAgent: new https.Agent({
        proxy: "http://your-proxy-host:port",
        keepAlive: true
      })
    });
    
    // 初始化带代理的KMS客户端
    const kmsClient = new KMSClient({
      region: "us-east-1", // 替换为你的KMS密钥所在区域
      requestHandler: httpHandler
    });
    
    // 使用自定义KMS客户端创建密钥环
    const keyring = new KmsKeyringNode({
      client: kmsClient,
      generatorKeyId: "arn:aws:kms:us-east-1:your-account-id:key/your-key-id" // 替换为你的KMS密钥ARN或ID
    });
    

    注意:如果还没安装依赖,需要先执行:

    npm install @aws-sdk/client-kms @aws-sdk/node-http-handler
    
2. 解决"Missing credentials in config"错误

这个错误说明AWS SDK找不到访问KMS服务的合法凭证,你可以根据运行环境选择以下配置方式:

  • 环境变量配置(适合测试/临时场景):
    在终端或系统环境中设置以下变量:

    export AWS_ACCESS_KEY_ID=your-access-key-id
    export AWS_SECRET_ACCESS_KEY=your-secret-access-key
    

    重启终端后,SDK会自动读取这些凭证。

  • 本地凭证文件(推荐开发/生产环境):
    在用户目录下创建.aws/credentials文件(Windows路径为C:\Users\你的用户名\.aws\credentials),内容格式如下:

    [default]
    aws_access_key_id = your-access-key-id
    aws_secret_access_key = your-secret-access-key
    

    同时确保代码中指定了正确的AWS区域,SDK会自动加载这个文件的凭证。

  • 代码中直接传入凭证(不推荐生产):
    仅用于快速测试,不建议在生产环境硬编码凭证:

    const kmsClient = new KMSClient({
      region: "us-east-1",
      credentials: {
        accessKeyId: "your-access-key-id",
        secretAccessKey: "your-secret-access-key"
      }
    });
    
  • IAM角色(AWS服务环境专属):
    如果你的代码运行在EC2、EKS、Lambda等AWS服务上,可以给资源绑定具有KMS访问权限的IAM角色,SDK会自动获取角色临时凭证,无需手动配置。

另外,别忘了确保你的IAM用户/角色拥有kms:GenerateDataKey(加密)和kms:Decrypt(解密)的权限,否则即使凭证正确,也会出现权限错误。

最后给你补全后的完整示例代码:

const { KmsKeyringNode, encrypt, decrypt } = require("@aws-crypto/client-node");
const { KMSClient } = require("@aws-sdk/client-kms");

// 初始化KMS客户端(可根据需要添加代理、凭证配置)
const kmsClient = new KMSClient({
  region: "us-east-1"
});

const keyring = new KmsKeyringNode({
  client: kmsClient,
  generatorKeyId: "arn:aws:kms:us-east-1:your-account-id:key/your-key-id"
});

const encryptData = async (plainText, context) => {
  try {
    const { result } = await encrypt(keyring, plainText, { encryptionContext: context });
    return result;
  } catch (e) {
    console.error("加密操作失败:", e);
    throw e; // 建议抛出错误让上层处理,而非仅打印
  }
};

// 调用加密函数
encryptData('hello world', { stage: "test", purpose: "poc", origin: "us-east-1" })
  .then(encryptedBuffer => console.log("加密完成,结果(Buffer):", encryptedBuffer))
  .catch(err => console.error("流程执行失败:", err));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:33:13