EKSでクラスター作成後に他のIAMユーザーに自分と同じ管理者権限を与える

2020.11.18

EKSクラスターを作成しました。この段階では作成者である自分のIAMエンティティのみがクラスターを操作できるsystem:masters権限を持っています。system:mastersって何?という方は、以下で詳しくまとめられていますのでご確認ください。

先程「自分のIAMエンティティがsystem:masters権限を持っている」と書きましたが、厳密には、すべての権限が付与されている cluster-adminロールがあり、そしてそのロールにバインディングされているsystem:mastersグループがあり、さらにそのグループのメンバーに自分のIAMエンティティが入っている、という感じでしょうか。

今回はこの権限を他のIAMユーザーにも付与してみたいと思います。eksctlを使います。
やることは大きくわけて 4つです。

  1. IAMユーザーを作成する
  2. 上記IAMユーザーにsystem:masters権限を与える
  3. 上記ユーザーでcontextを作成する
  4. テスト: 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を控えておきます。

プロファイルの設定

$ 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コマンドを打って確認してください。

参考情報