如何在 openshift 上将文件从 AWS S3 存储桶下载到 springboot 应用程序?

问题描述

我的 Spring Boot 应用程序将部署在 Openshift 上,我需要从我的应用程序中从其他 n/w 上的 AWS S3 存储桶下载文件。 连接到 S3 并获取文件的最佳方式是什么。我正在尝试使用 AmazonS3 客户端。我是否需要在 openshift 基础设施级别进行配置?有没有其他方法可以下载文件

解决方法

这是我建议的使用 IAM 角色的方法。

https://aws.amazon.com/blogs/compute/a-guide-to-locally-testing-containers-with-amazon-ecs-local-endpoints-and-docker-compose/

场景:使用任务 IAM 角色凭证进行测试 端点容器映像还可以提供来自 IAM 角色的凭证;这允许您使用 Task IAM 角色在本地测试您的应用程序。

注意:您不应在本地使用您的生产任务 IAM 角色。相反,创建一个单独的测试角色,具有适用于测试资源的等效权限。修改生产角色的信任边界会扩大其范围。

为了在本地使用 Task IAM 角色,您必须修改其信任策略。首先,获取由您的默认 AWS CLI 配置文件定义的 IAM 用户的 ARN(如果需要,将 default 替换为不同的配置文件名称):

aws --profile 默认 sts get-caller-identity

然后修改您的任务 IAM 角色,使其信任策略包含以下语句。您可以在 IAM 文档中找到修改 IAM 角色的说明。

{
  "Effect": "Allow","Principal": {
    "AWS": <ARN of the user found with get-caller-identity>
  },"Action": "sts:AssumeRole"
}

要在 docker compose 文件中使用 Task IAM 角色进行本地测试,只需更改应用程序容器上的 AWS 容器凭证相对 URI 环境变量的值:

AWS_CONTAINER_CREDENTIALS_RELATIVE_URI:“/role/”

例如,如果您的角色名为 ecs_task_role,则环境变量应设置为“/role/ecs_task_role”。这就是所需要的; ecs-local-endpoints 容器现在将提供通过承担任务角色获得的凭据。您可以使用它来验证在您的 Task IAM 角色上设置的权限是否足以运行您的应用程序。