AWS S3 - 凭据在代码中公开
AWS S3 - credentials exposed in code
我是 AWS 的新手,遇到了一些安全问题。
我想允许我的用户上传个人资料照片并将其保存在 S3 中。
我的代码如下所示:
import AWS_S3 from 'aws-sdk/clients/s3';
import config from '../../config';
const myS3Credentials = {
accessKeyId: config('AWSS3AccessKeyID'),
secretAcccessKey: config('AWSS3SecretAccessKey'),
};
console.log('myS3Credentials:', myS3Credentials);
const S3 = new AWS_S3({
credentials: myS3Credentials,
region: config('AWSS3Region'),
});
所有变量(如 AWSS3Region
和我的凭据)都在 .env
文件中设置。但在这里,我在代码中公开了它们。如何避免这种情况?或者我应该设置一些存储桶权限?
只需调用您的代码 process.env.<YOUR_KEY>
。
您应该 never, ever send/expose 直接在您的客户端代码中访问 AWS 令牌。
将该代码放在服务器上并调用您的服务器代码,这反过来又调用 AWS。
在您的服务器上,您也不应使用硬编码访问密钥。正如 Alejandro 在下面的 中所述,使用环境变量获取访问令牌。
您可以使用在 S3 对象上公开的 aws sdk getSignedUrl 方法。这将允许您直接从客户端上传到您的存储桶,而不会暴露您的访问令牌。您可以通过将访问令牌保留在 .env 文件中并将该文件保留在您的存储库之外来确保访问令牌的安全。
创建签名 url 需要在您的服务器上创建一个端点,该端点将 return 签名 URL。从那里您将执行包含图像的放置请求。我用一个例子创建了一个要点。要点中有客户端和服务器代码。 https://gist.github.com/pizza-r0b/35be6dd3e992ef1ebb2159772cb768c0
强烈建议不要在客户端代码中存储永久凭据以将文件上传到 S3。有几种方法可以安全地处理这个问题。
- 使用 AWS STS SDK 或使用类似 AWS Cognito.
的服务从您的后端获取临时访问凭证
- 使用 AWS CloudFront Signed URLs or Signed Cookies 从服务器发回客户端,这样您就可以使用它们将文件上传到 S3。
下面列出了一些可以帮助您开始使用签名网址的参考资料。
我是 AWS 的新手,遇到了一些安全问题。
我想允许我的用户上传个人资料照片并将其保存在 S3 中。 我的代码如下所示:
import AWS_S3 from 'aws-sdk/clients/s3';
import config from '../../config';
const myS3Credentials = {
accessKeyId: config('AWSS3AccessKeyID'),
secretAcccessKey: config('AWSS3SecretAccessKey'),
};
console.log('myS3Credentials:', myS3Credentials);
const S3 = new AWS_S3({
credentials: myS3Credentials,
region: config('AWSS3Region'),
});
所有变量(如 AWSS3Region
和我的凭据)都在 .env
文件中设置。但在这里,我在代码中公开了它们。如何避免这种情况?或者我应该设置一些存储桶权限?
只需调用您的代码 process.env.<YOUR_KEY>
。
您应该 never, ever send/expose 直接在您的客户端代码中访问 AWS 令牌。
将该代码放在服务器上并调用您的服务器代码,这反过来又调用 AWS。
在您的服务器上,您也不应使用硬编码访问密钥。正如 Alejandro 在下面的
您可以使用在 S3 对象上公开的 aws sdk getSignedUrl 方法。这将允许您直接从客户端上传到您的存储桶,而不会暴露您的访问令牌。您可以通过将访问令牌保留在 .env 文件中并将该文件保留在您的存储库之外来确保访问令牌的安全。
创建签名 url 需要在您的服务器上创建一个端点,该端点将 return 签名 URL。从那里您将执行包含图像的放置请求。我用一个例子创建了一个要点。要点中有客户端和服务器代码。 https://gist.github.com/pizza-r0b/35be6dd3e992ef1ebb2159772cb768c0
强烈建议不要在客户端代码中存储永久凭据以将文件上传到 S3。有几种方法可以安全地处理这个问题。
- 使用 AWS STS SDK 或使用类似 AWS Cognito. 的服务从您的后端获取临时访问凭证
- 使用 AWS CloudFront Signed URLs or Signed Cookies 从服务器发回客户端,这样您就可以使用它们将文件上传到 S3。
下面列出了一些可以帮助您开始使用签名网址的参考资料。