在 Amazon ECS 中使用非 AWS 容器映像
使用私有登錄檔將憑證儲存於 AWS Secrets Manager 中,然後在任務定義中加以引用。這提供了一種參考存在於 AWS 以外的私有登錄檔中並需要在您的任務定義中進行身分驗證的容器映像的方法。託管於 Fargate、Amazon EC2 執行個體以及使用 Amazon ECS Anywhere 的外部執行個體上的任務支援此功能。
重要
如果您的任務定義參考存放在 Amazon ECR 中的映像,則此主題不適用。如需詳細資訊,請參閱 Amazon Elastic Container Registry User Guide 中的 Using Amazon ECR Images with Amazon ECS。
對於託管於 Amazon EC2 執行個體上的任務,此功能要求具備版本 1.19.0 或更新的容器代理程式。不過,我們建議您使用最新版的容器代理程式。如需如何檢查代理程式版本及更新至最新版本的資訊,請參閱「更新 Amazon ECS 容器代理程式」。
對於託管於 Fargate 上的任務,此功能需要平台版本 1.2.0 或更新版本。如需相關資訊,請參閱適用於 Amazon ECS 的 Fargate 平台版本。
在您的容器定義內,使用您所建立的秘密的詳細資訊來指定 repositoryCredentials 物件。引用的秘密可以與使用此秘密的任務來自不同的 AWS 區域或帳戶。
注意
當使用 Amazon ECS API、AWS CLI 或 AWS SDK 時,若您要啟動任務的相同 AWS 區域中已存在秘密,您可以使用秘密的完整 ARN 或名稱。如果此秘密已存在於不同帳戶中,則必須指定秘密的完整 ARN。使用 AWS Management Console 時,永遠必須指定秘密的完整 ARN。
以下是任務定義的程式碼片段,其會顯示所需的參數:
替代下列參數:
-
將
private-repo取代為私有儲存庫的主機名稱 -
將
private-image取代為映像名稱 將
arn:aws:secretsmanager:region:aws_account_id:secret:secret_name取代為秘密的 Amazon Resource Name (ARN)
"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]
注意
啟用私有登錄檔身分驗證的另一個方法,是使用 Amazon ECS 容器代理程式環境變數來向私有登錄檔進行身分驗證。只有託管於 Amazon EC2 執行個體上的任務才支援此方法。如需更多詳細資訊,請參閱 為私有 Docker 映像檔設定 Amazon ECS 容器執行個體 。
使用私有登錄檔
-
任務定義必須具有任務執行角色。這可讓容器代理程式提取容器映像。如需更多詳細資訊,請參閱 Amazon ECS 任務執行 IAM 角色。
私有登錄檔身分驗證允許 Amazon ECS 任務從需要身分驗證憑證的 AWS 外部私有登錄檔 (例如 Docker Hub、Quay.io 或您自己的私有登錄檔) 提取容器映像。此功能透過 Secrets Manager 安全地儲存登錄檔憑證,這些憑證隨後會在任務定義中透過
repositoryCredentials參數進行引用。如需有關設定私有登錄檔身分驗證的詳細資訊,請參閱在 Amazon ECS 中使用非 AWS 容器映像。
若要存取內含私有登錄檔憑證的秘密,請將以下許可以內嵌政策形式新增至任務執行角色。如需詳細資訊,請參閱新增和移除 IAM 政策。
-
secretsmanager:GetSecretValue– 從 Secrets Manager 擷取私有登錄檔憑證時需要。 -
kms:Decrypt- 只有在您的秘密使用自訂 KMS 金鑰而非預設金鑰時,才需要此項目。您的自訂金鑰的 Amazon Resource Name (ARN) 必須新增為資源。
下列為新增許可的內嵌政策範例。
-
-
使用 AWS Secrets Manager 為私有登錄檔憑證建立秘密。如需有關如何建立秘密的資訊,請參閱 AWS Secrets Manager User Guide 中的 Create an AWS Secrets Manager secret。
按照下列格式輸入私有登錄檔憑證:
{ "username" : "privateRegistryUsername", "password" : "privateRegistryPassword" } -
註冊任務定義。如需更多詳細資訊,請參閱 使用主控台建立 Amazon ECS 任務定義。