如何使用Nuxt JS隐藏我的AWS密钥和秘密?

时间:2019-06-22 03:35:15

标签: amazon-web-services amazon-s3 nuxt.js

是否有一种方法可以使用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)
            );
          });
      }
    },

1 个答案:

答案 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值是持久性的-在部署和应用重新启动期间它们保持不变。除非需要更改值,否则只需设置一次即可。