eksctlでconfigmap/aws-authを編集する

2023年2月28日

Amazon EKS

configmap/aws-auth を修正するときは kubectl edit -n kube-system configmap/aws-auth コマンドで ConfigMap を編集する方法が、過去に以下のドキュメントで紹介されていました。

最近になってドキュメントを確認したら、kubectl で aws-auth を変更するのではなく eksctl などのツールを使って編集することが推奨されるようになっていました。EKS のベストプラクティス Identity and Access Management - EKS Best Practices Guides にもツールを使うように記載されています。直接編集して書式を間違えて、クラスタへのアクセス権限を失うリスクを軽減するためのようです。

この記事では eksctl を使って aws-auth を編集する方法を試したので備忘録として残します。eksctl のバージョンは 0.131.0。EKS のバージョンは 1.23。

目次

  1. aws-auth に IAM ユーザを追加する
  2. aws-auth に IAM ロールを追加する
  3. aws-auth から IAM ユーザや IAM ロールを削除する
  4. 設定ファイルから aws-auth に追加する
  5. 設定ファイルから 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

-技術ブログ
-