无法在 JavaScript 中从 AWS 检索机密

问题描述 投票:0回答:1

我有一个javascript文件

secretServer.js
,它是我与
node secretServer.js
一起运行的服务器,它在端口3030上托管一个快速服务器。我正在尝试这样做,以便如果我访问路线
/secretTest
,它会从中获取一个秘密AWS秘密管理器并返回值。这是我的
secretServer.js
文件:

const algoliasearch = require("algoliasearch");
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3030;

// Enable CORS for all routes
app.use(cors());

const { GetSecretValueCommand, SecretsManagerClient } = require("@aws-sdk/client-secrets-manager");
const getSecretValue = async (secretName = "SECRET_NAME") => {
  const client = new SecretsManagerClient({
    region: process.env.AWS_REGION || "us-west-2",
  });
  try {
    const response = await client.send(
      new GetSecretValueCommand({
        SecretId: secretName,
      })
    );
    console.log(response)
    return response.SecretString;
  } catch (error) {
    console.error('Error retrieving secret:', error);
    throw error;
  }
}

// Retrieve secrets from AWS
async function retrieveSecretsFromAWS() {
  return new Promise(async function (resolve, reject) {
    let response = "init rsp val";
    try {
      response = await getSecretValue("algoliaDbIndex_Secret_Name");
    } catch (error) {
      response = `Error getting aws secret: ${error}`
    }
    console.log('response=', response)
    resolve(response);
  });
}

app.get('/secretTest', async (req, res) => {
  let awsSecret = await retrieveSecretsFromAWS();
  res.send({ 'awsSecret': awsSecret });
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

当我运行服务器并访问 http://localhost:3030/secretTest 时,我得到以下响应:

{
    "awsSecret": "Error getting aws secret: CredentialsProviderError: Could not load credentials from any providers"
}

并在我的日志中看到此错误:

C:\Users\martin\Documents\projects\aws-react-docker-ghactions>node secretServer.js
Server is running on port 3030
Error retrieving secret: CredentialsProviderError: Could not load credentials from any providers
    at C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@aws-sdk\credential-provider-node\dist-cjs\index.js:112:13
    at C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:97:33
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async coalesceProvider (C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:124:18) 
    at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:142:18
    at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\core\dist-cjs\index.js:82:17
    at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@aws-sdk\middleware-logger\dist-cjs\index.js:34:22
    at async getSecretValue (C:\Users\martin\Documents\projects\aws-react-docker-ghactions\secretServer.js:16:22)
    at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\secretServer.js:34:18 {
  tryNextLink: false
}
response= Error getting aws secret: CredentialsProviderError: Could not load credentials from any providers

我尝试检索的秘密名称为“algoliaDbIndex_Secret_Name”,这是显示秘密存在的屏幕截图,为什么我无法检索它?

enter image description here

javascript node.js amazon-web-services aws-secrets-manager
1个回答
0
投票

您似乎没有在任何地方设置 AWS 凭证。您可以通过多种方式定义您的 AWS 凭证。您可以使用环境变量、凭证或配置文件等。以下文档解释了 AWS 在其中查找凭证时使用的操作顺序:https://docs.aws.amazon.com/cli/v1/userguide /cli-chap-configure.html

© www.soinside.com 2019 - 2024. All rights reserved.