使用 AWS 加密库和 NestJS 时出现“EC2 元数据 roleName 请求返回错误”

Alf*_*nso 5 amazon-web-services node.js amazon-kms nestjs

我正在尝试在 NestJS 应用程序中使用 aws 加密 sdk,下一个代码源显示了实现。

import { Controller, Get } from '@nestjs/common';
import {KmsKeyringNode, encrypt} from '@aws-crypto/client-node'


@Controller('encryption')
export class EncryptionController {
  // constructor() {}
  @Get()
  async crypt() {
    const generatorKeyId = "generatior key";
    const masterKeyId = "master key id";
    const keyring = new KmsKeyringNode({keyIds:[masterKeyId], generatorKeyId: generatorKeyId});
    const plainText = "My passwords for senstive data";
    const context = {
      accountId: "100",
      purpose: "youtube demo",
      country: "Sri Lanka"
    };
    const { result } = await encrypt(keyring, plainText, { encryptionContext: context });
    console.log(result)


  }

}
Run Code Online (Sandbox Code Playgroud)

但是当我执行请求以查看实现结果时,我收到下一个错误

Error: connect EHOSTUNREACH 169.254.169.254:80
      at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14) {
    message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
    errno: 'EHOSTUNREACH',
    code: 'CredentialsError',
    syscall: 'connect',
    address: '169.254.169.254',
    port: 80,
    time: 2020-06-09T11:41:47.638Z,
    originalError: {
      message: 'Could not load credentials from any providers',
      errno: 'EHOSTUNREACH',
      code: 'CredentialsError',
      syscall: 'connect',
      address: '169.254.169.254',
      port: 80,
      time: 2020-06-09T11:41:47.638Z,
      originalError: {
        message: 'EC2 Metadata roleName request returned error',
        errno: 'EHOSTUNREACH',
        code: 'EHOSTUNREACH',
        syscall: 'connect',
        address: '169.254.169.254',
        port: 80,
        time: 2020-06-09T11:41:47.637Z,
        originalError: [Object]
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

不过,我从本教程中复制了一个 nodejs 脚本,看看它是否适用于我设置的 aws sdk,并且我没有收到任何错误,而且如果在 cli 中执行 aws kms 加密方法,我也没有任何错误。

我尝试导出AWS_SDK_LOAD_CONFIG=1我在其他类似错误中看到的变量。

有谁知道发生了什么事吗?

Ant*_*ton 5

我有同样的问题。这让我很头疼,因为我在 AWS Fargate 中运行它,并且调试在那里并不那么容易。

该错误意味着 Javascript SDK 找不到 AWS 凭证。您可以在此处查看 SDK 尝试从以下位置加载凭证的顺序:https: //docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html

我的错误非常尴尬,我只是环境变量中有一个拼写错误。我的变量AWS_ACCESSS_KEY_ID不是AWS_ACCESS_KEY_ID. (很难看出区别,对吧?)

因此,可能会仔细检查环境变量(或配置文件)的名称