在 amplify 中获取 aws_access_key_id 和 aws_secret_access_key
Get aws_access_key_id and aws_secret_access_key in amplify
我正在使用 create-react-app
构建一个 React 应用程序,它使用 javascript aws sdk 连接到 dynamodb。我让它在本地工作,但是当托管在 AWS Amplify 上时我无法让它工作。我的症结是我不知道如何将 Amplify 中的 aws_access_key_id 和 aws_secret_access_key 传递给 React 应用程序。
在本地,我有一个包含 REACT_APP_AWS_ACCESS_KEY_ID
和 REACT_APP_AWS_SECRET_ACCESS_KEY
的 .env 文件。这些当然没有在Amplify中定义。
在 package.json 中,我尝试在构建脚本中设置变量。我什至尝试单独使用 access_key_id 来排除一次设置两个变量的问题。
"scripts": {
"build": "REACT_APP_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID REACT_APP_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY react-scripts build",
},
但是,这会导致 REACT_APP_ 变量的值为空。
我尝试以两种不同的方式修改 Amplify 应用程序构建设置,有和没有 package.json 更改,也没有成功。
build:
commands:
- npm run build
- echo "REACT_APP_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> .env
build:
commands:
- npm run build
- echo "REACT_APP_AWS_ACCESS_KEY_ID=$REACT_APP_AWS_ACCESS_KEY_ID" >> .env
我不知道我还能做什么,或者我是否完全走错了路。我非常确定当应用程序在生态系统中 运行 时,AWS 环境会注入这些,因为我已经看到它与 Elastic Beanstalk 上托管的不同应用程序一起工作。
最终我需要的是 access_key_id 和 secret_access_key 用于 javascript aws sdk 来初始化 dynamodb 客户端。
const client = new DynamoDB({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.REACT_APP_AWS_SECRET_ACCESS_KEY
}
});
如果您希望 amplify 能够在构建时访问它们,您需要 set env vars 在 amplify 控制台中。
我相信你知道这一点,但以这种方式将你的 aws 凭证包含在你的 React 客户端包中几乎总是一个非常糟糕的主意。您的所有网络用户都可以读取您的明文机密。
As Aws reminds us: Storing sensitive values, such as API keys, inside these frontend framework prefixed environment variables is not a best practice and is highly discouraged
我正在使用 create-react-app
构建一个 React 应用程序,它使用 javascript aws sdk 连接到 dynamodb。我让它在本地工作,但是当托管在 AWS Amplify 上时我无法让它工作。我的症结是我不知道如何将 Amplify 中的 aws_access_key_id 和 aws_secret_access_key 传递给 React 应用程序。
在本地,我有一个包含 REACT_APP_AWS_ACCESS_KEY_ID
和 REACT_APP_AWS_SECRET_ACCESS_KEY
的 .env 文件。这些当然没有在Amplify中定义。
在 package.json 中,我尝试在构建脚本中设置变量。我什至尝试单独使用 access_key_id 来排除一次设置两个变量的问题。
"scripts": {
"build": "REACT_APP_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID REACT_APP_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY react-scripts build",
},
但是,这会导致 REACT_APP_ 变量的值为空。
我尝试以两种不同的方式修改 Amplify 应用程序构建设置,有和没有 package.json 更改,也没有成功。
build:
commands:
- npm run build
- echo "REACT_APP_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> .env
build:
commands:
- npm run build
- echo "REACT_APP_AWS_ACCESS_KEY_ID=$REACT_APP_AWS_ACCESS_KEY_ID" >> .env
我不知道我还能做什么,或者我是否完全走错了路。我非常确定当应用程序在生态系统中 运行 时,AWS 环境会注入这些,因为我已经看到它与 Elastic Beanstalk 上托管的不同应用程序一起工作。
最终我需要的是 access_key_id 和 secret_access_key 用于 javascript aws sdk 来初始化 dynamodb 客户端。
const client = new DynamoDB({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.REACT_APP_AWS_SECRET_ACCESS_KEY
}
});
如果您希望 amplify 能够在构建时访问它们,您需要 set env vars 在 amplify 控制台中。
我相信你知道这一点,但以这种方式将你的 aws 凭证包含在你的 React 客户端包中几乎总是一个非常糟糕的主意。您的所有网络用户都可以读取您的明文机密。
As Aws reminds us: Storing sensitive values, such as API keys, inside these frontend framework prefixed environment variables is not a best practice and is highly discouraged