はじめに
IRSA(IAM Roles for Service Accounts)とは、EKSクラスタ上で稼働するPodに対してIAMロールを割り当てる仕組みです。
Mac環境を想定しています。
実行環境の準備
-
AWS CLIの設定
AWS CloudFormationを動かすためのAWS CLIの設定を参考にしてください。 -
EKSクラスタの構築
Macでeksctlを利用してAmazon EKSのクラスターを構築するを参考にしてください。 -
EKSのコンテキストの設定
MacにてAmazon EKSの設定をするを参考にしてください。
IAM OIDC IDプロバイダの作成
クラスター用の IAM OIDC プロバイダーの作成を参考にしてください。
-
クラスタ名を設定する
CLUSTER_NAME=${クラスター名}
-
IDプロバイダを作成する
eksctl utils associate-iam-oidc-provider \ --cluster ${CLUSTER_NAME} \ --approve
IAMロールとサービスアカウントの作成
-
IAMロールとサービスアカウントを作成する
※今回はロール名をakane-dev-irsa-service-account
にしています。
※今回はAmazonS3ReadOnlyAccess
を設定する。NAMESPACE=akane eksctl create iamserviceaccount \ --name akane-dev-irsa-service-account \ --namespace ${NAMESPACE} \ --cluster ${CLUSTER_NAME} \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --approve
環境設定
※事前にKubernetesクラスターのコンテキストの設定をします。
-
akane-namespace.yaml
を作成するakane-namespace.yamlapiVersion: apps/v1 kind: Deployment metadata: namespace: akane name: akane-irsa labels: run: akane-irsa spec: replicas: 1 selector: matchLabels: run: akane-irsa strategy: {} template: metadata: labels: run: akane-irsa spec: containers: - command: - /bin/sh - -c - sleep 500 image: amazon/aws-cli name: akane-irsa resources: {} serviceAccountName: akane-dev-irsa-service-account
-
クラスターに適用する
kubectl apply -f akane-deployment.yaml
-
Podにログインする
kubectl -n akane exec -it $(kubectl get po -n akane -o=jsonpath='{.items[0].metadata.name}') sh
-
S3のアクセス権限を確認する
aws s3 ls
クリーンアップ
-
クラスターから削除する
kubectl delete -f akane-deployment.yaml
-
IAMロールとサービスアカウントを作成する
NAMESPACE=akane eksctl delete iamserviceaccount \ --name akane-dev-irsa-service-account \ --namespace ${NAMESPACE} \ --cluster ${CLUSTER_NAME}
-
IAM OIDC IDを削除する
eksctl delete cluster
を実行するとクラスターと一緒に削除されます。