configmap/aws-auth を修正するときは kubectl edit -n kube-system configmap/aws-auth
コマンドで ConfigMap を編集する方法が、過去に以下のドキュメントで紹介されていました。
- Amazon EKS でクラスターを作成した後、他の IAM ユーザーおよびロールにアクセス権を付与するにはどうすればよいですか?
- クラスターへの IAM ユーザーおよびロールアクセスを有効にする - Amazon EKS
最近になってドキュメントを確認したら、kubectl で aws-auth を変更するのではなく eksctl などのツールを使って編集することが推奨されるようになっていました。EKS のベストプラクティス Identity and Access Management - EKS Best Practices Guides にもツールを使うように記載されています。直接編集して書式を間違えて、クラスタへのアクセス権限を失うリスクを軽減するためのようです。
この記事では eksctl を使って aws-auth を編集する方法を試したので備忘録として残します。eksctl のバージョンは 0.131.0。EKS のバージョンは 1.23。
目次
- aws-auth に IAM ユーザを追加する
- aws-auth に IAM ロールを追加する
- aws-auth から IAM ユーザや IAM ロールを削除する
- 設定ファイルから aws-auth に追加する
- 設定ファイルから aws-auth を削除する
aws-auth に IAM ユーザを追加する
IAM ユーザを追加するときは以下のコマンドで。パラメータは環境に応じて置き換えてください。
eksctl create iamidentitymapping \
--cluster my-eks \
--region=ap-northeast-1 \
--group system:masters \
--arn arn:aws:iam::11122223333:user/my-user \
--username my-user \
--no-duplicate-arns
以下のように追加されます。
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::11122223333:role/my-eks-nodegroup-NodeInstanceRole-XXXXXXXXXXXXX
username: system:node:{{EC2PrivateDNSName}}
mapUsers: |
- groups:
- system:masters
userarn: arn:aws:iam::11122223333:user/my-user
username: my-user
aws-auth に IAM ロールを追加する
IAM ロールを追加する場合は以下のコマンドで。
eksctl create iamidentitymapping \
--cluster my-eks \
--region=ap-northeast-1 \
--group system:masters \
--arn arn:aws:iam::11122223333:role/my-role \
--username my-role \
--no-duplicate-arns
以下のように追加されます。
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::11122223333:role/my-eks-nodegroup-NodeInstanceRole-XXXXXXXXXXXXX
username: system:node:{{EC2PrivateDNSName}}
- groups:
- system:masters
rolearn: arn:aws:iam::11122223333:role/my-role
username: my-role
aws-auth から IAM ユーザや IAM ロールを削除する
追加した IAM ユーザやロールを削除する場合は以下のコマンドで。--arn
オプションで指定した ARN がキーになって削除されるようです。グループを変えたい時など、aws-auth の内容を変更したいときは、一度削除して作り直す形になります。
IAM ユーザを削除
eksctl delete iamidentitymapping \
--cluster my-eks \
--region=ap-northeast-1 \
--arn arn:aws:iam::11122223333:user/my-user
IAM ロールを削除
eksctl delete iamidentitymapping \
--cluster my-eks \
--region=ap-northeast-1 \
--arn arn:aws:iam::11122223333:role/my-role
設定ファイルから aws-auth に追加する
これまではコマンドのオプションで IAM ユーザの ARN などを指定していましたが、eksctl の設定ファイルから追加することもできます。
設定ファイル cluster.yaml に iamIdentityMappings を追加します。フォーマットは Config file schema - eksctl を参照。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-eks
region: ap-northeast-1
version: "1.23"
iamIdentityMappings:
- arn: arn:aws:iam::11122223333:role/my-role
groups:
- system:masters
username: my-role
noDuplicateARNs: true
- arn: arn:aws:iam::11122223333:user/my-user
groups:
- system:masters
username: my-user
noDuplicateARNs: true
以下のように実行します。設定ファイルと現状の差分を見て、足りないものを追加してくれます。
eksctl create iamidentitymapping -f cluster.yaml
設定ファイルから aws-auth を削除する
削除するときは、削除する IAM ユーザや IAM ロールの --arn
オプションの指定が必須です。クラスタ名などは設定ファイルを参照させることができます。
eksctl delete iamidentitymapping -f cluster.yaml --arn arn:aws:iam::11122223333:user/my-user