Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何允許次要帳戶在我的 Amazon ECR 映像檔儲存庫中推送或提取映像檔?
我想要允許次要帳戶在我的 Amazon Elastic Container Registry (Amazon ECR) 映像檔儲存庫中推送或提取映像檔。
解決方案
您可以將映像檔推送至另一個帳戶的 Amazon ECR 儲存庫,或從其中提取映像檔。首先,您必須建立允許次要帳戶對儲存庫執行 API 呼叫的政策。然後,使用從次要帳戶產生的 Docker 身分驗證權杖,以對主要帳戶的儲存庫使用推送和提取命令。
建立允許次要帳戶對映像檔儲存庫執行 API 呼叫的政策
1. 開啟主要帳戶的 Amazon ECR 主控台。
2. 選擇您想要修改儲存庫的超連結「儲存庫名稱」。
3. 在左側導覽窗格的「Amazon ECR - 儲存庫」下,選擇「許可」。
4. 若要從主要帳戶內新增次要帳戶的儲存庫政策,請選擇「編輯政策 JSON」。將您的政策輸入程式碼編輯器中,然後選擇「儲存」。
重要事項: 在政策中,包括次要帳戶的帳號以及該帳戶可以對儲存庫執行的動作。若要將存取權給予特定角色,請提供角色 arn 作為主體。例如,AWS: arn:aws:iam::account-id:role/ecsInstanceRole。在儲存儲存庫政策之前,該角色必須存在於次要帳戶中。如果不存在,則您會收到與下列內容類似的錯誤:「提供的儲存庫政策無效」。
下列儲存庫政策範例允許特定帳戶推送和提取映像檔:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPushPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:root" }, "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability", "ecr:PutImage", "ecr:InitiateLayerUpload", "ecr:UploadLayerPart", "ecr:CompleteLayerUpload" ] } ] }
5. 在任務定義中,設定映像檔,該映像檔為您想要與 Amazon ECS 一起搭配使用。在主要帳戶的 Amazon ECR 儲存庫中託管您的映像檔。
**注意事項:**確保次要帳戶在「AmazonEC2ContainerRegistryPowerUser」受管政策中列出 Amazon ECR 許可。需要這些許可,才能從主要帳戶進行提取或推送。
從次要帳戶產生暫時 Docker 身分驗證權杖,並執行測試推送或提取
**注意事項:**如果在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確定您是使用最新版本的 AWS CLI。
次要帳戶在收到 12 小時有效的暫時身分驗證權杖之前,無法對儲存庫執行政策動作。該權杖允許次要帳戶對主要帳戶的儲存庫使用 Docker 推送和提取命令。get-login-password 命令會擷取並解碼身分驗證權杖,然後您可以輸入「docker 登入」命令進行身分驗證。
**注意事項:**取得權杖的帳戶必須具有相關的 AWS Identify and Access Management (IAM) API 許可,才能修改儲存庫。如需範例,請參閱 Amazon Elastic Container Registry 的 AWS 受管政策。如需疑難排解 Docker 問題,請在 Docker 常駐程式中啟用偵錯模式。使用最新的 AWS CLI 第 2 版,或者 AWS CLI 第 1 版的 1.17.10 版或更新版本支援此命令。如需相關資訊,請參閱 get-login-password。
1. 若要為在 Amazon ECS 之外推送和提取映像檔的帳戶產生 Docker 身分驗證權杖,請執行下列命令。將 aws_account_id 取代為您的主要帳戶 ID,並將 regionID 取代為您的區域 ID。
使用 AWS CLI:
aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com
使用適用於 Windows PowerShell 的 AWS 工具:
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com
您會收到下列輸出:
aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
2. 執行主要帳戶的測試映像檔提取,或將測試映像檔推送至主要帳戶:
docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName
注意事項: 將 AccountID 和 Region 取代為您的帳戶 ID 和區域。將 ImageName 和 TagName 取代為您的映像檔名稱和標籤名稱。
3. 驗證映像檔是否順利下載:
docker images | grep ImageName
注意事項: 將 ImageName 取代為您的映像檔名稱。
相關內容
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 1 年前lg...