是否有一种方法可以使用NuxtJ来保持我的AWS秘密和keyId?我使用它们将文件上传到我的存储桶,并且可以肯定的是,我想隐藏我的凭据。 谢谢
遵循我用于将文件上传到Amazon S3的代码
async PutAmazonBucket() {
if (this.selectedFile) {
AWS.config.update({
accessKeyId: "",
secretAccessKey: "",
region: ""
});
var s3 = new AWS.S3();
var params = {
Bucket: "buvketName",
Key:
"folder/" +
Date.now() +
"_" +
this.selectedFile.name,
ContentType: this.selectedFile.type,
Body: this.selectedFile,
ACL: "public-read"
};
await s3
.putObject(params, (err, data) => {
if (err) {
alert("Error, please try again.");
this.showProgess = false;
} else {
this.editedItem.fileUrl =
"https://s3.ca-central-1.amazonaws.com/" +
params.Bucket +
"/" +
params.Key;
this.uploadComplete();
alert("File uploaded successfully.");
}
})
.on("httpUploadProgress", (progressEvent) => {
this.uploadPercentage = parseInt(
Math.round((progressEvent.loaded * 100) / progressEvent.total)
);
});
}
},
答案 0 :(得分:1)
标准方法是在主目录中keep a .aws/credentials
file。默认情况下,AWS CLI以及使用它的许多软件包都将在此处显示。
因此,您将拥有一个文件~/.aws/credentials
(无扩展名),其中包含以下信息:
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
您可以在~/.aws/config
中保留其他不太敏感的配置选项:
[default]
region=us-west-2
output=json
编辑:上述解决方案并非特定于Nuxt。我正在做假设,但是如果您要使用的是this Gulp example from the Nuxt docs for deploying to s3,并且您将它们存储在credentials
中,则可以完全删除~/.aws/
块。
编辑2:为澄清起见,如果使用默认配置文件(上述),则默认情况下,AWS CLI将在此处查找您的凭证。您根本不需要在脚本中引用它们。但是,如果由于某种原因它抱怨您可以在部署脚本中set it explicitly使用
:var credentials = new AWS.SharedIniFileCredentials({profile: 'default'});
AWS.config.credentials = credentials;
该方法通常用于指定默认配置文件以外的配置文件,因为您无需指定默认配置文件。例如,如果您有一个个人AWS帐户和一个工作AWS帐户,则可以将工作凭证保存在相同的~/.aws/credentials
文件中,并带有[work]
的另一个条目,并将{profile: 'default'}
替换为{{1 }}。
编辑3:以上假设您正在从本地计算机部署到s3。如果服务器将上传文件,则可以将凭据设置为环境变量。 For heroku:
{profile: 'work'}
然后像以前一样在您的上传脚本中访问它们:
$ heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy AWS_REGION=zzz
Managing config vars in Heroku:
无论何时使用任何方法设置或删除配置变量,都会重新启动您的应用并创建新版本。
Config var值是持久性的-在部署和应用重新启动期间它们保持不变。除非需要更改值,否则只需设置一次即可。