0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IRSAからEKS Pod Identityへの移行:OIDCなしでAWS Load Balancer Controllerをインストールする

0
Posted at

IRSAからEKS Pod Identityへの移行:OIDCなしでAWS Load Balancer Controllerをインストールする

背景

AWS EKSのPodがAWSリソースにアクセスする認可方式は主に3つあります。

  1. ノードIAMロールの継承(全Pod共通、セキュリティリスク大)
  2. IRSA + OIDC(標準的だがガバナンス要件が重い)
  3. EKS Pod Identity Agent(推奨される代替手段)

当プロジェクトではAWS Load Balancer Controller(LBC)の導入時にブロックが発生しました。AWS公式ドキュメントはEKS OIDCの利用を前提としていますが、社内セキュリティポリシーによる厳格な制限のため、OIDCの承認に1ヶ月以上を要しています。この停滞を解消するため、EKS Pod Identity Agent を採用しました。

Pod Identityはノードロール継承よりも安全であり、かつOIDCプロバイダーを必要としないため、運用負荷も軽減されます。本記事ではManifest方式を用い、OIDCに依存しないLBCの導入手順を解説します。

注意: HelmチャートはOIDC固有の設定と強く結合している場合があるため、本構成では制御性の高いManifest方式を推奨します。

前提条件

  • 既存のEKSクラスター
  • kubectl がクラスターに接続済みであること
  • IAMロール作成およびEKS Pod Identity関連付けの権限

実装手順

1. EKS Pod Identity Agentアドオンのインストール

LBCの設定前に、Pod Identity Agentをクラスターに導入します。

aws eks create-addon \
    --cluster-name <your-cluster-name> \
    --addon-name eks-pod-identity-agent \
    --region <your-region>

Podが正常に起動していることを確認します。

kubectl get pods -n kube-system | grep pod-identity

2. LBC用IAMロールの作成(信頼ポリシーの変更)

IRSAとは異なり、Pod IdentityではOIDCの信頼関係を使用しません。LBC用のIAMロールを作成し、信頼ポリシーを以下に置き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "pods.eks.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ]
        }
    ]
}

また、通常のドキュメントに従い、必要なLBC権限ポリシー(AWSLoadBalancerControllerIAMPolicy)をアタッチしてください。

3. LBCマニフェストの編集と適用

公式ドキュメント「Install AWS Load Balancer Controller (Manifest)」の手順に従いますが、以下の重要な変更を加えます。

Step 3: Install AWS Load Balancer Controller の "Make the following edits to the file" セクションにおいて:

手順 (d) Required only for Fargate or Restricted IMDS を必ず適用してください。
Fargate未使用の場合でも、Pod Identity利用時はこの設定が必要です。これにより、コントローラーがノードメタデータサービスではなくPod Identityエンドポイント経由で認証情報を取得できます。
編集後、マニフェストを適用します。

kubectl apply -f v2_8_2_full.yaml

4. Pod Identity Associationの作成

この手順がIRSAにおけるService Accountアノテーションの代わりとなります。AWSマネジメントコンソールで以下を実行します。

1.EKSクラスター → Access タブ → Pod Identity associations に移動

2.Create association をクリック

3.以下のマッピングを設定:

  • Namespace: kube-system
  • Service account: aws-load-balancer-controller
  • IAM role: 手順2で作成したロールのARN

4.その他のオプションはデフォルトのまま作成

CLIでの実行例:

aws eks create-pod-identity-association \
    --cluster-name <your-cluster-name> \
    --namespace kube-system \
    --service-account aws-load-balancer-controller \
    --role-arn arn:aws:iam::<account-id>:role/<lbc-role-name>

5. 動作確認とトラブルシューティング

LBCデプロイメントの状態を確認します。

kubectl get deployment -n kube-system aws-load-balancer-controller

⚠️ 重要: Association作成直後にPodが Pending や CrashLoopBackOff になる、またはロールを引き受けられない場合は、Podを削除して再作成してください。認証情報の注入はPod起動時に行われるため、既存のPodは新しいAssociationを自動的には反映しません。

kubectl delete pods -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller

参考リンク
EKS Pod Identities Overview
Install LBC via Manifest
IRSA Documentation(比較用)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?