EKS淺談 - IRSA


IAM 是AWS常用的安全模型,讓你可以通過認證及授權來控制用戶存取不同的服務及資源。 而Kubernetes也有類似的安全模型: Role Based Access Control(RBAC),也是透過認證及授權來控制用戶存取於羣集裡面的資濕。

IAM Roles for Service Accounts(IRSA) 是AWS的一個功能,透過把IAM Role跟EKS羣集裡面的service account連結起來,從而使羣集內的service account可以跟據IAM Role的權限來存取AWS內的資源。

情境

  • 在EKS羣集裡運行的容器需要存取私有S3

若要達到以上要求,EKS當中有以下三個方法:

  1. 增設一個IAM User並把登入資料儲存成K8S Secret,以Volume掛載用以配置AWS SDK
  2. IMDS/IMDSv2形式去assume EKS羣集節點的IAM role
  3. IRSA形式新增一個IAM Role及K8S service account並使之連結,并把service account配置於容器當中
  • **方法1)**若要細分權限,每個容器均需要一個額外的IAM User,為此需要管理大量的登入資料,較難管理。
  • **方法2)**難於提供一個細緻的設定,不能根據每個容器所需的資源去細分權限,容易導致節點的IAM role權限過大。
  • IRSA正正可以透過相對獨立的IAM Role及service account去細分權限,亦使之易於管理。

設定

  1. 為你的EKS羣集設定IAM OIDC Provider
  2. 新增IAM Role並設定所需要存取資源的權限
  3. 為IAM Role設定相應的AssumeRole權限 - 容許EKS羣集透過OIDC來assume role
  4. 於EKS羣集新增一個service account並把它綁定到IAM Role上

詳情可參考AWS上的教學

原理

參考