iT邦幫忙

2025 iThome 鐵人賽

DAY 10
1
Build on AWS

AWS 雲原生,學起來比泡咖啡還快系列 第 10

DAY10 - 容器保險庫: AWS ECR

  • 分享至 

  • xImage
  •  

在現代軟體開發中,容器化 (Containerization) 幾乎已成標準做法。不論是微服務架構、DevOps 自動化流程,還是跨雲部署策略,容器都能幫助企業快速、彈性地交付應用程式。但容器本身只是包裝,容器映像檔 (Image) 需要安全可靠的地方儲存,才能確保部署順暢與企業資訊安全。這時,AWS Elastic Container Registry (ECR) 就像是容器的「保險庫」。

為什麼我們需要容器保險庫?

很多企業初期會使用 Docker Hub 或自行架設 Harbor 來存放映像檔,但隨著應用規模增大,問題會慢慢浮現:

  • 公共倉庫的限制:Docker Hub 免費帳號每日拉取次數有限,大量自動化部署可能會受阻。
  • 自建倉庫的維護負擔:Harbor 雖然自由度高,但伺服器維護、升級、備份、安全漏洞修補都需要團隊自己負責。
  • 安全與合規要求:企業需要對映像檔的存取權限、漏洞掃描與加密等有更嚴格的管理。

因此,一個高安全性、低維運負擔、且與雲端原生整合的容器倉庫就顯得非常重要。

AWS ECR 的主要優勢

1. 與 AWS 生態整合順暢

ECS、EKS、Lambda 原生支援:部署容器時可直接拉取映像檔,不需額外設定。
CI/CD 流程無縫整合:搭配 CodePipeline、CodeBuild,能做到「打包 → 推送 → 部署」自動化,減少人為操作錯誤。

2. 高度安全與合規

IAM 精細權限控制:誰能 push、誰能 pull,一目了然。
映像檔安全掃描:自動檢測漏洞,支援基礎或進階掃描,提前發現安全風險。
加密存儲:所有映像檔自動透過 AWS KMS 加密,符合企業合規需求。

3. 高可靠性與可用性

ECR 建立在 AWS 全球基礎設施上,具備高可用性與跨區域複製功能。
不需要維護伺服器,也不擔心儲存空間不足,AWS 幫你管理。

4. 高效能

VPC Endpoints 整合:映像檔傳輸不經過公共網路,速度快且安全。
快速拉取:對於大規模自動擴展的容器集群,能確保部署效能穩定。

與其他容器倉庫比較

方案 優點 缺點 適合對象
Docker Hub 免費、操作簡單 流量限制、安全控管不足 個人/小型專案
Harbor (自建) 自由度高、支援多種認證方式 需自行維護,成本高 需掌控整個環境的 IT 團隊
AWS ECR 原生整合 AWS、生態完整、安全性高、免維運 綁定 AWS 生態系 已在 AWS 上運行的企業或雲端專案

總結
優勢:

  • 免維運:不用煩惱伺服器升級、備份或安全問題。
  • 高安全:IAM、加密與漏洞掃描全面保障。
  • 高效能:快速拉取映像檔,部署順暢。
  • 原生整合:和 ECS、EKS、Lambda 無縫連動,支持自動化 CI/CD。

比喻:
Docker Hub → 便利商店:方便,但有流量限制。
Harbor → 自家倉庫:完全自己管,但麻煩。
ECR → 銀行保險庫:安全、可靠、專業,讓企業可以放心存放與使用。

實務操作:
Step 1:建立 ECR 儲存庫 (Repository)
https://ithelp.ithome.com.tw/upload/images/20250912/2014546214rfE6kvWX.png
登入 AWS Management Console → 搜尋 ECR → 點選 Repositories → Create repository
填寫儲存庫資訊 Repository name:自訂映像檔名稱,例如 my-app
Visibility:選擇 Private(私有)或 Public(公開)
Encryption:建議使用 AWS KMS 加密,保障映像檔安全

建立儲存庫 點擊 Create repository 即完成
提示:建立完成後,AWS 會提供該儲存庫的 URI,例如:
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app
這個 URI 將在後續 push / pull 映像檔時使用。

Step 2:推送與拉取容器映像檔(docker push / pull 範例)

登入 ECR(取得暫時登入憑證):

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

建立本地 Docker 映像檔:

docker build -t my-app:latest .

標記映像檔(Tag):

docker tag my-app:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest

推送映像檔到 ECR:

docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest

從 ECR 拉取映像檔:

docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest

提示:推送前一定要先登入 ECR,否則會出現 unauthorized 的錯誤。

Step 3:設定 IAM 權限(誰能推、誰能拉)
AWS ECR 的安全性依賴 IAM Policy 控制存取權限,範例如下:

允許推送與拉取的完整範例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:ap-northeast-1:123456789012:repository/my-app"
        }
    ]
}
  1. 限制只可拉取(pull):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:ap-northeast-1:123456789012:repository/my-app"
        }
    ]
}

提示:建議對不同團隊或 CI/CD 系統分別建立 IAM Role,清楚區分「誰能推」與「誰能拉」,提高安全性。

小結

完成以上三步驟後,你就可以:

建立自己的私有容器保險庫
將本地 Docker 映像檔安全推送到 AWS ECR
管理誰可以使用映像檔,確保部署安全


上一篇
DAY9 - 第一個容器:NGINX 上雲!
下一篇
DAY11 - ECS 登場:雲端的管家
系列文
AWS 雲原生,學起來比泡咖啡還快20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言