EKSのIAM roles for service accounts機能(サービスアカウントにIAM ロールを割り当てる機能)を使いたい場合の注意点です。
AWS SDKのバージョンを確認する
IAM roles for service accounts機能を使いたい場合、サポートされているバージョンでないと機能しません。
以下のページにサポートされているSDKバージョンが記載されているので確認しましょう。
サポートされる AWS SDK の使用 - Amazon EKS
私が試したとき使っているSDKのバージョンが古くて動かなく、無駄に時間を消費しました。。
コンテナのプロセスがroot権限以外で動いている場合、適切な権限を付与する
サービスアカウントにIAM ロールを割り当てる機能の仕組みは以下のブログがとても詳しいです。
EKSでの認証認可 〜aws-iam-authenticatorとIRSAのしくみ〜 - もうずっといなかぐらし
で、最終的にコンテナのプロセスが /var/run/secrets/eks.amazonaws.com/serviceaccount/token
の Web Identity Token Fileを読み込む必要があるんですが、デフォルトではroot権限でしか読み込めません。
そのため、以下のようにsecurityContextのfsGroupを指定する必要があります。
apiVersion: apps/v1 kind: Deployment metadata: name: <my-app> spec: template: metadata: labels: app: <my-app> spec: serviceAccountName: <my-app> containers: - name: <my-app> image: <my-app>:latest securityContext: fsGroup: 有効なグループID
詳しくは以下の記事内をfsGroupで検索して下さい。
技術概要 - Amazon EKS
追記
Kubernetes 1.19からsecurityContextの指定は不要になりました。 https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/iam-roles-for-service-accounts-technical-overview.html で「1.19 以降のクラスターでは、このセキュリティコンテキストの指定は必須ではありません。」とある。