Cách thức hoạt động của IRSA trên AWS EKS
Giới Thiệu
IRSA là cách chính thức của AWS EKS để cho phép các pod chạy trong EKS truy vấn AWS API, sử dụng các quyền được config trong AWS IAM role. Khả năng config quyền truy cập vào AWS API trên mỗi Service Account hướng tới tối thiểu quyền hạn cho từng pod và tạo hệ thống an toàn hơn. Bài viết này sẽ phân tích thêm về nguyên lý hoạt động cơ bản của IRSA, giúp chúng ta hiểu được cách thức hoạt động của service này.
Nguyên lý hoạt động
Đây là một cụm EKS được đơn giản hóa, bên trong chúng ta có:
- Pod ‘A’ chạy ứng dụng
- Service Account ‘SA’ được mô tả qua annotation rằng nó muốn sử dụng IAM Role ‘X’
Pod ‘A’ và Service Account ‘SA’ với annotation trỏ tới a IAM Role ‘X’
IAM Role ‘X’ có Trust Relationship chỉ tới
- K8s Service Account ‘SA’ cần assume role ‘X’
- K8s OIDC Provider của the EKS Cluster
AWS IAM Trust Relationship trỏ tới K8s OIDC Provider và Service Account
Service Accounts và Service Accounts Tokens
Khi tạo Service Account trong EKS, nó đồng thời tạo một Service Account Token
- Service Account Token này được lưu trong K8s Secret trong cùng namespace
- Token định dạng JWT(Json Web Token)
Gắn Service Account vào pod
Khi config Pod sử dụng Service Account, EKS sẽ:
- Mount service account token JWT được lưu trong secret vào trong Pod
- Thêm các biến ENV VARs sau vào trong Pod
AWS_ROLE_ARN=<IAM ROLE ARN>
AWS_WEB_IDENTITY_TOKEN_FILE=<PATH TO SERVICE ACCOUNT TOKEN>
ENV Vars and Token ‘SA-T’ được gắn vào Pod ‘A’
Request assume role
AWS SDK chạy trong ứng dụng sẽ lấy những ENV VARs trên để config. Nó sẽ gửi request tới AWS STS để yêu cầu assume role ‘X’ với request chứa service account token trong đó.
Pod ‘A’ requests AWS STS cấp quyền IAM Role ‘X’
Pod ‘A’ requests AWS STS cấp quyền IAM Role ‘X’
Request chứa:
- ARN của IAM Role ‘X’
- JWT của Service Account ‘SA’
AWS STS sẽ sử dụng config trong Trust Relationship của IAM Role ‘X’ để:
- Lấy key và config trong OIDC Discovery endpoint để xác thực service account token
- Đảm bảo Service Account ‘SA’ được trust để asume Role ‘X’
AWS STS xác thực JWT
Khi xác thực thành công
STS sẽ cấp security credentials của role ‘X’ cho ứng dụng chạy trong Pod ‘A’
Khi này ứng dụng có thể call tới AWS API để sử dụng các dịch vụ của AWS với những quyền được cấp.
Kết luận
Bài viết trên đã phân tích cách thức IRSA hoạt động và cách tương tác giữa các thành phần của AWS và K8S. Những kiến thức trên sẽ hữu ích cho bạn trong việc hiểu cấu hình để sửa lỗi service này trong công việc.
Bài viết được dịch từ: https://medium.com/@ankit.wal/the-how-of-iam-roles-for-service-accounts-irsa-on-aws-eks-3d76badb8942
Tác giả: Đặng Viết Huy
Tìm hiểu thêm về cơ hội làm việc tại Pixta Vietnam
🌐 Website: https://pixta.vn/careers
🏠 Facebook: https://www.facebook.com/pixtaVN
🔖 LinkedIn: https://www.linkedin.com/company/pixta-vietnam/
✉️ Email: recruit.vn@pixta.co.jp
☎️ Hotline: 024.6664.1988