tl;dr
- 2019/12現在、主要なコントローラはIRSAに対応したバージョンをリリース済み
- 個人管理でまだIRSAに対応していないものはありそう
- IRSAに対応しているものはIRSA, それ以外はkube2iamなど併用するのが良いかもしれない
長い説明
AWSにはIAM、Kubernetesにも権限管理の仕組みがある。
KubernetesではRBACの視点で権限管理は主に語られる。というかそれ以外の権限管理の話を知らないのでこの記事ではRBACについてのみ言及する。
AWSとkubernetesの権限管理の統合方法
Kubernetes サービスアカウントに対するきめ細やかな IAM ロール割り当ての紹介 | Amazon Web Services ブログに書かれている通り、主要な統合方法だけでも以下の種類がある。
- 粗粒度(coarce grained)
- node(EC2インスタンス)単位でのIAMロール割当て
- 細粒度(fine grained)
- kube2iam
- kiam
- Zalando's IAM controller
- IRSA(OIDC)
このうち、IRSAが2019/09に発表された最も新しい手法でかつAWS公式のソリューションでもあるので今後はこれがスタンダードになると予想される。
主要コントローラのIRSAサポート状況
IRSAを有効にするにはそれをサポートしたaws-sdkへコントローラ側が更新する必要がある。
サポートされる AWS SDK の使用 - Amazon EKSに書かれているバージョン以上のaws-sdkを使っているかがIRSAを使えるかどうかに関わってくる。
2019/12/19時点でのコントローラの対応状況はこんな感じ。
コントローラ | IRSAに対応したバージョン |
---|---|
ALB Ingress Controller | v1.1.3 |
External DNS | v0.5.17 |
External Secrets | v2.1.0 |
Cluster Autoscaler | v1.13.8 |
kube ingress aws controller | v0.8.12 |
aws app mesh controller for k8s | v0.2.0 |
argo cd | v2.4.0 |
amazon vpc cni k8s | v1.5.51 |
調べた限り基本的に対応していた。サポートされる AWS SDK の使用 - Amazon EKSにはALB ingress controllerやcluster autoscalerが対応していないと書いてあるがすでに対応したバージョンがリリースされている。
IRSAに対応していないコントローラもある状況で細粒度の権限管理をしたい場合
kube2iamなどとの併用が現実的な回答となる。
謝辞
この記事はSpeee社内でレビューをしていただきました。 @winebarrel さんありがとう!
-
1.5.5と書いてあるが怪しい。コミット上aws-sdkをbumpしたのは1.6.0RC4なのでドキュメントを信用せずそちらを使ったほうが良さそう。 ↩