如何允許次要帳戶在我的 Amazon ECR 映像檔儲存庫中推送或提取映像檔?

2 分的閱讀內容
0

我想要允許次要帳戶在我的 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 取代為您的映像檔名稱。

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