2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者でも分かる!EKS道場【Day8】IRSAの真髄!Podに権限を授けてS3へアクセスせよ!

Posted at

【Day8】IRSAの真髄!Podに権限を授けてS3へアクセスせよ!

EKSの中で「PodにAWSリソースへの最小権限を与える」——それがIRSA(IAM Roles for Service Accounts)の真価。
今回は、自前で建てた簡単なPodからS3へ安全にアクセスできるように、IRSAの設定手順と実践例を完全ガイド!

1. 🔍 IRSAって何者?EKSで権限を分けるということ

IRSA(IAM Roles for Service Accounts)は、EKSのPodごとにIAMロールを割り当てる仕組み。

セキュアに、かつ最小限の権限でAWSリソースへアクセスできるのが強み。

例えば「S3はこのPodだけ使っていい」みたいな粒度の制御が可能!

2. 🛠️ 事前準備:OIDCプロバイダーとIAMロール

Step1:OIDCプロバイダーを確認(または有効化)

aws eks describe-cluster \
  --name <クラスタ名> \
  --region ap-northeast-1 \
  --query "cluster.identity.oidc.issuer" \
  --output text

→ このURLがOIDCプロバイダー。
まだ連携していない場合は以下の手順で有効化。

eksctl utils associate-iam-oidc-provider \
  --region ap-northeast-1 \
  --cluster <クラスタ名> \
  --approve

Step2:IAMポリシー作成(S3アクセス用)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::<バケット名>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::<バケット名>/*"
    }
  ]
}

Step3:IAMロール作成(信頼関係にOIDC指定)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<アカウントID>:oidc-provider/<OIDC URL>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "<OIDC URL>:sub": "system:serviceaccount:default:s3-access"
        }
      }
    }
  ]
}

3. 🚀 実践:IRSAでS3アクセス用のPodを作ってみる

Step4:ServiceAccount作成(IRSA連携)

service-account.yamlとして作成

apiVersion: v1
kind: ServiceAccount
metadata:
  name: s3-access
  namespace: default
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<アカウントID>:role/<IRSAロール名>

Step5:Podマニフェスト(S3 CLI付きPod)

pod.yamlとして作成

apiVersion: v1
kind: Pod
metadata:
  name: s3-cli
spec:
  serviceAccountName: s3-access
  containers:
  - name: s3cli
    image: amazon/aws-cli:2.13.14
    command: ["sleep", "3600"]

Podに入って aws s3 ls s3://<バケット名> を実行してアクセス確認!

kubectl exec -it s3-cli -- /bin/bash
aws s3 ls s3://<バケット名を入力>

image.png

次回予告 📢:PodとNodeのスケーリング道場:手動・自動でリソースを自在に操る

今まで作ってきたPodやNodeは、すべて一台で構成してきました。
本番環境では2台構成にしたりすることってありますよね。
その場合、ノードってどうなるの?Podってどう拡張するの?ということを解説していきます!

よければフォロー&いいねお願いします🙏

  • 「面白かった」「続きが気になる!」と思ったらLGTM👍
  • コメントで「聞きたい内容」「つまずきポイント」などもぜひ教えてください!

それではまた明日、EKS道場でお会いしましょう!押忍🔥

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?