記事の目的
eksctlコマンドでクラスターを作成すると、操作した端末に自動的に認証トークンが設定され、特に何も意識しなくてもkubectlコマンドが使えるようになる。
ただし、これだけだと他の端末でクラスターを操作することはできないため、適切なアクセス権を付与する必要がある。
この記事ではとりあえずsystem:mastersのフル権限を付与する手順を記載する。(実環境ではRBACによる適切なロールの付与が必要)
参考ドキュメント
クラスター認証
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cluster-auth.html
Amazon EKS でクラスターを作成した後、他の IAM ユーザーおよびロールにアクセス権を付与するにはどうすればよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/amazon-eks-cluster-access/
クラスターへの IAM ユーザーおよびロールアクセスを有効にする
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/add-user-role.html
RBAC認可を使用する
https://kubernetes.io/ja/docs/reference/access-authn-authz/rbac/
前提
動作確認環境
- k8sバージョン 1.23
- aws cliバージョン 2.7.31
- eksctlバージョン 0.122.0
- kubectlバージョン 1.25.2
本題
以下の作業はクラスター作成者のIAMユーザー権限で実施
- 自身がクラスター作成者のIAMユーザーになれない場合は、この作業をクラスター作成者に依頼する
- そもそもクラスター作成者がわからない場合は、CloudTrailの履歴から「CreateCluster」を呼び出したユーザーを検索し特定する → 参考
- クラスター作成者がIAMユーザーではなく、IAMロールの場合は'aws sts assume-role'コマンドで一時的な認証情報を引き受ける → 参考
- 今回の手順ではgroupに
system:mastersを指定するが、このgroupは無制限に何でもできてしまう権限なので、実際の環境ではRBACで適切なgroupを作成すること → 参考
クラスターにIAMユーザー(またはロール)を追加する
以下のコマンドで、アクセス権を与えたいIAMユーザーをconfigMapに追加する
eksctl create iamidentitymapping \
--cluster クラスタ名 \
--arn アクセス権を与えるIAMユーザー(またはロール)のARN \
--username アクセス権を与えるIAMユーザー(またはロール)名 \
--group system:masters
eksctl create iamidentitymapping \
--cluster hoge-cluster \
--arn arn:aws:iam::111122223333:user/other-user \
--username other-user \
--group system:masters
(オプション)aws-authのconfigMapを直接編集する方法もある
kubectl edit -n kube-system configmap/aws-auth
以下の作業はクラスターを操作したい端末で実施
操作したいクラスタをkubectlの管理対象に加える
# EKSで作成されているk8sクラスターの一覧を参照
aws eks list-clusters
# 管理対象に加えたいクラスターを現在のIAMユーザーに紐付ける(クラスタ名は上記で参照した名称を指定、リージョン名は適宜修正)
aws eks update-kubeconfig --region ap-northeast-1 --name hoge-cluster
# 現在のkubectl管理対象コンテキストが切り替わっていることを確認※
kubectl config current-context
# クラスターの情報が取得できることを確認
kubectl get all
※コンテキストが切り替わらない場合はこちらを参考に手動でコンテキストを切り替える