Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何允許次要帳戶在我的 Amazon ECR 映像檔儲存庫中推送或提取映像檔?
我想要允許次要 AWS 帳戶在我的 Amazon Elastic Container Registry (Amazon ECR) 映像檔儲存庫中推送或提取映像檔。
簡短描述
若要讓次要帳戶能從您的 Amazon ECR 儲存庫推送或提取映像檔,請在您的主要帳戶中建立登錄或儲存庫政策。若要提供 AWS 區域中所有儲存庫或多個不同儲存庫的存取權,請設定登錄層級政策。若只想提供單一儲存庫的存取權,或想限制同一儲存庫中不同身分的存取權,請設定儲存庫層級政策。設定政策以允許次要帳戶執行特定 API 呼叫。
然後,在次要帳戶中產生 Docker 驗證權杖,以從主要帳戶的儲存庫推送和提取映像檔。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
設定登錄層級權限
**先決條件:**您的 Amazon ECR 登錄必須使用 V2 政策。如果您使用的是 V1 政策,請切換至 V2。如需 V2 政策的更多資訊,請參閱 Amazon ECR 將登錄政策擴展至所有 ECR 動作。
請完成下列步驟:
- 開啟主要帳戶的 Amazon ECR 主控台。
- 在導覽窗格中,於 Private registry (私有登錄) 底下,選擇 Features & Settings (功能與設定)。
- 選擇 Permissions (權限)。
- 選擇 Edit JSON (編輯 JSON)。
- 將您的政策輸入編輯器中。允許次要帳戶在區域內所有儲存庫推送與提取映像檔的範例政策:
**注意:**將 account-id 替換為次要帳戶的帳戶 ID。在 Action (動作) 中,輸入該帳戶可在儲存庫中執行的動作。若要允許特定角色的存取,請在 Principal (主體) 中提供該角色的 Amazon Resource Name (ARN),例如 AWS: arn:aws:iam::account-id:role/ecsInstanceRole。在您儲存登錄政策前,請確認您輸入的角色確實存在於次要帳戶中。若角色不存在,您會收到「invalid registry policy provided」錯誤。{ "Version": "2012-10-17", "Statement": [ { "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" ], "Resource": "*" } ] } - 選擇 Save (儲存)。
設定儲存庫層級權限
請完成下列步驟:
- 開啟主要帳戶的 Amazon ECR 主控台。
- 在導覽窗格中,於 Private registry (私有登錄) 底下,選擇 Repositories (儲存庫)。
- 選擇您想修改的儲存庫。
- 在導覽窗格中,選擇 Permissions (權限)。
- 選擇 Edit policy JSON (編輯政策 JSON)。
- 在政策編輯器中輸入您的政策陳述式。
允許某帳戶進行推送與提取的儲存庫政策範例:
**注意:**將 account-id 替換為次要帳戶的帳戶 ID。在 Action (動作) 中,輸入該帳戶可在儲存庫中執行的動作。若要允許特定角色的存取,請在 Principal (主體) 中提供該角色的 Amazon Resource Name (ARN),例如 AWS: arn:aws:iam::account-id:role/ecsInstanceRole。在您儲存登錄政策前,請確認您輸入的角色確實存在於次要帳戶中。若角色不存在,您會收到「invalid registry policy provided」錯誤。{ "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" ] } ] } - 選擇 Save (儲存)。
- 如果您在次要帳戶中使用 Amazon ECS 執行容器,請設定要搭配 Amazon ECS 使用的映像檔。該映像檔由主要帳戶的 Amazon ECR 儲存庫所託管。
**注意:**請確保 AmazonEC2ContainerRegistryPowerUser 受管政策已為您的次要帳戶加入必要的 Amazon ECR 權限。您必須具備這些權限才能從主要帳戶進行提取或推送。
產生暫時性的 Docker 驗證權杖
**注意:**取得權杖的帳戶必須擁有修改儲存庫所需的 AWS Identity and Access Management (IAM) API 權限。如需範例,請參閱 Amazon ECR 的 AWS 受管政策。若要對 Docker 相關問題進行疑難排解,請在 Docker 常駐程式上啟用偵錯模式。
請完成下列步驟:
-
若要為在 Amazon ECS 之外進行映像檔推送與提取的帳戶產生 Docker 驗證權杖,請執行以下 get-login-password AWS CLI 命令:
aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.REGION-ID.amazonaws.com-或-
執行以下 AWS Tools for Windows PowerShell 命令:(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.regionID.amazonaws.com**注意:**將 AWS-ACCOUNT-ID 替換為主要帳戶 ID,將 REGION-ID 替換為您的區域。此暫時性驗證權杖有效期限為 12 小時。
輸出範例: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 or Login Succeeded -
若要測試從主要帳戶進行映像檔提取或推送,請執行以下命令:
docker pull ACCOUNT-ID.dkr.ecr.REGION.amazonaws.com/REPOSITORY-NAME:TAG-NAME**注意:**將 ACCOUNT-ID 替換為您的主要帳戶 ID、將 REGION 替換為您的區域、將 REPOSITORY-NAME 替換為您的儲存庫名稱,並將 TAG-NAME 替換為映像檔的標籤名稱。
-
若要確認您已成功下載映像檔,請執行以下命令:
docker images | grep IMAGE-NAME**注意:**將 IMAGE-NAME 替換為您的映像檔名稱。
- 語言
- 中文 (繁體)

相關內容
- 已提問 1 年前
- 已提問 2 年前
- 已提問 2 年前
- 已提問 1 年前
