授予 Lightsail 容器服務存取 Amazon ECR 私有儲存庫 - Amazon Lightsail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

授予 Lightsail 容器服務存取 Amazon ECR 私有儲存庫

Amazon Elastic Container Registry (Amazon ECR) 是一種 AWS 受管容器映像登錄服務,可使用 AWS Identity and Access Management (IAM) 支援具有以資源為基礎的許可的私有存放庫。您可以讓您的 Amazon Lightsail 容器服務存取您的 Amazon ECR 私有儲存庫。 AWS 區域然後,可以將映像從私有儲存庫部署至容器服務。

您可以使用 Lightsail 主控台或 () 來管理 Lightsail 容器服務和 Amazon ECR 私有儲存庫的存取。 AWS Command Line Interface AWS CLI不過,我們建議您使用 Lightsail 主控台,因為這樣可以簡化程序。

如需有關容器服務的詳細資訊,請參閱容器服務。如需 Amazon ECR 的詳細資訊,請參閱《Amazon ECR 使用者指南》。

內容

所需的許可

將管理 Lightsail 容器服務存取 Amazon ECR 私有儲存庫的使用者必須在 IAM 中具有下列其中一項許可政策。如需詳細資訊,請參閱《AWS Identity and Access Management 使用者指南》中的新增和移除 IAM 身分許可

授予對任何 Amazon ECR 私有儲存庫的存取權

下列許可政策會授予使用者許可,以設定對任何 Amazon ECR 私有儲存庫的存取權。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:*:AwsAccountId:repository/*" } ] }

在政策中,AwsAccountId以您的 AWS 帳戶 ID 號碼取代。

授予對特定 Amazon ECR 私有儲存庫的存取權

下列許可政策會給予使用者許可,在特定 AWS 區域區域中設定對特定 Amazon ECR 私有儲存庫的存取權。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:AwsRegion:AwsAccountId:repository/RepositoryName" } ] }

將政策中的以下範例文字取代為自訂文字:

  • AwsRegion— 私有存放庫的 AWS 區域 程式碼 (例如,us-east-1)。您的 Lightsail 容器服務必須與您要存取 AWS 區域 的私有儲存庫位於相同的位置。

  • AwsAccountId— 您的 AWS 帳戶 ID 號碼。

  • RepositoryName— 您要管理其存取權的私人存放庫名稱。

下列是使用範例值填入的許可政策範例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/my-private-repo" } ] }

使用 Lightsail 主控台來管理對私人存放庫的存取

請完成下列程序,以使用 Lightsail 主控台來管理 Lightsail 容器服務對 Amazon ECR 私有儲存庫的存取。

  1. 登入主 Li ghtsail 台

  2. 在 Lightsail 首頁,選擇 Containers (容器) 索引標籤。

  3. 選擇想要為其設定對 Amazon ECR 私有儲存庫存取權的容器服務名稱。

    主控台中的 Lightsail 器服務
  4. 選擇 Images (映像) 索引標籤。

    Lightsail 主控台之容器服務管理頁面中的 [映像] 索引標籤
  5. 選擇新增儲存庫以授予容器服務對於 Amazon ECR 私有儲存庫的存取權。

    注意

    您可以選擇移除以移除容器服務對於先前新增的 Amazon ECR 私有儲存庫的存取權。

    「映像」索引標籤的 Amazon ECR 私有儲存庫區段
  6. 在顯示的下拉式選單中,選擇要存取的私有儲存器,然後選擇 Add (新增)。

    Amazon ECR 私有儲存庫下拉式選單選擇

    Lightsail 需要一些時間來為您的容器服務啟動 Amazon ECR 映像拉拔器 IAM 角色,其中包括主要的 Amazon 資源名稱 (ARN)。然後,Lightsail 會自動將 IAM 角色主體 ARN 新增至您所選取之 Amazon ECR 私有儲存庫的許可政策。這將授予容器服務對私有儲存庫及其映像的存取權。強制回應視窗出現並表明程序已完成且您可以選擇 Continue (繼續) 之前,請勿關閉瀏覽器視窗。

    確認正在將許可新增至 Amazon ECR 私有儲存庫的強制回應視窗
  7. 啟用完成後,請選擇 Continue (繼續)。

    新增選取的 Amazon ECR 私有儲存庫後,它會列於頁面的 Amazon ECR 私有儲存庫區段。此頁面包含如何將映像從私人存放庫部署至 Lightsail 容器服務的指示。若要使用私有儲存器中的映像,請指定建立容器服務部署時頁面上顯示為 Image (映像) 值的 URI 格式。在指定的 URI 中,請將範例 {image tag} 取代為您要部署的映像標籤。如需詳細資訊,請參閱建立和管理容器服務部署

    新增 Amazon ECR 私有儲存庫後的後續步驟

使用 AWS CLI 來管理私有存放庫的存取

使用 AWS Command Line Interface (AWS CLI) 管理 Lightsail 容器服務對 Amazon ECR 私有儲存庫的存取,需要執行下列步驟:

重要

我們建議您使用 Lightsail 主控台來管理 Lightsail 容器服務對 Amazon ECR 私有儲存庫的存取,因為這樣可以簡化程序。如需詳細資訊,請參閱本指南前面的使用 Lightsail 主控台來管理對私人存放庫的存取

  1. 啟用或停用 Amazon ECR 映像拉拔器 IAM 角色 — 使用 Lightsail AWS CLI update-container-service 指令啟用或停用 Amazon ECR 映像拉拔器 IAM 角色。啟用 Amazon ECR 映像 puller IAM 角色之後,會為其建立一個主體 Amazon Resource Name (ARN)。如需詳細資訊,請參閱本指南的啟用或停用 Amazon ECR 映像 puller IAM 角色章節。

  2. 判定 Amazon ECR 私有儲存庫是否具有政策陳述式 – 在啟用 Amazon ECR 映像 puller IAM 角色後,需要判定您想要容器服務存取的 Amazon ECR 私有儲存庫是否具有現有政策陳述式。如需詳細資訊,請參閱本指南後面所述的判定 Amazon ECR 私有儲存庫是否具有政策陳述式章節。

    您可以使用以下方法之一將 IAM 角色主體 ARN 新增到儲存庫,具體方法取決於您的儲存庫是否具有現有政策陳述式:

    1. 政策新增至沒有政策聲明的私有存放庫 — 使用 Amazon ECR AWS CLI set-repository-policy 命令將容器服務的 Amazon ECR 映像拔出器角色主體 ARN 新增至具有現有政策的私有存放庫。如需詳細資訊,請參閱本指南後述的將政策新增至沒有政策陳述式的私有儲存庫章節。

    2. 政策新增至具有政策聲明的私有存放庫 — 使用 Amazon ECR AWS CLI set-repository-policy 命令將容器服務的 Amazon ECR 映像拔出器角色新增至沒有現有政策的私有存放庫。如需詳細資訊,請參閱本指南後述的將政策新增至具有政策陳述式的私有儲存庫章節。

啟用或停用 Amazon ECR 映像 puller IAM 角色

請完成下列程序,以啟用或停用 Lightsail 容器服務的 Amazon ECR 映像拉拔器 IAM 角色。您可以使用 Lightsail 的 AWS CLI update-container-service命令來啟用或停用 Amazon ECR 映像拉拔器 IAM 角色。若要取得更多資訊,請參閱《指AWS CLI 令參考》update-container-service中的。

注意

您必須先安裝 AWS CLI 並針對 Lightsail 進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入以下命令,以更新容器服務並啟用或停用 Amazon ECR 映像 puller IAM 角色。

    aws lightsail update-container-service --service-name ContainerServiceName --private-registry-access ecrImagePullerRole={isActive=RoleActivationState} --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • ContainerServiceName— 要為其啟用或停用 Amazon ECR 映像拔出器 IAM 角色的容器服務名稱。

    • RoleActivationState— Amazon ECR 圖像拉拔器 IAM 角色的激活狀態。指定 true 即可啟用角色,指定 false 則可停用角色。

    • AwsRegionCode— 容器服務的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    • 啟用 Amazon ECR 映像 puller IAM 角色:

      aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=true} --region us-east-1
    • 停用 Amazon ECR 映像 puller IAM 角色:

      aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=false} --region us-east-1
  3. 如果您:

    • 已啟用 Amazon ECR 映像 puller 角色 – 在獲得上一個回應後需要至少等待 30 秒。然後,繼續下一個步驟,取得容器服務的 Amazon ECR 映像 puller IAM 角色主體 ARN。

    • 已停用 Amazon ECR 映像 puller 角色 – 如果之前已將 Amazon ECR 映像 puller IAM 角色主體 ARN 新增至 Amazon ECR 私有儲存庫的許可政策,則應從儲存庫中移除該許可政策。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的刪除私有儲存庫政策陳述式

  4. 輸入下列命令,以取得容器服務的 Amazon ECR 映像 puller IAM 角色主體 ARN。

    aws lightsail get-container-services --service-name ContainerServiceName --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • ContainerServiceName— 要取得 Amazon ECR 映像拔出器 IAM 角色主體 ARN 的容器服務名稱。

    • AwsRegionCode— 容器服務的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    aws lightsail get-container-services --service-name my-container-service --region us-east-1

    尋找回應中的 ECR 映像 puller IAM 角色主體 ARN。如果列出了某個角色,請複製該角色或將其寫下。本指南的下一節會用到該角色。接下來,需要判定您想要容器服務存取的 Amazon ECR 私有儲存庫上是否具有現有政策陳述式。繼續按本指南中的判定 Amazon ECR 私有儲存庫是否具有政策陳述式章節進行操作。

判定 Amazon ECR 私有儲存庫是否具有政策陳述式

使用以下程序來判定 Amazon ECR 私有儲存庫是否具有政策陳述式。您可以使用 Amazon ECR AWS CLI get-repository-policy 命令。若要取得更多資訊,請參閱《指AWS CLI 令參考》update-container-service中的。

注意

您必須先為 Amazon ECR 安裝 AWS CLI 並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的設定 Amazon ECR

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以取得特定私有儲存庫的政策陳述式。

    aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • RepositoryName— 您要為其設定 Lightsail 容器服務存取權的私人存放庫名稱。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1

    您應該會看到下列其中一個回應:

將政策新增至沒有政策陳述式的私有儲存庫

完成下列程序,以將政策新增至沒有政策陳述式的 Amazon ECR 私有儲存庫。您新增的政策必須包含 Lightsail 容器服務的 Amazon ECR 映像拉出器 IAM 角色主體 ARN。這會授予您的容器服務存取權,從私有儲存庫部署映像。

重要

當您使用 Lightsail 主控台設定存取權時,Lightsail 會自動將 Amazon ECR 映像拔模器角色新增至您的 Amazon ECR 私有儲存庫。在這種情況下,不必依本節中的步驟將 Amazon ECR 映像 puller 角色手動新增至私有儲存庫。如需詳細資訊,請參閱本指南前面的使用 Lightsail 主控台來管理對私人存放庫的存取

可以使用 AWS CLI將政策新增至私有儲存庫。可以透過建立包含政策的 JSON 檔案,然後使用 Amazon ECR 的 set-repository-policy 命令參考該檔案來執行此操作。若要取得更多資訊,請參閱《指AWS CLI 令參考》set-repository-policy中的。

注意

您必須先為 Amazon ECR 安裝 AWS CLI 並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的設定 Amazon ECR

  1. 開啟文字編輯器,並將下列政策陳述式貼入新的文字檔案。

    { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowLightsailPull-ecr-private-repo-demo", "Effect": "Allow", "Principal": { "AWS": "IamRolePrincipalArn" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }

    在文字中,請以本指南稍早取IamRolePrincipalArn得的容器服務的 Amazon ECR 影像拉出器 IAM 角色主體 ARN 取代。

  2. 將檔案另存為 ecr-policy.json 並儲存在電腦上可存取的位置 (例如 Windows 上的 C:\Temp\ecr-policy.json,或 macOS 或 Linux 上的 /tmp/ecr-policy.json)。

  3. 記下所建立的 ecr-policy.json 檔案的檔案路徑位置。此程序後續的命令中,會需要您指定路徑位置。

  4. 開啟命令提示或終端機視窗。

  5. 輸入下列命令,以設定您想要容器服務存取的私有儲存庫的政策陳述式。

    aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • RepositoryName— 您要新增原則之私人存放庫的名稱。

    • path/to/ – 您先前依本指南指示在電腦上建立的 ecr-policy.json 檔案路徑。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    • 在 Windows 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
    • 在 macOS 或 Linux 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1

    您的容器服務現在可以存取私有儲存庫及其映像。若要使用儲存庫中的映像,請將以下 URI 指定為容器服務部署的 Image (映像) 值。在 URI 中,請將範例標籤取代為您要部署的映像標籤。如需詳細資訊,請參閱建立和管理容器服務部署

    AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag

    將 URI 中的以下範例文字取代為自訂文字:

    • AwsAccountId— 您的 AWS 帳戶 ID 號碼。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    • RepositoryName— 要從中部署容器映像的私人存放庫名稱。

    • ImageTag— 要部署在容器服務上的私有存放庫中的容器映像的標籤。

    範例:

    111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage

將政策新增至具有政策陳述式的私有儲存庫

完成下列程序,將政策新增至具有政策陳述式的 Amazon ECR 私有儲存庫。您新增的政策必須包含現有政策和包含 Lightsail 容器服務之 Amazon ECR 映像拔出器 IAM 角色主體 ARN 的新政策。這會維護私有儲存庫上的現有許可,同時也會授予容器服務存取權,以從私有儲存庫部署映像。

重要

當您使用 Lightsail 主控台設定存取權時,Lightsail 會自動將 Amazon ECR 映像拔模器角色新增至您的 Amazon ECR 私有儲存庫。在這種情況下,不必依本節中的步驟將 Amazon ECR 映像 puller 角色手動新增至私有儲存庫。如需詳細資訊,請參閱本指南前面的使用 Lightsail 主控台來管理對私人存放庫的存取

可以使用 AWS CLI將政策新增至私有儲存庫。您可以透過建立包含現有政策和新政策的 JSON 檔案來執行此操作。然後,使用 Amazon ECR 的 set-repository-policy 命令來參考該檔案。若要取得更多資訊,請參閱《指AWS CLI 令參考》set-repository-policy中的。

注意

您必須先為 Amazon ECR 安裝 AWS CLI 並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的設定 Amazon ECR

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以取得特定私有儲存庫的政策陳述式。

    aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • RepositoryName— 您要為其設定 Lightsail 容器服務存取權的私人存放庫名稱。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1
  3. 請複製回應中的現有政策並繼續下一個步驟。

    您應該僅複製出現在雙引號之間的 policyText 內容,也就是以下範例中反白顯示的內容。

    對沒有策略聲明的私有存儲庫的 get-repository-policy 命令的響應
  4. 開啟文字編輯器,並貼上您在先前步驟中複製的私有儲存庫現有政策。

    結果應如下列範例所示。

    政策陳述式 JSON 檔案範例
  5. 在貼上的文字中,將 \n 取代為分行符號,然後刪除剩餘的 \

    結果應如下列範例所示。

    已編輯的政策陳述式 JSON 檔案範例
  6. 在文字檔案的結尾貼上下列政策陳述式。

    , { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowLightsailPull-ecr-private-repo-demo", "Effect": "Allow", "Principal": { "AWS": "IamRolePrincipalArn" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }
  7. 在文字中,請以本指南稍早取IamRolePrincipalArn得的容器服務的 Amazon ECR 影像拉出器 IAM 角色主體 ARN 取代。

    結果應如下列範例所示。

    完成的政策陳述式 JSON 檔案範例
  8. 將檔案另存為 ecr-policy.json 並儲存在電腦上可存取的位置 (例如 Windows 上的 C:\Temp\ecr-policy.json,或 macOS 或 Linux 上的 /tmp/ecr-policy.json)。

  9. 記下 ecr-policy.json 檔案的檔案路徑位置。此程序後續的命令中,會需要您指定路徑位置。

  10. 開啟命令提示或終端機視窗。

  11. 輸入下列命令,以設定您想要容器服務存取的私有儲存庫的政策陳述式。

    aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode

    將命令中的以下範例文字取代為自訂文字:

    • RepositoryName— 您要新增原則之私人存放庫的名稱。

    • path/to/ – 您先前依本指南指示在電腦上建立的 ecr-policy.json 檔案路徑。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    範例:

    • 在 Windows 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
    • 在 macOS 或 Linux 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1

    您應該會看到類似於以下範例的回應。

    對 set-repository-policy 指令的回應

    如果再次執行 get-repository-policy 命令,您應該會在私有儲存庫上看到新的附加政策陳述式。您的容器服務現在可以存取私有儲存庫及其映像。若要使用儲存庫中的映像,請將以下 URI 指定為容器服務部署的 Image (映像) 值。在 URI 中,請將範例標籤取代為您要部署的映像標籤。如需詳細資訊,請參閱建立和管理容器服務部署

    AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag

    將 URI 中的以下範例文字取代為自訂文字:

    • AwsAccountId— 您的 AWS 帳戶 ID 號碼。

    • AwsRegionCode— 私人存放庫的 AWS 區域 程式碼 (例如,us-east-1)。

    • RepositoryName— 要從中部署容器映像的私人存放庫名稱。

    • ImageTag— 要部署在容器服務上的私有存放庫中的容器映像的標籤。

    範例:

    111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage