跳至內容

如何更新 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. 選擇您的機密,然後選擇擷取機密值
  3. 選擇 Edit (編輯)。
  4. 更新私有登錄檔的儲存憑證,然後選擇儲存
  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 容器代理程式,請根據執行容器執行個體的 Amazon Machine Image (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 (任務) 索引標籤,然後檢查每個任務及其狀態。

如果新任務狀態設定為執行中,則服務會成功更新此任務,而不會發生錯誤。

如果新任務的最後狀態設定為已停止 | 任務啟動失敗,則服務會更新此任務,然後遇到錯誤。ECS 容器代理程式無法提取新的容器映像檔,正在使用舊的快取映像。確認您的憑證已更新,然後執行其他服務部署更新。

注意: 若要顯示任務的完整詳細資訊並查看「拒絕提取存取」錯誤,請選擇失敗的任務 ID。在 Description (描述) 頁面的 Containers (容器) 下,選取 Stopped (已停止)。

錯誤訊息範例:

「CannotPullContainerError: 常駐程式的錯誤回應:拒絕使用者/儲存庫名稱的提取存取,存儲庫不存在或可能需要『Docker 登入』」

相關資訊

Amazon ECS 容器代理程式組態

驗證格式

AWS 官方已更新 2 年前