EKSのIAM roles for service accounts機能を使いたい場合の注意点

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 以降のクラスターでは、このセキュリティコンテキストの指定は必須ではありません。」とある。