Bởi James Beswick | 09/02/2023 | trong AWS Serverless Application Model, Serverless | Permalink
Bài đăng này được viết bởi Rahman Syed, Specialist Solutions Architect, Serverless.
Các nhà phát triển ứng dụng phi máy chủ serverless applications sử dụng CLI với AWS Serverless Application Model (AWS SAM) để tạo CI/CD pipelines cho ứng dụng của họ. Vào tháng 10 năm 2022, AWS đã phát hành OpenID Connect (OIDC) hỗ trợ cho AWS SAM Pipelines. Điều này cải thiện tình trạng bảo mật của bạn bằng cách tạo các integrations 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à lớp xác thực dựa trên các tiêu chuẩn mở giúp khách hàng (client) và nhà cung cấp danh tính (Identity Provider – IdP) trao đổi thông tin dễ dàng hơn. Các công cụ CI/CD như GitHub, GitLab và Bitbucket cung cấp các hỗ trợ cho OIDC, đảm bảo rằng bạn có thể tích hợp với AWS để triển khai an toàn hơn.
Bài đăng trên blog này cho biết cách tạo GitHub Actions workflow tích hợp an toàn với AWS bằng cách sử dụng GitHub làm Identity Provider (IdP).
Bảo mật các hệ thống CI/CD được tương tác với AWS
AWS SAM Pipelines là một tính năng của AWS SAM CLI giúp tạo cấu hình CI/CD pipeline cho sáu hệ thống CI/CD. Bao gồm các AWS CodePipeline, Jenkins, GitHub Actions, GitLab CI/CD. Bạn có thể bắt đầu với các định nghĩa quy trình do AWS tuyển chọn hoặc tạo định nghĩa quy trình của riêng bạn để hỗ trợ các tiêu chuẩn của tổ chức.
CI/CD pipelines được lưu trữ bên ngoài AWS yêu cầu thông tin xác thực để triển khai vào môi trường AWS của bạn. Để làm được điều đó ta sẽ sử dụng user IAM (AWS Identity and Access Management), và ta cần phải lưu trữ khóa truy cập (access key) và khóa truy cập bí mật (secret access key) trong nhà cung cấp CI/CD của mình. Khóa truy cập dài hạn (long-term access keys) vẫn có hiệu lực trừ khi bạn thu hồi chúng, không giống như thông tin xác thực bảo mật (temporary security credentials) tạm thời có hiệu lực trong khoảng thời gian ngắn hơn.
Cách tốt nhất là sử dụng thông tin xác thực bảo mật tạm thời, có phạm vi được tạo bởi AWS Security Token Service (AWS STS) để giảm rủi ro nếu thông tin xác thực bị lộ. Mã thông báo tạm thời (temporary tokens) được tạo động thay vì được lưu trữ. Vì chúng hết hạn sau vài phút hoặc vài giờ nên mã thông báo tạm thời sẽ giới hạn thời lượng của bất kỳ sự xâm phạm tiềm ẩn nào. Mã thông báo có phạm vi đặc quyền tối thiểu sẽ giới hạn quyền đối với một tập hợp tài nguyên và ngăn chặn quyền truy cập rộng hơn trong môi trường của bạn. AWS SAM Pipelines hỗ trợ thông tin xác thực ngắn hạn với ba nhà cung cấp OIDC: GitHub, GitLab và Bitbucket.
Bài đăng này cho thấy cách AWS SAM Pipelines có thể tích hợp các GitHub Actions với môi trường AWS của bạn bằng cách sử dụng các thông tin xác thực ngắn hạn, có phạm vi được hỗ trợ bởi tiêu chuẩn mở OIDC. Nó sử dụng two-stage pipeline, để thể hiện môi trường development và production.
Ví dụ này sử dụng GitHub làm Identity Provider (IdP). Khi dev trong luồng làm việc GitHub Actions là cố gắng đảm nhận role thực thi Dev Pipeline trong AWS account, IAM sẽ xác thực rằng token OIDC được cung cấp có nguồn gốc từ một nguồn đáng tin cậy. Cấu hình trong IAM cho phép giả định roles từ GitHub repositories và branches được chỉ định. Bước đầu AWS SAM Pipelines thực hiện cấu hình GitHub Actions và IAM bằng cách sử dụng nguyên tắc đặc quyền tối thiểu (least-privileged).
Điều kiện tiên quyết
- AWS SAM CLI, phiên bản 1.60.0 trở lên
- Tài khoản GitHub: Bạn phải có các quyền cần thiết để cấu hình các dự án GitHub và tạo pipelines.
- Tạo GitHub repository mới, sử dụng tên “sam-app”.
Tạo một serverless application mới
Để tạo một serverless application mới:
- Tạo AWS SAM application ở local:
| “`bash sam init –name sam-app –runtime python3.9 –app-template hello-world –no-tracing “` |
- “`bash
sam init –name sam-app –runtime python3.9 –app-template hello-world –no-tracing
“` - Khởi tạo git repository:
| “`bash cd sam-appgit init -b maingit add .git commit -m “Creating a new SAM application” “` |
- “`bash
cd sam-app
git init -b main
git add .
- git commit -m “Creating a new SAM application”
“` - Đẩy repository mới lên GitHub:
| “`bash git remote add origin <REMOTE_URL> # e.g. https://github.com/YOURUSER/sam-app.gitgit push -u origin main “` |
- “`bash
git remote add origin <REMOTE_URL> # e.g. https://github.com/YOURUSER/sam-app.git - git push -u origin main
“`
Github cung cấp nhiều cơ chế xác thực. Bất kể bạn xác thực bằng cách nào, hãy đảm bảo bạn có phạm vi “workflow”. GitHub Actions chỉ cho phép thay đổi quy trình của bạn khi bạn đẩy bằng thông tin xác thực có đính kèm phạm vi này.
Tạo mục tiêu triển khai ứng dụng
Sau khi AWS SAM application được lưu trữ trong kho lưu trữ GitHub, bạn có thể tạo CI/CD trong AWS, hỗ trợ hai stage triển khai cho môi trường ứng dụng serverless.
Bước 1: Tạo pipeline cho stage đầu tiên.
| “`bashsam pipeline bootstrap –stage dev“` |
“`bash
sam pipeline bootstrap –stage dev
“`
Khi được nhắc chọn “user permissions provider”, hãy đảm bảo chọn OpenID Connect (OIDC). Tiếp theo hãy chọn GitHub Actions làm nhà cung cấp OIDC. Những lựa chọn này dẫn đến những lời nhắc bổ sung về thông tin mà sau này dẫn đến việc tích hợp least privilege với GitHub Actions.
Hình ảnh sau đây cho thấy sự tương tác với AWS SAM CLI (một số giá trị có thể hiển thị khác với bạn)
Bước 2: Tạo tài nguyên triển khai cho stage thứ hai.
Chạy lệnh sau và trả lời các câu hỏi tương tác:
| “`bashsam pipeline bootstrap –stage prod“` |
“`bash
sam pipeline bootstrap –stage prod
“`
Với các lệnh này, AWS SAM CLI khởi động các tài nguyên AWS, cái mà GitHub Actions workflow sau này sử dụng để triển khai hai stages của ứng dụng serverless. Điều này bao gồm các Amazon S3 bucket để lưu trữ artifacts và logs và IAM roles dành cho deployments. AWS SAM CLI cũng tạo nhà cung cấp nhận dạng IAM để thiết lập GitHub Actions với tư cách là nhà cung cấp OIDC đáng tin cậy.
Hình ảnh sau đây hiển thị các tài nguyên đã được tạo trong AWS CloudFormation console. Các tài nguyên này không đại diện cho ứng dụng phi máy chủ serverless application, nhưng đây là các tài nguyên AWS cái mà GitHub Actions workflow phải thực hiện việc deployments. Stack aws-sam-cli-managed-dev-pipeline-resources tạo IAM OIDC identity provider dùng để thiết lập sự tin cậy giữa tài khoản AWS của bạn và GitHub.
Tạo và triển khai GitHub Actions workflow
Bước cuối cùng để tạo CI/CD pipeline trong GitHub Actions là sử dụng GitHub repository và hai deployment targets trong GitHub Actions workflow.
Để tạo cấu hình pipeline với AWS SAM Pipelines, hãy chạy lệnh sau và trả lời các câu hỏi tương tác:
| “`bashsam pipeline init“` |
“`bash
sam pipeline init
“`
Hình ảnh sau đây thể hiện sự tương tác với AWS SAM CLI (một số giá trị có thể hiển thị khác với bạn):
AWS SAM CLI đã tạo một tệp cục bộ có tên là pipe.yaml, đây là định nghĩa GitHub Actions workflow. Kiểm tra tệp pipe.yaml để xem GitHub Actions workflow triển khai trong tài khoản AWS của bạn như thế nào:
Trong ví dụ này, GitHub Actions khởi tạo Action có tên là configure-aws-credentials sử dụng OIDC làm phương pháp để đảm nhận vai trò AWS IAM cho hoạt động triển khai. Thông tin đăng nhập có hiệu lực trong 3600 giây (một giờ).
Để triển khai GitHub Actions workflow, hãy xác nhận tệp mới và đẩy tới GitHub:
| “`bashgit add .git commit -m “Creating a CI/CD Pipeline”git push origin main“` |
“`bash
git add .
git commit -m “Creating a CI/CD Pipeline”
git push origin main
“`
Sau khi GitHub nhận được commit này, repository sẽ tạo GitHub Actions Workflow mới, như được xác định bởi tệp cấu hình pipe.yaml mới.
Kiểm tra GitHub Actions Workflow
1. Điều hướng đến mục Actions của GitHub repository để xem workflow đầu tiên đang diễn ra.
2. Chọn workflow run, bạn có thể xem chi tiết về việc triển khai.
3. Sau khi bước thử nghiệm triển khai bắt đầu, hãy mở bảng điều khiển CloudFormation để xem quá trình triển khai stack sam-app-dev.
4. GitHub Actions Pipeline cuối cùng sẽ đạt đến bước deploy-prod, bước này sẽ triển khai môi trường sản xuất của ứng dụng AWS SAM của bạn. Khi kết thúc quá trình chạy Pipeline, bạn có hai ứng dụng AWS SAM trong tài khoản của mình, nó được CloudFormation triển khai thông qua GitHub Actions. Giờ đây, mọi thay đổi được đẩy tới GitHub repository đều kích hoạt quy trình multi-stage CI/CD pipeline của bạn.
Bạn đã tạo thành công CI/CD pipeline cho hệ thống nằm bên ngoài AWS. Hệ thống này có thể triển khai trên môi trường AWS của bạn mà không cần sử dụng thông tin xác thực lâu dài.
Dọn dẹp
Để dọn sạch các tài nguyên trên AWS của bạn, hãy chạy các lệnh AWS SAM CLI, trả lời “y” cho tất cả các câu hỏi:
| “`bashsam delete –stack-name sam-app-prodsam delete –stack-name sam-app-devsam delete –stack-name aws-sam-cli-managed-dev-pipeline-resourcessam delete –stack-name aws-sam-cli-managed-prod-pipeline-resources“` |
“`bash
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ũng có thể quay lại GitHub và xóa repository mà bạn đã tạo.
Phần kết luận
AWS SAM Pipeline hỗ trợ OIDC là một tính năng mới của AWS SAM CLI giúp đơn giản hóa việc tích hợp các CI/CD pipelines được lưu trữ bên ngoài AWS. Việc sử dụng thông tin xác thực ngắn hạn và xác định phạm vi hành động AWS cho các nhiệm vụ quy trình cụ thể sẽ giúp giảm rủi ro cho tổ chức của bạn. Bài đăng này hướng dẫn bạn cách bắt đầu với AWS SAM Pipeline để tạo CI/CD pipeline dựa trên GitHub Actions với hai deployment stages.
Workshop AWS SAM cung cấp cho bạn trải nghiệm thực tế về nhiều tính năng của AWS SAM, bao gồm CI/CD với GitHub Actions.
Xem video hướng dẫn để tìm hiểu cách tạo quy trình triển khai cho GitHub Actions, GitLab CI/CD và Jenkins.
Để biết thêm tài nguyên, hãy truy cập https://serverlessland.com/explore/sam-pipelines.
TAGS: contributed, serverless