Bảo mật CI/CD pipelines với AWS SAM Pipelines và ODIC

bởi James Beswick | ngày 09 tháng Hai  2023 | in AWS Serverless Application Model, Serverless | Permalink |  Share

Bài viết này được viết bởi Rahman Syed, Sr. Solutions Architect, State & Local Government và Brian Zambrano, Sr. Specialist Solutions Architect, Serverless.

Các nhà phát triển ứng dụng serverless sử dụng  AWS Serverless Application Model (AWS SAM) CLI  để tạo tích hợp và triển khai liên tục (CI/CD) pipeline. Trong tháng 10/2022, AWS phát hành  OpenID Connect (OIDC) hỗ trợ  AWS SAM Pipelines. Việc này cải thiện cơ chế bảo mật bằng cách tạo các tích hợp sử dụng thông tin xác thực ngắn hạn từ nhà cung cấp CI/CD của bạn.

OIDC là một lớp xác thực dựa trên các tiêu chuẩn mở giúp dễ dàng cho khách hàng và một nhà cung cấp định danh trao đổi thông tin. Các công cụ CI/CD như Github, GitLab và Bitbucket cung cấp hỗ trợ cho OIDC giúp đảm bảo bạn có thể tích hợp với AWS cho các triển khai bảo mật.

Bài viết này trình bày cách tạo một GitHub Actions workflow tích hợp một cách an toàn với AWS sử dụng Github như là một nhà cung cấp định danh.

Bảo mật hệ thống CI/CD tương tác với AWS

AWS SAM Pipeline là một tính năng của AWS SAM CLi tạo các cấu hình CI/CD pipeline cho 6 hệ thống CI/CD, bao gồm:  AWS CodePipeline, Jenkins, GitHub Actions, GitLab CI/CD, và BitBucket. Bạn có thể bắt đầu với những định nghĩa pipeline được AWS lựa chọn hoặc tạo riêng của bạn để hỗ trợ cho các tiêu chuẩn của tổ chức bạn.

Ci/CD pipeline chạy bên ngoài AWS yêu cầu các thông tin xác thực để triển khai hệ thống của bạn lên môi trường AWS. Một cách để tích hợp là dùng một AWS Identity and Access Management (IAM) user để lưu access key và secret key trong nhà cung cấp CI/CD của bạn. Các access key dài hạn duy trì hợp lệ nếu bạn không hủy chúng, không giống như các thông tin xác thực bảo mật tạm thời chỉ hợp lệ cho các khoảng thời gian ngắn hơn.

Nó là một best practice khi dùng tạm thời, Các thông tin xác thực bảo mật có phạm vi được tạo bởi  AWS Security Token Service (AWS STS) giảm thiểu rủi ro của bạn nếu các thông tin xác thực bị lộ. Các token tạm thời được tạo một cách linh động thay vì được lưu lại. Bởi vì chúng hết hạn sau vài phút hoặc vài giờ, các token tạm thời giới hạn thời gian cho bất cứ tổn hại tiềm năng nào. Một token có phạm vi với ít giới hạn đặc quyền nhất cài vào các tài nguyên và ngăn chặn các truy cập rộng hơn trong môi trường của bạn. AWS SAM Pipeline hỗ trợ các thông tin xác thực ngắn hạn với 3 nhà cung cấp OIDC: Github, GitLab và Bitbucket.

Bài viết này trình bày các AWS SAM Pipeline có thể tích hợp Github Actions với môi trường AWS của bạn sử dụng các thông tin xác thực ngắn hạn, có phạm vi được cung cấp bởi tiêu chuẩn OIDC mở. Nó sử dụng một pipeline 2 giai đoạn đại diện cho một môi trường development và production.

Ví dụ này sử dụng Github như là một nhà cung cấp danh tính. Khi các công việc dev trong quy trình làm việc Github Actions cố gắng giả định vai trò thực thi dev pipeline trong tài khoản AWS, IAM xác nhận rằng OIDC token được cung cấp bắt nguồn từ một nguồn tin cậy. Cấu hình trong IAM cho phép giả định vai tròn từ các repository và branch Github cụ thể. AWS SAM Pipeline thực hiện khởi tạo cấu hình nặng nhọc cho cả Github Actions và IAM sử dụng nguyên tắc đặc quyền tối thiểu.

Điều kiện tiên quyết

  1. AWS SAM CLI, phiên bản 1.60.0 hoặc cao hơn
  2. GitHub account: Ban phải có các quyền được yêu cầu để cấu hình các dự án Github và tạo pipeline.
  3. Tạo một Github repository mới: sử dụng tên “sam-app”

Tạo một ứng dụng serverless mới 

Để tạo một ứng dụng serverless mới:

  1. Tạo một ứng dụng serverless local:
sam init –name sam-app –runtime python3.9 –app-template hello-world –no-tracing
  1. Khởi tạo git repository
cd sam-app
git init -b main
git add .
git commit -m “Creating a new SAM application”
  1. Push repository mới lên Github:
git remote add origin <REMOTE_URL> # e.g. https://github.com/YOURUSER/sam-app.git
git push -u origin main

Github đề nghị các cơ chế nhiều xác thực. Bất kể bạn xác thực như thế nào, đảm bảo rằng bạn có phạm vi  “workflow”. Github Actions chỉ cho phép các thay đổi cho pipeline của bạn khi bạn push với các thông tin xác thực được gắn trong phạm vi này.

Tạo các đối tượng triển khai ứng dụng 

Khi ứng dụng AWS SAM được tổ chức trong một Github repository, bạn có thể tạo các tài nguyên CI/CD trong AWS hỗ trợ hai giai đoạn triển khai cho môi trường ứng dụng serverless. Đây là việc tổ chức một lần.

Bước 1: Tạo pipeline cho giai đoạn đầu tiên

Chạy lệnh sau cho giai đoạn đầu tiên, trả lời các câu hỏi tương tác:

sam pipeline bootstrap –stage dev

Khi được nhắc chọn một “nhà cung cấp các quyền người dùng”, hãy chắc chắn chọn OpenID Connect (OIDC). Trong câu hỏi tiếp theo, chọn GitHub Actions là nhà cung cấp OIDC. Kết quả các lựa chọn này trong các lời nhắc thêm cho thông tin mà kết quả sau này trong một tích hợp đặc quyền tối thiểu với Github Actions.

Ảnh chụp màn hình sau cho thấy tương tác với AWS SAM CLI (một số giá trị có thể hiện khác đối với bạn):

Bước 2: Tạo các tài nguyên triển khai cho giai đoạn 2

Chạy lệnh sau và trả lời các câu hỏi tương tác:

sam pipeline bootstrap –stage prod

Với những lệnh này, AWS SAM CLI khởi chạy các tài nguyên AWS mà quy trình thực thi Github Action sau này sử dụng để triển khai hai giai đoạn của ứng dụng serverless. Điều này bao gồm  các Amazon S3 bucket cho các artifact và logs, và các IAM role cho các triển khai. AWS SAM CLI cũng tạo nhà cung cấp định danh IAM để thành lập Github Action như là một nhà cung cấp OIDC tin cậy.

Ảnh chụp màn hình dưới đây cho thấy các tài nguyên này từ trong bảng điều khiển AWS CloudFormation. Các tài nguyên này không đại diện cho một ứng dụng serverless, nhưng mà là  các tài nguyên AWS quy trình thực thi Github Action cần thực thi các triển khai. Stack aws-sam-cli-managed-dev-pipeline-resources tạo một  IAM OIDC identity provider được dùng để thành lập tin tưởng giữ tài khoản AWS của bạn và Github.

Tạo và triển khai một quy trình làm việc GIthub Action

Bước cuối cùng để tạo một Ci/CD pipeline trong Github Action là sử dụng Github repository nguồn và hai đối tượng triển khai trong các quy trình làm việc github Action.

Để tạo một cấu hình pipeline với AWS SAM Pipelines, chạy lệnh sau và trả lời các câu hỏi tương tác:

sam pipeline init

Ảnh chụp màn hình sau hiển thị tương tác với AWS SAM CLI (một số giá trị có thể khác với bạn):

AWS SAM CLI tạo một file local tên là pipeline.yaml là một định nghĩa quy trình làm việc Github Action. Quan sát file để thấy cách quy trình làm việc Github Action triển khai trong tài khoản AWS của bạn:

Trong công việc ví dụ này, Github Actions khởi tạo một Action tên  configure-aws-credentials dùng OIDC như là một các để giả định một vai trò AWS IAM cho hoạt động triển khai. Các thông tin xác thực hợp lệ trong 3600 giây (1 giờ).

Để triển khai quy trình làm việc Github Actions, commit file mới và push lên Github:

git add .
git commit -m “Creating a CI/CD Pipeline”
git push origin main

Khi github nhận commit này, repository tạo một Github Actions Workflow mới, được xác định bằng file cấu hình pipeline.yaml mới.

Quan sát quy trình làm việc Github Actions

  1. Điều hướng tới Actions của Github repository để thấy quy trình đầu tiên đang chạy:
  1. Chọn workflow run, bạn có thể thấy các chi tiết về việc triển khai.
  1. Khi bước deploy-testing bắt đầu, mở CloudFormation để thấy stack sam-app-dev đang triển khai.
  1. Github Actions Pipeline dần đến bước deploy-prod để triển khai môi trường production của ứng dụng AWS SAM của bạn. Tại lúc kết thúc Pipeline, bạn có hai ứng dụng AWS SAM trong tài khoản được triển khai bởi CloudFormation thông qua Github Actions. Mỗi thay đổi Đươc push lên Github repository bây giờ chạy một multi-stage CI/CD pipeline.

Bạn đã tạo thành công một CI/CD pipeline cho hệ thống nằm ngoài AWS có thể triển khai lên môi trường AWS của bạn mà không cần dùng thông tin xác thực dài hạn.

Dọn dẹp

Để xóa các tài nguyên trên AWS, chạy các lệnh AWS SAM CLI, trả lời “y” cho toàn bộ câu hỏi:

sam delete –stack-name sam-app-prod
sam delete –stack-name sam-app-dev
sam delete –stack-name aws-sam-cli-managed-dev-pipeline-resources
sam delete –stack-name aws-sam-cli-managed-prod-pipeline-resources

Bạn có thể quay lại Github và xóa repository bạn đã tạo 

Kết luận

AWS SAM Pipeline hỗ trợ OIDC là một tính năng mới của AWS SAM CLI làm đơn giản hóa việc tích hợp CI/CD pipeline nằm ngoài AWS. Sử dụng các thông tin xác thực ngắn hạn và khoanh các hành động trên AWS cho các công việc pipeline cụ thể giúp giảm rủi ro cho tổ chức của bạn. Bài này cho bạn thấy các bắt đầu với AWS SAM Pipeline để tạo một CI/CD pipeline dự trên Github Actions với hai giai đoạn phát triển.

AWS SAM workshop hoàn chỉnh cung cấp cho bạn với kinh nghiệm thực tế cho nhiều tính năng AWS SAM, bao gồm  CI/CD với GitHub Actions.

Xem video hướng dẫn để học cách tạo pipeline phát triển cho GitHub Actions, GitLab CI/CD, và Jenkins.

Để tìm thêm tài nguyên học tập, ghé https://serverlessland.com/explore/sam-pipelines.