我想要在透過 AWS Secrets Manager 或環境變數提供的 Amazon Elastic Container Service (Amazon ECS) 容器代理程式上更新我的私有儲存庫憑證。
簡短說明
若要提供 Amazon ECS 容器代理程式私人儲存庫憑證,請在任務定義或環境變數中使用 Secrets Manager。
注意: 在容器執行個體上以純文字形式儲存憑證並不是最佳安全性做法。除非在容器執行個體中儲存登錄檔憑證有直接的架構相依性,否則請改用 Secrets Manager。
解決方法
使用 Secrets Manager 更新私有儲存庫憑證
請完成下列步驟:
- 開啟 Secrets Manager 主控台。
- 選擇您的機密,然後選擇擷取機密值。
- 選擇 Edit (編輯)。
- 更新私有登錄檔的儲存憑證,然後選擇儲存。
- 完成測試更新的私有儲存庫憑證一節中的步驟。
使用環境變數更新私有儲存庫憑證
請完成下列步驟:
- 連線至容器執行個體。
- 若要查看如何向 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 驗證值
請完成下列步驟:
-
若要在本機登入 Docker,請執行下列命令,然後輸入新的憑證:
$ docker login
-
若要連接 config.json 檔案,請執行下列命令,然後複製 Docker 產生的驗證金鑰值:
$ cat ~/.docker/config.json
-
若要更新 ECS_ENGINE_AUTH_DATA 變數,請執行下列命令:
$ sudo vi /etc/ecs/ecs.config
-
在 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"}}
-
完成重新啟動 ECS 容器代理程式一節中的步驟。
重新啟動 ECS 容器代理程式
請完成下列步驟:
- 若要重新啟動 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 檔案,請參閱使用環境變數更新私有儲存庫憑證。然後,對每個容器執行個體執行更新程序。
- 完成測試更新的私有儲存庫憑證一節中的步驟。
測試更新的私有儲存庫憑證
注意: 在以下測試範例中,更新後的映像檔會部署到整個叢集中。
請完成下列步驟:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇 Clusters (叢集),然後選取您的叢集。
- 選取您的服務,然後選擇 Update (更新)。
- 選取 Force new deployment (強制執行新部署) 核取方塊。
- 選擇 Update (更新)。
- 在 Deployments (部署) 索引標籤上,檢視新部署。Amazon ECS 逐漸停止先前部署下的任務。然後,Amazon ECS 會重新啟動新部署下的任務,同時 ECS 會嘗試提取新的映像檔。
注意: 如果您使用 EC2 啟動類型任務,那麼您的叢集必須具有足夠的資源才能成功執行滾動更新部署類型。
- 選擇 Tasks (任務) 索引標籤,然後檢查每個任務及其狀態。
如果新任務狀態設定為執行中,則服務會成功更新此任務,而不會發生錯誤。
如果新任務的最後狀態設定為已停止 | 任務啟動失敗,則服務會更新此任務,然後遇到錯誤。ECS 容器代理程式無法提取新的容器映像檔,正在使用舊的快取映像。確認您的憑證已更新,然後執行其他服務部署更新。
注意: 若要顯示任務的完整詳細資訊並查看「拒絕提取存取」錯誤,請選擇失敗的任務 ID。在 Description (描述) 頁面的 Containers (容器) 下,選取 Stopped (已停止)。
錯誤訊息範例:
「CannotPullContainerError: 常駐程式的錯誤回應:拒絕使用者/儲存庫名稱的提取存取,存儲庫不存在或可能需要『Docker 登入』」
相關資訊
Amazon ECS 容器代理程式組態
驗證格式