如何更新 Amazon ECS 容器代理程式上的私有儲存庫憑證?

2 分的閱讀內容
0

我想要在透過 AWS Secrets Manager 或環境變數提供的 Amazon Elastic Container Service (Amazon ECS) 容器代理程式上更新我的私有儲存庫憑證。

簡短說明

您可以使用任務定義中的 Secrets Manager 或環境變數,將私有儲存庫憑證提供給 Amazon ECS 容器代理程式

選擇下列其中一個選項:

  • 如果您使用 Secrets Manager 來提供私有儲存庫憑證,請依照使用 Secrets Manager 更新私的儲存庫憑證一節中的步驟進行操作。
  • 如果您使用執行個體使用者資料和環境變數來提供私有儲存庫憑證,請依照使用環境變數更新私有儲存庫憑證一節中的步驟進行操作。

**注意:**在容器執行個體上以純文字形式儲存憑證並不是安全性最佳做法。最佳做法是改用 Secrets Manager,除非在容器執行個體中儲存登錄檔憑證有直接的架構相依性。

解決方法

使用 Secrets Manager 更新私有儲存庫憑證

1.    開啟 Secrets Manager 主控台

2.    選擇您的機密,然後選擇擷取機密值

3.    選擇編輯

4.    更新私有登錄檔的儲存憑證,然後選擇儲存

若要繼續,請依照測試更新的私有儲存庫憑證一節中的步驟執行。

使用環境變數更新私有儲存庫憑證

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 變數的值更新為步驟 2 中的 Docker 驗證金鑰值。例如:

ECS_CLUSTER=TestECSCluster
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth","a2vpdGhhd3M6UGFzc3dvcmQ="}}

若要繼續,請依照重新啟動 ECS 容器代理程式一節中的步驟執行。

重新啟動 ECS 容器代理程式

1.    若要重新啟動 ECS 容器代理程式,請根據執行容器執行個體的 Amazon Machine Image (AMI) 執行下列任一命令。

Amazon Linux ECS 最佳化的 AMI:

$ sudo stop ecs && sudo start ecs

Amazon Linux 2 ECS 最佳化的 AMI:

$ sudo systemctl restart ecs

注意:若要更新 ECS 叢集中其他容器執行個體上的 /etc/ecs/ecs.config 檔案,請返回使用環境變數更新私有儲存庫憑證一節。然後,對每個容器執行個體執行更新程序。

若要繼續,請依照測試更新的私有儲存庫憑證一節中的步驟執行。

測試更新的私有儲存庫憑證

下列步驟假設您正在跨叢集部署更新的映像。

1.    開啟 Amazon ECS 主控台

2.    在導覽窗格中,選擇叢集,然後選取您的叢集。

3.    選取您的服務,然後選擇更新

4.    選取強制新部署核取方塊。

5.    對於最小運行狀況百分比,輸入 50

6.    完成設定精靈中的其餘步驟,然後選擇更新服務

7.    選擇檢視服務

8.    在部署索引標籤上,檢視新部署。Amazon ECS 會逐漸停止先前部署下的任務,然後在嘗試提取全新映像時重新啟動新部署下的任務。

**注意:**步驟 8 假設您的叢集有足夠的資源可成功執行滾動更新部署類型。

9.    選擇任務索引標籤,然後檢查每個任務及其狀態。

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

如果任務狀態設定為執行中 (CannotPullContainerError),則服務會更新此任務,但發生錯誤。ECS 容器代理程式無法提取新的容器映像,正在使用舊的快取映像。確認您的憑證已更新,然後執行其他服務部署更新。

**注意:**若要顯示任務的完整詳細資料並查看「拒絕提取存取」錯誤訊息,請為您的個別任務狀態選擇下拉式箭頭。例如:

CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'

相關資訊

Amazon ECS 容器代理程式組態

驗證格式

AWS 官方
AWS 官方已更新 3 年前