跳至内容

如何在 Amazon ECS 容器代理上更新我的私有存储库凭证?

2 分钟阅读
0

我想在通过 AWS Secrets Manager 或环境变量提供的 Amazon Elastic Container Service (Amazon ECS) 容器代理上更新我的私有存储库凭证。

简短描述

要向 Amazon ECS 容器代理提供私有存储库凭证,请在您的任务定义中使用 Secrets Manager 或环境变量。

**注意:**在容器实例上以明文形式存储凭证并不是一种安全最佳实践。除非在架构上存在直接依赖关系,必须在容器实例中存储注册表凭证,否则请改用 Secrets Manager。

解决方法

使用 Secrets Manager 更新您的私有存储库凭证

完成以下步骤:

  1. 打开 Secrets Manager 控制台
  2. 选择您的密钥,然后选择 Retrieve secret value(检索密钥值)。
  3. 选择 Edit(编辑)。
  4. 更新您的私有注册表的存储凭证,然后选择 Save(保存)。
  5. 完成“测试更新后的私有存储库凭证”部分中的步骤。

使用环境变量更新您的私有存储库凭证

完成以下步骤:

  1. 连接到您的容器实例
  2. 要查看如何向 ECS 容器代理提供 Docker 凭证,请运行以下命令:
    $ cat /etc/ecs/ecs.config
    此命令将返回 /etc/ecs/ecs.config 文件的内容。

如果 ECS_ENGINE_AUTH_TYPE 变量设置为 docker,则您可以通过明文形式直接将 Docker 凭证传递给 ECS 容器代理。但是,使用此方法并不是最佳实践。相反,请使用 Secrets Manager。或者,使用以下“**获取新的 Docker 身份验证值”**部分中的 dockercfg 格式方法。

如果 ECS_ENGINE_AUTH_TYPE 变量设置为 dockercfg,则您可以通过 docker login 命令生成的 Docker 所生成的身份验证值来传递 Docker 凭证。如果您使用此方法,请完成“获取新的 Docker 身份验证值”部分中的步骤。

获取新的 Docker 身份验证值

完成以下步骤:

  1. 要在本地登录您的 Docker 账户,请运行以下命令,然后输入您的新凭证:

    $ docker login
  2. 要连接您的 config.json 文件,请运行以下命令,然后复制 Docker 生成的身份验证密钥值:

    $ cat ~/.docker/config.json
  3. 要更新 ECS_ENGINE_AUTH_DATA 变量,请运行以下命令:

    $ sudo vi /etc/ecs/ecs.config
  4. 在 vi 编辑器中,将 ECS_ENGINE_AUTH_DATA 变量的值更新为 Docker 身份验证密钥值。示例:

    ECS_CLUSTER=TestECSCluster
    ECS_ENGINE_AUTH_TYPE=dockercfg
    ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"a2vpdGhhd3M6UGFzc3dvcmQ=","email":"email@example.com"}}
  5. 完成“重启 ECS 容器代理”部分中的步骤。

重启 ECS 容器代理

完成以下步骤:

  1. 要重启 ECS 容器代理,请根据您的容器实例正在运行的亚马逊机器映像 (AMI) 运行以下任一命令。
    Amazon Linux 2 ECS 优化型 AMI:
    $ sudo systemctl restart ecs
    **注意:**Amazon Linux 1 于 2023 年 12 月 31 日终止了生命周期。Amazon Linux AMI 将不再接收任何安全更新或错误修复。有关详细信息,请参阅“关于 Amazon Linux AMI 生命周期终止的更新”。
    Amazon Linux ECS 优化型 AMI:
    $ sudo stop ecs && sudo start ecs
    **注意:**要在 ECS 集群中的其他容器实例上更新 /etc/ecs/ecs.config 文件,请参阅“使用环境变量更新私有存储库凭证”。然后,按照每个容器实例的更新过程进行操作。
  2. 完成“测试更新后的私有存储库凭证”部分中的步骤。

测试更新后的私有存储库凭证

**注意:**在以下测试示例中,更新后的映像将部署在集群中。

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Clusters(集群),然后选择您的集群。
  3. 选择您的服务,然后选择 Update(更新)。
  4. 选中 Force new deployment(强制实施新部署)复选框。
  5. 选择 Update(更新)。
  6. Deployments(部署)选项卡上,查看新部署。Amazon ECS 会逐步停止先前部署下的任务。然后,Amazon ECS 会重新启动新部署下的任务,同时 ECS 会尝试拉取新的映像。
    **注意:**如果您使用 EC2 启动类型任务,则您的集群必须有足够的资源才能成功执行滚动更新部署类型。
  7. 选择 Tasks(任务)选项卡,然后查看每个单独的任务及其状态。

如果新任务的状态设置为 Running(正在运行),则表明服务成功更新了任务,且未出现错误。

如果新任务的最后状态设置为 Stopped | Task failed to start(已停止 | 任务启动失败),则表明服务更新了此任务,然后遇到了错误。ECS 容器代理无法拉取新的容器映像,正在使用旧的缓存映像。验证您的凭证是否已更新,然后再次执行服务部署更新操作。

**注意:**要显示任务的完整详细信息并查看“pull access denied”(拉取访问被拒绝)错误,请选择失败的任务 ID。在 Description(描述)页面的 Containers(容器)下,选择 Stopped(已停止)。

错误消息示例:

“CannotPullContainerError: 来自进程守护程序的错误响应:对用户/存储库名称的拉取访问被拒绝,存储库不存在或可能需要 'docker login'”

相关信息

Amazon ECS 容器代理配置

身份验证格式

AWS 官方已更新 1 年前