【问题标题】:Access AWS Secrets Manager from Spring Boot REST Endpoint从 Spring Boot REST Endpoint 访问 AWS Secrets Manager
【发布时间】:2021-10-03 09:27:26
【问题描述】:

我正在尝试通过我在 Spring Boot 中配置的 REST API 端点从 AWS Secrets Manager 获取凭证。如果我输入端点的 URL + 参数,我会得到我期望的对象。具有端点的站点也通过 AWS 托管。

当我尝试从我的 Angular 开发服务器访问端点时,我总是得到未经授权的 401。我使用 Angular 的代理来访问跨域端点,以便 Cognito 进行身份验证,访问 Lambda 端点等等,从来没有遇到过问题,但我无法让它与这个 Spring Boot 端点一起工作。在与 AWS Support 进行了长时间通话后,我认为这不是 Secrets Manager 甚至是 AWS 问题。

Spring 端点(我非常 Java 新手,所以这可能需要特定的标头?):

@GetMapping("/REST/getSecret")
    public String getSecret(@RequestParam String name) {
        String secretName = getSecretByName(name);

        JsonParser parser = new JsonParser();
        Object secretObj = parser.parse(secretName);
        JsonObject secretKeys = (JsonObject) secretObj;

        return secretKeys.toString();
}

Angular 服务检索密钥:

getSecret(secretName: String): Observable<any> {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'Cache-Control': 'public' // likely unecessary, was trying to make sure cache was clearing at the time
    });
    return this.http.get<any>(
      // this.secretConfig.getSecretUrl() + `/getSecret?name=${secretName}`, // Live Site
      this.secretConfig.getSecretUrl() + `/getSecret/${secretName}`, // Dev
      {
        headers: headers
      }
    ).pipe(map(secret => JSON.parse(secret)));
  }

Live Site 评论只是展示了在整个托管过程中什么是有效的

角度代理:

"/getSecret": {
    "target": "https://websiteurl.com/REST/getSecret?name=",
    "secure": false,
    "logLevel": "debug",
    "changeOrigin": true
  }

代理配置看起来很有趣,但这正是我设置它以通过 Lambda 函数运行带有参数的搜索并且按预期工作的方式。

此时我唯一的猜测是我可能需要在我的 REST 端点上设置特定的标头,并且在尝试通过 Angular HTTP 调用提取数据时?如果是标头问题,那么我可能会使用在 8080 上运行的 Spring Boot 和在 4200 上运行的 Angular 在本地测试所有内容。目前,当两个实例在本地运行时会发生相同的错误。

非常感谢任何帮助!

【问题讨论】:

    标签: angular amazon-web-services spring-boot proxy aws-secrets-manager


    【解决方案1】:

    我可以通过向端点添加@CrossOrigin 注释并通过applications.properties 文件在本地打开一些安全设置来实现此功能。刚接触 Java 和 Spring,因此非常不熟悉框架的工作原理。

    @CrossOrigin(origins = "*", allowHeaders = "*")
    @GetMapping("/REST/getSecret")
    

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2020-09-28
      • 2021-10-14
      • 2020-10-26
      • 2021-01-19
      • 2023-01-01
      • 1970-01-01
      • 2020-04-24
      • 2018-11-20
      相关资源
      最近更新 更多