pup*_*eno 6 google-app-engine spring-boot
我觉得我在这里转转,所以,请忍受我。我想将Spring Boot应用程序部署到App Engine,但与Google提供的简单示例不同,我需要数据库,这意味着需要凭据。我正在Google App Engine的Standard上运行Java 11。
我设法通过以下方法使我的应用程序成功连接application.properties:
spring.datasource.url=jdbc:postgresql://google/recruiters_wtf?cloudSqlInstance=recruiters-wtf:europe-west2:recruiters-wtf&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=the_user&password=monkey123
Run Code Online (Sandbox Code Playgroud)
问题是我不想将任何凭据提交到存储库,因此,这是不可接受的。我可以使用环境变量,但随后必须在app.yaml文件中定义它们。我要么保留app.yaml部署所需的未提交的文件(这很麻烦),要么提交它,然后回到第一层,向存储库提交凭据。
既然Google App Engine显然无法以任何其他方式定义环境变量(与Heroku不同),这是否意味着在不使用某些不安全/麻烦的做法的情况下就不可能将Spring Boot应用程序部署到App Engine并使其连接到数据库?我觉得我在这里缺少什么。
小智 2
根据我对您所描述内容的理解,您希望将在 Google App Engine 上运行的 Spring boot 应用程序连接到数据库,而不暴露敏感信息。如果是这样的话,我就发现Cloud KMS为用户提供了秘密管理的能力。具体来说,在构建或运行时需要小块敏感数据的应用程序被称为“秘密”。这些秘密可以使用对称密钥进行加密和解密。在您的情况下,您可以将数据库凭据存储为机密。您可以找到加密/解密秘密过程的更多详细信息您可以在此处。
\n\n目前有三种管理秘密的方法:
\n\n\n\n\n\n
\n- 将机密存储在代码中,并使用 Cloud KMS 中的密钥进行加密。该解决方案是在应用层实现秘密。
\n- 将机密存储在 Cloud Storage 的存储桶中,并进行静态加密。您可以使用 Cloud Storage:存储桶来存储您的数据库\n 凭据,还可以向该存储桶授予特定的服务帐户。\n 此解决方案允许分离系统。在代码存储库被破坏的情况下,您的秘密本身仍可能受到保护。
\n- 采用第三方保密管理系统。
\n
就存储秘密本身而言,我发现此处概述的以下步骤对此非常有用。本指南引导用户在 Cloud Storage 存储桶中设置和存储密钥。该秘密在应用程序层使用 Cloud KMS 的加密密钥进行加密。考虑到您的用例,这将是一个很好的选择,因为您的秘密将存储在存储桶而不是 app.yaml 文件中。此外,存储在存储桶中的机密将使您能够通过服务帐户角色限制对其的访问。
\n\n本质上,您的应用程序需要对 Google Cloud Storage 执行 API 调用,才能下载包含密钥的 KMS 加密文件。然后,它会使用 KMS 生成的密钥来解密文件,以便能够读出密码并使用它来手动连接到数据库。添加这些额外的步骤将实现更多的安全层,这就是 \xe2\x80\x9c\' 中提到的整个想法。注意:将凭据保存在环境变量中很方便,但不安全 - 考虑更安全的解决方案,例如 Cloud KMS帮助保守秘密。Cloud SQL 的 Google 示例存储库中的 \'\xe2\x80\x9d。
\n\n我希望这有帮助!
\n| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |