问题陈述:在没有 AWS CLI 凭证的情况下将文件复制到 ECS Fargate 容器

问题描述 投票:0回答:1

上下文:我正在开发一个基于云的 IDE 项目,其中每个用户在 Docker 容器中都有一个隔离的环境。这些容器由 AWS ECS Fargate 管理。我需要将代码和其他资源从本地系统(或用户指定的位置)复制到这些 Fargate 容器中,而不需要在容器内共享 AWS CLI 凭证。

当前设置:

  1. 我正在使用 AWS ECS Fargate 来运行我的容器。

  2. 该应用程序涉及多容器设置,每个容器为不同用户处理独立的工作负载。

  3. 我将代码存储在 S3 中,但出于安全原因(不与托管环境共享 AWS 凭证),我不希望容器使用 AWS CLI 访问文件。

  4. 我尝试在运行时将文件直接从本地存储复制到容器中,但遇到问题,因为 Fargate 无法像常规 EC2 或本地 Docker 环境那样提供对 Docker 守护进程或文件系统的直接访问。

任何有效处理这种情况的建议或指示将不胜感激!

尝试过的方法:

  1. 我尝试使用

    dockerode
    ,但这不适用于 ECS Fargate,因为无法像标准 Docker 设置那样直接访问 Docker。

  2. 我尝试使用

    aws-sdk
    复制文件以与容器内的 S3 交互,但我想避免依赖容器内的 AWS CLI(并避免存储 AWS 凭证)。

  3. 考虑使用 SCP 或类似工具,但由于其托管性质并且缺乏对容器的直接 shell 访问,这种方法似乎也不适合 Fargate 模型。

我的要求:

  • 我需要将用户特定的代码(或其他文件)从本地文件系统或任何特定位置安全地传输到我的 ECS Fargate 容器以供执行。

  • 我想避免在容器环境中使用 AWS 凭证登录。

  • 该解决方案需要可扩展,因为会为不同的用户动态启动多个容器。

问题:

  1. 有没有一种方法可以将文件从本地文件系统直接复制到 ECS Fargate 容器中,而不需要 AWS CLI 凭证?

  2. 我可以使用哪些替代方案在运行时安全地将用户数据传输到 Fargate 容器,而不暴露容器内的 AWS 凭证?

  3. 在需要跨不同任务持续访问文件的多容器 Fargate 应用程序中,是否有处理文件传输的最佳实践?

amazon-web-services docker devops amazon-ecs
1个回答
0
投票

你可以:

将代码分发到预签名的 s3 URL

这是对您的要求的字面解释 - 我不知道这是否是正确的方法,但如果您打算“没有任何 AWS 凭证”,这可能是解决方法。预签名 s3 链接是向您的 s3 存储桶上传或下载特定文件的临时权限,它们不需要用户有权访问您的 AWS 凭证。

只需生成一个“个人”、每个任务、预签名的 s3 下载链接,并在启动时将它们传递到容器中(从任务定义)。在本地计算机端,同样 - 获取预签名的上传链接并使用它。

使用与任务关联的范围缩小的 IAM 角色

只需为每个任务创建一个 IAM 角色,并使用范围缩小的 IAM 策略,该策略仅允许从特定存储桶(或存储桶文件夹)获取对象并将其分配给任务。 ECS 将获取并刷新临时凭证。有了这些临时凭证,即使客户用它们调用 s3,他们所能得到的也只是他们自己的代码(如果他们设法将凭证传递到容器之外,那么它们是临时的,默认情况下会在几分钟后过期,并且仍然只导致他们自己的代码)。

注释

  • 要在这些解决方案中添加一个额外的层,您可以在 sidecar 容器中执行 s3 代码获取,并将代码放入与“客户”容器的共享卷中。我不认为 sidecar 本身是一种安全保证,但它可能是您的逻辑和客户提供的逻辑之间的良好分离层。您仍然可以共享底层内存和空间限制,但除此之外,您自己的代码可以更好地隔离并且不易被篡改,然后它将在同一个容器中运行。

  • 有一些关于 Fargate 容器的安全实践的非常好的读物 - 如果您打算执行随机代码,这绝对是必要的,您应该执行所有这些以及更多操作。

对于您的问题:

  1. 不,不直接。
  2. 如前所述:预签名 URL 或缩小范围的 IAM 策略。
  3. S3 可能是最佳实践,除非您想在其上构建自己的层以添加更多限制。
© www.soinside.com 2019 - 2024. All rights reserved.