上下文:我正在开发一个基于云的 IDE 项目,其中每个用户在 Docker 容器中都有一个隔离的环境。这些容器由 AWS ECS Fargate 管理。我需要将代码和其他资源从本地系统(或用户指定的位置)复制到这些 Fargate 容器中,而不需要在容器内共享 AWS CLI 凭证。
当前设置:
我正在使用 AWS ECS Fargate 来运行我的容器。
该应用程序涉及多容器设置,每个容器为不同用户处理独立的工作负载。
我将代码存储在 S3 中,但出于安全原因(不与托管环境共享 AWS 凭证),我不希望容器使用 AWS CLI 访问文件。
我尝试在运行时将文件直接从本地存储复制到容器中,但遇到问题,因为 Fargate 无法像常规 EC2 或本地 Docker 环境那样提供对 Docker 守护进程或文件系统的直接访问。
任何有效处理这种情况的建议或指示将不胜感激!
尝试过的方法:
我尝试使用
dockerode
,但这不适用于 ECS Fargate,因为无法像标准 Docker 设置那样直接访问 Docker。
我尝试使用
aws-sdk
复制文件以与容器内的 S3 交互,但我想避免依赖容器内的 AWS CLI(并避免存储 AWS 凭证)。
考虑使用 SCP 或类似工具,但由于其托管性质并且缺乏对容器的直接 shell 访问,这种方法似乎也不适合 Fargate 模型。
我的要求:
我需要将用户特定的代码(或其他文件)从本地文件系统或任何特定位置安全地传输到我的 ECS Fargate 容器以供执行。
我想避免在容器环境中使用 AWS 凭证登录。
该解决方案需要可扩展,因为会为不同的用户动态启动多个容器。
问题:
有没有一种方法可以将文件从本地文件系统直接复制到 ECS Fargate 容器中,而不需要 AWS CLI 凭证?
我可以使用哪些替代方案在运行时安全地将用户数据传输到 Fargate 容器,而不暴露容器内的 AWS 凭证?
在需要跨不同任务持续访问文件的多容器 Fargate 应用程序中,是否有处理文件传输的最佳实践?
你可以:
这是对您的要求的字面解释 - 我不知道这是否是正确的方法,但如果您打算“没有任何 AWS 凭证”,这可能是解决方法。预签名 s3 链接是向您的 s3 存储桶上传或下载特定文件的临时权限,它们不需要用户有权访问您的 AWS 凭证。
只需生成一个“个人”、每个任务、预签名的 s3 下载链接,并在启动时将它们传递到容器中(从任务定义)。在本地计算机端,同样 - 获取预签名的上传链接并使用它。
只需为每个任务创建一个 IAM 角色,并使用范围缩小的 IAM 策略,该策略仅允许从特定存储桶(或存储桶文件夹)获取对象并将其分配给任务。 ECS 将获取并刷新临时凭证。有了这些临时凭证,即使客户用它们调用 s3,他们所能得到的也只是他们自己的代码(如果他们设法将凭证传递到容器之外,那么它们是临时的,默认情况下会在几分钟后过期,并且仍然只导致他们自己的代码)。
要在这些解决方案中添加一个额外的层,您可以在 sidecar 容器中执行 s3 代码获取,并将代码放入与“客户”容器的共享卷中。我不认为 sidecar 本身是一种安全保证,但它可能是您的逻辑和客户提供的逻辑之间的良好分离层。您仍然可以共享底层内存和空间限制,但除此之外,您自己的代码可以更好地隔离并且不易被篡改,然后它将在同一个容器中运行。
有一些关于 Fargate 容器的安全实践的非常好的读物 - 如果您打算执行随机代码,这绝对是必要的,您应该执行所有这些以及更多操作。
对于您的问题: