在 AWS Elastic Beanstalk 中存储外部 API 密钥

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 中存储外部 API 密钥【英文标题】:Storing external API key in AWS Elastic Beanstalk 【发布时间】:2021-05-24 23:12:48 【问题描述】:

我在 AWS 上存储外部 API(我从中获取 Spring Boot 应用程序上的一些数据)私钥时遇到问题。它作为弹性豆茎环境属性存储在那里。我在本地测试了以下代码,它可以工作,但是当我使用测试环境(AWS)时,属性已正确加载,但出现错误:

Illegal base64 character a at a

私钥只是:

-----BEGIN PRIVATE KEY-----
(...)
-----END PRIVATE KEY-----

每当我从文件或作为弹簧属性加载它时,它都能很好地工作。但是,当它在 AWS 上作为 env 变量加载时,我收到了错误提示。

@Component
@Slf4j
public class SfKeyLoaderImpl implements SfKeyLoader 

  @Value("$access-token-params.private-key")
  private String privateKeyString;

  @Override
  public PrivateKey loadKey() 

    PrivateKey privateKey = null;

    try 
      String formattedKey = privateKeyString
          .replaceAll("\r\n", "")
          .replace("-----BEGIN PRIVATE KEY-----", "")
          .replace("-----END PRIVATE KEY-----", "")
          .replaceAll(" ", "");
      KeyFactory factory = KeyFactory.getInstance("RSA");
      PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(formattedKey));
      privateKey = factory.generatePrivate(privSpec);

     catch (Exception ex) 
      log.error("Error while loading key for salesforce jwt generation", ex);
    

    return privateKey;
  

抛出错误的部分代码:

  PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(formattedKey));

【问题讨论】:

【参考方案1】:

两天后我们发现 .replaceAll("\r\n", "") 在 Windows 上已经足够了,但我们遇到了一个问题,因为在 Linux 上也应该添加 .replaceAll("\n", "")存储在 AWS 上的私钥的过程。

【讨论】:

以上是关于在 AWS Elastic Beanstalk 中存储外部 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS elastic-beanstalk 中更改我的 python 版本

如何在 AWS Elastic Beanstalk 中更改数据库配置

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

如何在 AWS Elastic Beanstalk 中选择特定平台?

在 AWS Elastic Beanstalk 中运行 composer 命令

AWS Elastic Beanstalk 中的 HTTPS 配置