
EKSでクラスター作成後に他のIAMユーザーに自分と同じ管理者権限を与える
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
EKSクラスターを作成しました。この段階では作成者である自分のIAMエンティティのみがクラスターを操作できるsystem:masters権限を持っています。system:mastersって何?という方は、以下で詳しくまとめられていますのでご確認ください。
先程「自分のIAMエンティティがsystem:masters権限を持っている」と書きましたが、厳密には、すべての権限が付与されている cluster-adminロールがあり、そしてそのロールにバインディングされているsystem:mastersグループがあり、さらにそのグループのメンバーに自分のIAMエンティティが入っている、という感じでしょうか。
今回はこの権限を他のIAMユーザーにも付与してみたいと思います。eksctlを使います。
やることは大きくわけて 4つです。
- IAMユーザーを作成する
- 上記IAMユーザーに
system:masters権限を与える - 上記ユーザーでcontextを作成する
- テスト: kubectlコマンドを使ってみる
ではやっていきましょう。
1. IAMユーザーを作成する
IAMユーザーを作成する(コンソール)
詳細は割愛し、以下ページをもとに説明します。
- IAM ユーザーの作成 (コンソール) | AWS Identity and Access Management ユーザーガイド
- 3のユーザー名指定は今回
new-admin-testとしました。 - 4のアクセス許可の種類は[Programmatic access (プログラムによるアクセス)]を選択してください。[AWS マネジメントコンソール のアクセス]についてはあってもなくても構いません。ご用件に合わせてどうぞ。
- 6のアクセス許可の設定ですが、[Attach existing policies to user directly (既存のポリシーをユーザーに直接アタッチ)]を選び、
AdministratorAccessを検索して選択しました。(もっと弱い権限で良いはずですが一旦こちらで進めます。) - 11で表示されるAccess Key IDとSecret Access Keyを控えておきます。

- 3のユーザー名指定は今回
プロファイルの設定
$ aws configure --profile new-admin-test
上記コマンドを実行すると以下4つを聞かれます。
- AWS Access Key ID
- AWS Secret Access Key
- Default region name
- Default output format
AWS Access Key IDとAWS Secret Access Keyは先程控えたものを入力してください。
Default region nameは対象のEKSクラスターがあるリージョンで良いでしょう。東京リージョンの場合 ap-northeast-1です。
Default output formatは任意です。こちらを参考にお好きなものをどうぞ。何も指定しなければデフォルトでjsonになります。
ここまでの確認
$ aws sts get-caller-identity --profile new-admin-test
{
"UserId": "xxxxxxxxxxxxx",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/new-admin-test"
}
2. 上記IAMユーザーにsystem:masters権限を与える
eksctlを使います。
まず現状を確認します。
$ eksctl get iamidentitymapping \
--cluster (cluster名)
ARN USERNAME GROUPS
arn:aws:iam::123456789012:role/yyyy-node-NodeInstanceRole-zzzz system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
設定します。
$ eksctl create iamidentitymapping \ --cluster (cluster名) \ --arn arn:aws:iam::123456789012:user/new-admin-test \ --username new-admin-test \ --group system:masters [ℹ] eksctl version 0.31.0 [ℹ] using region ap-northeast-1 [ℹ] adding identity "arn:aws:iam::123456789012:user/new-admin-test" to auth ConfigMap
--arn値は権限付与したいIAMのARNです。IAMのコンソールでそのIAMユーザーの詳細画面にいけばARNをコピペできます。
設定できたか確認します。
$ eksctl get iamidentitymapping \
--cluster (cluster名)
ARN USERNAME GROUPS
arn:aws:iam::123456789012:role/yyyy-node-NodeInstanceRole-zzzz system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
arn:aws:iam::123456789012:user/new-admin-test new-admin-test system:masters
3. 上記ユーザーでcontextを作成する
$ aws eks --region ap-northeast-1 update-kubeconfig --name (cluster名) --profile new-admin-test
上記コマンドだけで対象クラスターへnew-admin-testで接続するためのcontext、またそれに紐づくuser、clusterが ~/.kube/configに追記されます。便利!
4. テスト: kubectlコマンドを使ってみる
すでに上記で作成されたcontextにスイッチした状態になっていますので、あとは
$ kubectl get all --all-namespaces
など任意のkubectlコマンドを打って確認してください。






