Amazon ECR 接口 VPC 端端點 ()AWS PrivateLink - Amazon ECR

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

Amazon ECR 接口 VPC 端端點 ()AWS PrivateLink

您可以將 Amazon ECR 設定為使用介面 VPC 端點,進而提升 VPC 的安全狀態。VPC 私人雲端端點採用這項技術 AWS PrivateLink,可讓您透過私有 IP 地址私有存取 Amazon ECR API。 AWS PrivateLink 將 VPC 和 Amazon ECR 之間的所有網路流量限制在 Amazon 網路上。您不需要網際網路閘道、NAT 裝置或虛擬私有閘道。

如需 AWS PrivateLink 和 VPC 端點的詳細資訊,請參閱 Amazon VPC 使用者指南中的 VPC 端點

Amazon ECR VPC 端點的考量事項

在您設定 Amazon ECR 的 VPC 端點之前,請注意以下幾點考量。

  • 若要允許託管在 Amazon EC2 執行個體上的 Amazon ECS 任務從 Amazon ECR 選取私有映像,請確保您還為 Amazon ECS 建立介面 VPC 端點。如需詳細資訊,請參閱 Amazon 彈性容器服務開發人員指南中的介面 VPC 端點 (AWS PrivateLink)

    重要

    Fargate 上託管的 Amazon ECS 任務不需要 Amazon ECS 介面 VPC 端點。

  • 使用 Linux 平台版本 1.3.0 或更早版本的 Fargate 上託管的 Amazon ECS 任務只需要 com.amazonaws.region.ecr.dkr Amazon ECR VPC 端點和 Amazon S3 閘道端點即可利用此功能。

  • 使用 Linux 平台版本 1.4.0 或更高版本託管在 Fargate 上的 Amazon ECS 任務需要 com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api Amazon ECR VPC 端點,以及 Simple Storage Service (Amazon S3) 閘道端點才能利用此功能。

  • 使用 Windows 平台版本 1.0.0 或更高版本託管在 Fargate 上的 Amazon ECS 任務需要 com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api Amazon ECR VPC 端點,以及 Simple Storage Service (Amazon S3) 閘道端點才能利用此功能。

  • Fargate 上託管的從 Amazon ECR 提取容器映像的 Amazon ECS 任務可以透過向任務的任務執行 IAM 角色新增條件索引鍵來限制對其任務使用的特定 VPC 和服務使用的 VPC 端點的存取。如需詳細資訊,請參閱《Amazon Elastic Container Service 開發人員指南》中的透過介面端點提取 Amazon ECR 映像的 Fargate 任務的可選 IAM 許可

  • 在 Fargate 上託管的 Amazon ECS 任務可從 Amazon ECR 提取容器映像,而這些容器映像也會使用日誌驅動程式將日awslogs誌資訊傳送到日誌,則需要 CloudWatch 日誌 VPC 端點。 CloudWatch 如需詳細資訊,請參閱 建立記 CloudWatch 錄檔端點

  • 連接到 VPC 端點的安全群組,必須允許從 VPC 的私有子網路,透過 443 埠傳入的連線。

  • VPC 端點目前不支援跨區域請求。請確實在打算向 Amazon ECR 發出 API 呼叫的相同區域中建立 VPC 端點。

  • VPC 端點目前不支援 Amazon ECR Public 儲存庫。請考慮使用提取快取規則,將公有映像託管在與 VPC 端點位於相同區域的私有儲存庫中。如需詳細資訊,請參閱 將上游註冊表與 Amazon ECR 私有註冊表同步

  • VPC 端點僅支援透過 Amazon 路線 53 AWS 提供的 DNS。如果您想要使用自己的 DNS,您可以使用條件式 DNS 轉送。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 DHCP 選項集

  • 如果您的容器有現有的 Amazon S3 連線,則在您新增 Amazon S3 閘道端點時,其連線可能會短暫中斷。如果您想避免發生中斷情況,請建立採用 Amazon S3 閘道端點的​新 VPC,然後將 Amazon ECS 叢集及其容器遷移至新的 VPC​。

  • 第一次使用提取快取規則提取映像時,如果您已使用 AWS PrivateLink 將 Amazon ECR 設定為使用介面 VPC 端點,那麼您需要在同一個 VPC 中使用 NAT 閘道建立公有子網路,然後將所有傳出流量從其私有子網路路由到 NAT 閘道,以便提取至工作。隨後的映像提取不需要這樣做。如需詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的案例:從私有子網路存取網際網路

Windows 映像的考量

基於 Windows 作業系統的映像包括受授權限制無法分配的成品。預設情況下,當您將 Windows 映像推送到 Amazon ECR 儲存庫時,不推送包含這些成品的層,因為它們被視為外來層。當成品由 Microsoft 提供時,外部層將從 Microsoft Azure 基礎設施中擷取。因此,為了讓您的容器能夠從 Azure 中提取這些外部層,除了建立 VPC 端點之外,還需要其他步驟。

當使用 Docker 常駐程式中的 --allow-nondistributable-artifacts 標誌將 Windows 映像推送到 Amazon ECR 時,可以覆寫此行為。啟用後,此標誌將把授權層推送到 Amazon ECR,這樣就可以透過 VPC 端點從 Amazon ECR 中提取這些映像,而無需額外存取 Azure。

重要

使用 --allow-nondistributable-artifacts 標誌並不排除您遵守 Windows 容器基礎映像授權條款的義務;您不能發佈 Windows 內容以進行公有或第三方重新分佈。允許在您自己的環境中使用。

若要在 Docker 安裝中啟用此標誌,您必須修改 Docker 常駐程式組態檔案,其根據 Docker 的安裝情況,通常可以在 Docker Engine (Docker 引擎) 區段下的設定或偏好設定選單中設定,也可以直接編輯 C:\ProgramData\docker\config\daemon.json 檔案。

以下為所需組態的範例。將該值替換為要將映像推送到的儲存庫 URI。

{ "allow-nondistributable-artifacts": [ "111122223333.dkr.ecr.us-west-2.amazonaws.com" ] }

修改 Docker 常駐程式組態檔案後,在嘗試推送映像之前,必須重新啟動 Docker 常駐程式。透過驗證基本層是否已推送到儲存庫來確認推送是否有效。

注意

Windows 映像的基本圖很大。層大小將導致較長的推送時間以及 Amazon ECR 中這些映像的額外存放成本。基於這些原因,我們建議僅在嚴格要求減少建置時間和持續儲存成本時使用此選項。例如,mcr.microsoft.com/windows/servercore 映像在 Amazon ECR 中壓縮時大約為 1.7 GiB。

為 Amazon ECR 建立 VPC 端點

若要為 Amazon ECR 服務建立 VPC 端點,請使用《Amazon VPC 使用者指南》中的 Creating an Interface Endpoint (建立介面端點) 程序。

在 Amazon EC2 執行個體上託管的 Amazon ECS 任務需要 Amazon ECR 端點和 Amazon S3 閘道端點。

使用平台版本 1.4.0 或更高版本在 Fargate 上託管的 Amazon ECS 任務需要 Amazon ECR VPC 終端節點和 Amazon S3 閘道端點。

使用平台版本 1.3.0 或更早版本的 Fargate 上託管的 Amazon ECS 任務只需要 com.amazonaws.region.ecr.dkr Amazon ECR VPC 端點和 Amazon S3 閘道端點。

注意

建立端點的順序並不重要。

com.amazonaws.region.ecr.dkr

此端點用於 Docker 登錄檔 API。Docker 用戶端命令 (例如 pushpull) 會使用此端點。

當您建立此端點時,需確實啟用私有 DNS 主機名稱。若要執行此操作,請務必在建立 VPC 端點時,選取 Amazon VPC 主控台中的 Enable Private DNS Name (啟用私有 DNS 名稱) 選項。

com.amazonaws.region.ecr.api
注意

指定的區域代表 Amazon ECR 支援之 AWS 區域的區域識別碼,us-east-2例如美國東部 (俄亥俄) 區域。

此端點用於呼叫 Amazon ECR API。DescribeImagesCreateRepository 等 API 動作會移至此端點。

建立此端點時,您可以選擇啟用私有 DNS 主機名稱。當您建立 VPC 端點時,在 VPC 主控台中選取 Enable Private DNS Name (啟用私有 DNS 名稱) 來啟用此設計。如果您為 VPC 端點啟用私人 DNS 主機名稱,請更新您的 SDK 或 AWS CLI 最新版本,以便在使用 SDK 時或 AWS CLI 不需要指定端點 URL。

如果您啟用私人 DNS 主機名稱,且使用的 SDK 或 2019 年 1 月 24 日之前發行的 AWS CLI 版本,則必須使用--endpoint-url參數來指定介面端點。以下範例會顯示端點 URL 的格式。

aws ecr create-repository --repository-name name --endpoint-url https://api.ecr.region.amazonaws.com

如果您不啟用 VPC 端點的私有 DNS 主機名稱,就必須透過 --endpoint-url 參數來指定介面端點的 VPC 端點 ID​。​ 以下範例會顯示端點 URL 的格式。

aws ecr create-repository --repository-name name --endpoint-url https://VPC_endpoint_ID.api.ecr.region.vpce.amazonaws.com

建立 Amazon S3 閘道端點

若要讓您的 Amazon ECS 任務從 Amazon ECR 提取私有映像,您必須為所有 Amazon S3 建立閘道端點。閘道端點是必要的,因為 Amazon ECR 使用 Amazon S3 來存放映像分層。容器從 Amazon ECR 下載映像時,必須存取 Amazon ECR 以取得​映像資訊清單,並透過 Amazon S3 下載實際映像層。以下是 Amazon S3 ​儲存貯體的 Amazon Resource Name (ARN),該儲存貯體包含每個 Docker 映像的分層。

arn:aws:s3:::prod-region-starport-layer-bucket/*

使用《Amazon VPC 使用者指南》中的 Creating a gateway endpoint (建立閘道端點) 操作程序為 Amazon ECR 建立以下 Amazon S3 閘道端點。建立端點時,請務必為您的 VPC 選取路由表。

com.amazonaws.region.s3

Amazon S3 閘道端點會使用 IAM 政策文件來限制服務的存取權限。您可以使用 Full Access (完整存取) 政策,​因為系統會以此政策為基礎,繼續套用您對任務 IAM 角色或其他 IAM 使用者政策的限制。如果您想將 ​Amazon S3 儲存貯體存取權限限制為使用 Amazon ECR 所需的​最低許可,請參閱 Amazon ECR 的最低 Amazon S3 儲存貯體許可

Amazon ECR 的最低 Amazon S3 儲存貯體許可

Amazon S3 閘道端點會使用 IAM 政策文件來限制服務的存取權限。若要僅允許 Amazon ECR 的最低 Amazon S3 儲存貯體許可,請限制對 Amazon ECR 在為端點建立 IAM 政策文件時使用的 Amazon S3 儲存貯體的存取。

下表會說明 Amazon ECR 所需的​ Amazon S3 儲存貯體政策許可。

權限 描述

arn:aws:s3:::prod-region-starport-layer-bucket/*

提供對包含每個 Docker 映像分層之 Amazon S3 儲存貯體的存取權限。表示 Amazon ECR 支援的 AWS 區域的區域識別符,例如美國東部 (俄亥俄) 區域的 us-east-2

範例

下方範例會說明如何提供 Amazon ECR 操作所需的 Amazon S3 ​儲存貯體存取權限。

{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::prod-region-starport-layer-bucket/*"] } ] }

建立記 CloudWatch 錄檔端點

使用 Fargate 啟動類型的 Amazon ECS 任務,該啟動類型使用沒有網際網路閘道的 VPC,也會使用日誌驅動程式將日awslogs誌資訊傳送到 CloudWatch 日誌,需要您建立 com.amazonaws。 區域 .logs 介面記錄檔的 CloudWatch VPC 人雲端端點。如需詳細資訊,請參閱 Amazon CloudWatch 日誌使用指南中的將日 CloudWatch 誌與界面 VPC 端點搭配使用。

為您的 Amazon ECR VPC 端點建立端點政策

當您建立或修改端點時,VPC 端點政策是您連接至端點的 IAM 資源政策。如果您在建立端點時未附加原則,請為您 AWS 附加允許完整存取服務的預設原則。端點政策不會覆寫或取代使用者政策或服務特定的政策。這個另行區分的政策會控制從端點到所指定之服務的存取。端點政策必須以 JSON 格式撰寫。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的使用 VPC 端點控制服務的存取

我們建議建立單一 IAM 資源政策,並將其連接到兩個 Amazon ECR VPC 端點。

以下是 Amazon ECR 端點政策的範例。此政策可讓特定 IAM 角色從 Amazon ECR 提取映像。

{ "Statement": [{ "Sid": "AllowPull", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Effect": "Allow", "Resource": "*" }] }

下列端點政策範例可防止指定的儲存庫遭到刪除。

{ "Statement": [{ "Sid": "AllowAll", "Principal": "*", "Action": "*", "Effect": "Allow", "Resource": "*" }, { "Sid": "PreventDelete", "Principal": "*", "Action": "ecr:DeleteRepository", "Effect": "Deny", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" } ] }

下列端點政策範例會將前兩個範例結合成單一政策。

{ "Statement": [{ "Sid": "AllowAll", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" }, { "Sid": "PreventDelete", "Effect": "Deny", "Principal": "*", "Action": "ecr:DeleteRepository", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" }, { "Sid": "AllowPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }
修改 Amazon ECR 的 VPC 端點政策
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中選擇 Endpoints (端點)

  3. 如果您尚未建立 Amazon ECR 的 VPC 端點,請參閱 為 Amazon ECR 建立 VPC 端點

  4. 選取要新增政策的 Amazon ECR VPC 端點,然後選擇畫面下半部的 Policy (政策) 索引標籤。

  5. 選擇 Edit Policy (編輯政策),並對政策做出變更。

  6. 選擇 Save (儲存) 以儲存政策。

共用子網路

無法在與您共用的子網路中建立、描述、修改或刪除 VPC 端點。不過,可以在與您共用的子網路中使用 VPC 端點。