在 aws amplify react js 应用程序中访问 SSM 参数存储值

问题描述

我有一个使用 React JS 构建的放大应用程序,我有一个场景,我在我的 AWS 账户的 SSM 参数存储中手动存储 API 密钥。但是,我想根据我的 React JS 应用程序(客户端)中的键检索/获取这些值(JSON 对象)。所以,我已经安装了 aws-sdk、AWS JavaScript sdk,并使用下面的代码片段我试图访问 ssms 参数存储

["\tPer 100g\tPer 35g Ball\nEnergy\t449kcal\t157kcal\nFat\t24.4g\t8.6g\nSaturated fat\t4.5g\t1.6g\nMonounsaturated fat\t13.6g\t4.8g\npolyunsaturated fat\t5.2g\t1.8g\nTotal Carbohydrates\t31.0g\t10.9g\nSugars\t19.7g\t6.9g\nFibre\t6.1g\t2.1g\nProtein\t23.1g\t8.1g\nSalt\t0.71g\t0.25"]

我在运行应用程序和使用 getSecret 函数访问商店时收到此错误

未处理的拒绝(CredentialsError):配置中缺少凭据, 如果使用 AWS_CONfig_FILE,设置 AWS_SDK_LOAD_CONfig=1

我相信 amplify 隐式地配置了环境,但由于 Amplify 尚不支持 SSM Secrets 管理器,因此我必须为此使用 JS AWS SDK。任何人都可以帮助我在使用 AWS 开发工具包配置服务时发现问题吗?或者是否有另一种或更好的方式从客户端访问参数存储?

另外,冲浪后我发现了一个名为 dotenv

的包

以这种方式存储 aws 凭证可以吗?

解决方法

考虑到安全隐患,您用于获取 parameter store 键/值的代码不应位于客户端。它应该在服务器端完成,并且功能可以通过客户端的端点公开。

您可以像下面这样以编程方式读取凭据:

var AWS = require("aws-sdk");

var credentials = new AWS.SharedIniFileCredentials({profile: 'profile name'});
AWS.config.credentials = credentials;

参考:

  1. loading-node-credentials-shared
  2. global-config-object