gpt4 book ai didi

amazon-web-services - 如何在ECS中运行非Root用户

转载 作者:行者123 更新时间:2023-12-02 19:18:13 24 4
gpt4 key购买 nike

我构建了这个镜像并将其推送到我的 ECR 存储库

FROM ubuntu:latest

RUN useradd -ms /bin/bash toto_user

USER toto_user

然后,我将这个用户添加到我的任务定义中,toto_user。任务未运行,即使作为 root 用户也是如此。如果我通过 SSH 连接到该 ec2 并运行以下命令,它就可以正常工作:

docker run -v /:/host -it 09999999999.dkr.ecr.us-east-1.amazonaws.com/hello-world:avocado_secret_theft1

如何解决这个问题,有什么想法吗?

最佳答案

为了以非 root 用户身份运行任务,您必须首先拥有该用户。首先在 Dockerfile 中创建用户和组,如下所示:

RUN groupadd -r <group name> && useradd --no-log-init -r -g <group name> <user name>" 

然后,您可以通过在 Dockerfile 中使用“USER”以非根用户身份运行应用程序。 USER指令引用Docker文档,我们可以看到:

  • USER 指令设置用户名(或 UID)和可选的用户组(或 GID)以在运行图像时使用,并用于 Dockerfile 中跟在它后面的任何 RUN、CMD 和 ENTRYPOINT 指令。您可以使用“USER”语句来标记 docker 容器在运行时应以“”用户身份运行。有关更多信息,您可以引用 [1][2]。

这样,在运行ECS任务之前,您必须先与用户构建docker镜像并上传到ECR。

如果您不在 Dockerfile 中使用“USER”指令,您可以在创建 ECS 任务定义时指定带有用户名的“user”参数作为替代方式。在任务定义中指定“用户”参数将强制以该用户身份运行您的应用程序。而且docker镜像中必须存在该用户,否则任务启动失败。

“用户”参数在ECS任务定义中的格式可以如下:

  • 用户
  • 用户:组
  • uid
  • uid:gid
  • 用户:gid
  • uid:组

请注意,Windows 容器不支持此参数。有关“user”参数的更多详细信息,请参阅我们的公开文档[3]。

例如,下面是我的任务定义的片段:

{
"containerDefinitions": [
{
.
.
"user": “<user name>”, ### The task will be run as <user name>.
"privileged": null,
.
.
}
],
.
}

最后,请注意以非 root 用户身份运行会带来其自身的挑战,例如如果您在 80 上启动一个 LISTEN 进程,这是非 root 用户无法做到的。

引用:

[1] 用户 - 编写 Dockerfile 的最佳实践 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user

[2] https://docs.docker.com/engine/reference/builder/#user

[3] 任务定义参数 - 容器定义 - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions

关于amazon-web-services - 如何在ECS中运行非Root用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com