Link Search Menu Expand Document

AWS Elastic Container Registry

Bên cạnh dịch vụ quản lý source code CodeCommit, AWS cũng cung cấp một dịch vụ khác cho phép lưu trữ, quản lý và triển khai các Docker container images - Amazon Elastic Container Registry (ECR).

Theo kiến trúc của ECR, mỗi tài khoản - AWS account được cung cấp một ECR Registry cho phép người dùng tạo ra các repositories để lưu trữ Docker container images. ECR quản lý việc truy cập repositories và images dựa trên Resource-based policies, do đó trước khi thực hiện việc push / pull images trên một repositories, người dùng cần phải được xác thực thông qua authorization token.

Định nghĩa

Các thuật ngữ Push / Pull được sử dụng để mô tả quá trình đưa lên / tải xuống các Docker container images trên repository.

Để hiểu rõ hơn về quá trình này, chúng ta sẽ cùng thực hành việc sử dụng dịch vụ ECR qua các bước sau:

  • Sử dụng AWS CLI để tạo ECR Repositoy
  • Đăng nhập và xác thực với ECR
  • Push / Pull Docker Container Image

Tạo ECR Repository

Để tạo ECR Repository, chúng ta cần thực hiện bước cài đặt và cấu hình AWS CLI theo hướng dẫn trong phần IAM Group & User.

  • Sau khi hoàn thành cài đặt, trên Terminal sử dụng lệnh aws ecr create-repository:
aws ecr create-repository \
    --repository-name remindersmgtservice  \
    --image-scanning-configuration scanOnPush=true \
    --region ap-southeast-2

Output

{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-southeast-2:729365137003:repository/remindersmgtservice",
        "registryId": "729365137003",
        "repositoryName": "remindersmgtservice",
        "repositoryUri": "729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice",
        "createdAt": "2020-09-03T06:38:32+10:00",
        "imageTagMutability": "MUTABLE",
        "imageScanningConfiguration": {
            "scanOnPush": true
        }
    }
}

Câu lệnh trên cho phép tạo ra repository remindersmgtservice trên AWS Region Sydney - ap-southeast-2 với địa chỉ repositoryUri:

"repositoryUri": "729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice"

Tham số scanOnPush cho phép ECR sử dụng một cơ sở dữ liệu mở - Common Vulnerabilities and Exposures (CVEs) để phân tích và kiểm tra tính an toàn thông tin của các lớp dữ liệu trên các Docker images trong mỗi hoạt động push.

ECR Ouput Qui trình kiểm tra bảo mật CVEs của Docker Image trên ECR


Đăng nhập và xác thực với ECR

  • Thực hiện lệnh CLI:
aws ecr get-login-password --region ap-southeast-2 | docker login --username AWS --password-stdin 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com

Câu lệnh trên gồm hai phần:

  • get-login-password: yêu cầu dữ liệu ECR password
  • docker login: sử dụng password và thực hiện login

Message Login Succeeded trả về khi kết quả login thành công.


Push / Pull Docker Container Image

Sử dụng Dockerfile trong RemindersManagement của ứng dụng FriendReminders, thực hiện build và tagging Docker Container Image

  • Trong folder FriendReminders\RemindersManagement, thực hiện lệnh:
docker build --tag remindersmgtservice:1.0 .

Output

Sending build context to Docker daemon  175.9MB
Step 1/10 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
 ---> 9ab567a29502
Step 2/10 : WORKDIR /src
 ---> Using cache
 ---> 41b19a4064c9
Step 3/10 : COPY RemindersManagement.API.csproj .
 ---> Using cache
 ---> d02da0169cda
Step 4/10 : RUN dotnet restore
 ---> Using cache
 ---> 677e2e649ff2
Step 5/10 : COPY . .
 ---> Using cache
 ---> de72dc780c82
Step 6/10 : RUN dotnet publish -c release -o /app
 ---> Using cache
 ---> aeea2491d0b6
Step 7/10 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> bdca989bc8d3
Step 8/10 : WORKDIR /app
 ---> Using cache
 ---> 5ebb4ddea844
Step 9/10 : COPY --from=build /app .
 ---> Using cache
 ---> 25ac45259d4e
Step 10/10 : ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]
 ---> Using cache
 ---> 112926e9f1d6
Successfully built 112926e9f1d6
Successfully tagged remindersmgtservice:1.0
  • Kiểm tra kết quả build trên danh sách images với lệnh:
docker images "reminders*" 
  • Tag lại remindersmgtservice:1.0 theo giá trị repositoryUri:
docker tag remindersmgtservice:1.0 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice:1.0
  • Push Image lên ECR theo lệnh:
docker push 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice

Ouput khi câu lệnh kết thúc:

The push refers to repository [729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice]
106b53be40a0: Pushed 
583536f4f5e7: Pushed 
2e849d361dc1: Pushed 
c370033eb984: Pushed 
2135da4d457a: Pushed 
b24b2d7a1887: Pushed 
d0f104dc0a1f: Pushed 
1.0: digest: sha256:2346d2e9b1a30e76e38271a68d004580482f1eadd6f982ed30bc17676d7d90d1 size: 1794
  • Sử dụng giá trị digest (imageDigest) gửi về, thực hiện lệnh describe-image-scan-findings để hiển thị kết quả của hoạt động Scanning
aws ecr describe-image-scan-findings \
    --repository-name remindersmgtservice \
    --image-id imageDigest=sha256:2346d2e9b1a30e76e38271a68d004580482f1eadd6f982ed30bc17676d7d90d1
  • Kiểm tra kết quả trên thông qua AWS Console

CVE Ouput Kết quả kiểm tra CVE của remindersmgtservice:1.0


Copyright © 2019-2022 Tuan Anh Le.