【问题标题】:How to set path for GOOGLE_APPLICATION_CREDENTIALS in AWS Elastic Beanstalk如何在 AWS Elastic Beanstalk 中为 GOOGLE_APPLICATION_CREDENTIALS 设置路径
【发布时间】:2021-01-21 16:37:47
【问题描述】:

我有一个 SpringBoot 项目,我在其中使用 firebase 身份验证,GOOGLE_APPLICATION_CREDENTIALS 在我的本地机器中设置环境变量为我从 Google Cloud 控制台下载的 json 文件的路径。

但现在我正在将应用程序 (jar) 部署到 Elastic Beanstalk,但我不确定如何在那里设置该路径以及该文件的放置位置?

【问题讨论】:

    标签: amazon-web-services spring-boot google-cloud-platform firebase-authentication amazon-elastic-beanstalk


    【解决方案1】:

    终于找到了解决方法,我将我的 google 凭据文件 (firebase-server-config.json) 放在 spring-boot 项目路径 /src/main/resources/ 中,并通过读取文件流来提供凭据。

        @Primary
        @Bean
        public void initFirebase() throws IOException {
            FirebaseOptions options = FirebaseOptions.builder().setCredentials(GoogleCredentials.fromStream(getClass().getClassLoader().getResourceAsStream("firebase-server-config.json"))).build();
            if (FirebaseApp.getApps().isEmpty()) {
                FirebaseApp.initializeApp(options);
            }
        }
    

    pom.xml 依赖

        <dependency>
            <groupId>com.google.firebase</groupId>
            <artifactId>firebase-admin</artifactId>
            <version>7.0.0</version>
        </dependency>
    

    【讨论】:

    • 您能接受您的回答吗?通过这种方式,社区成员可以轻松确定问题的解决方案。
    • @JossBaron,当然,我会这样做,因为现在它不允许我这样做并说'你可以在 9 小时后标记它'.. 感谢您的指导。
    • 这对我有用。考虑到限制,使用 S3 方法似乎是更优雅的方法,但令人沮丧的是它在 AWS Elastic Beanstalk 中并不直接,并且环境属性不起作用。
    【解决方案2】:

    如果您不想将凭据存储为代码库的一部分,可以使用以下步骤:

    1. 从 Google Cloud 下载服务帐号凭据 JSON 文件。
    2. 从 JSON 文件中获取编码字符串 对于 base64 编码,您可以使用其中一种在线实用程序或系统命令来执行此操作。对于 Linux 和 Mac,您可以使用 base64 > 将文件内容打印为 base64 编码的字符串。
    3. 在 Secrets Manager 控制台上,选择存储新密钥。
    4. 对于机密类型,选择其他类型的机密。
    5. 输入您的密钥作为凭据,输入值作为 base64 编码的字符串。
    6. 将其余选项保留为默认值。
    7. 选择下一步。
    8. 为秘密 bigquery_credentials 命名。
    9. 按照其余步骤存储机密。

    这里是完整说明的链接: https://aws.amazon.com/blogs/big-data/migrating-data-from-google-bigquery-to-amazon-s3-using-aws-glue-custom-connectors/

    【讨论】:

      【解决方案3】:

      我猜 Elastic Beanstalk 仍然不支持环境变量中的 JSON 值。此外,如果其他有权访问 EBS 的用户可以看到凭据,则将凭据保存在环境变量中可能会很危险。

      这里提出了一个类似的问题并分享了一些解决方法:How to config Meteor on AWS/EBS using METEOR_SETTINGS environment variable

      Amazon 建议的一种方法是将 JSON 文件存储在 s3 存储桶中,并在部署阶段使用配置从存储桶下载它。 亚马逊提供了一个非常合适的solution,用于使用外部 JSON 文件存储要在 EBS 中使用的凭证

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-07
        • 2015-03-18
        • 2016-04-20
        • 2020-11-06
        • 2017-04-20
        • 2020-05-30
        • 2021-01-22
        相关资源
        最近更新 更多