1. ホーム
  2. amazon-web-services

[解決済み] kubectlエラー EKSクラスタにアクセスする際、サーバーにログインする必要がある(Unauthorized)。

2022-03-09 23:49:49

質問

EKSのスタートガイドにしたがってやっています。 kubectl get serviceを呼び出そうとすると、次のようなメッセージが表示されました:error: サーバーにログインする必要があります(Unauthorized) 以下は、私が行ったことです。
1. EKSクラスタを作成しました。
2. 以下のように設定ファイルを作成した。

apiVersion: v1
clusters:
- cluster:
    server: https://*********.yl4.us-west-2.eks.amazonaws.com
    certificate-authority-data: *********
  name: *********
contexts:
- context:
    cluster: *********
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "*********"
        - "-r"
        - "arn:aws:iam::*****:role/******"

  1. 最新のaws cliをダウンロード・インストール
  2. aws configureを実行し、IAMユーザーのクレデンシャルとリージョンをus-west-2に設定しました。
  3. IAMユーザーにsts:AssumeRoleのポリシーをEKSロールに追加し、信頼関係として設定する
  4. 設定ファイルを使用するようにkubectlをセットアップする

heptio-authenticator-aws token -r arn:aws:iam::**********:role/******** -i my-cluster-ame を実行すると、トークンを取得することができます。 しかし、クラスタにアクセスしようとすると、エラーが表示され続けます。サーバーにログインしている必要があります (認証されていません)

この問題を解決する方法を教えてください。

解決方法は?

<ブロッククオート

Amazon EKSクラスタを作成すると、クラスタを作成したIAMエンティティ(ユーザまたはロール)が管理者としてKubernetes RBAC認可テーブルに追加されます。初期状態では、そのIAMユーザーのみがkubectlを使用してKubernetes APIサーバーへの呼び出しを行うことができます。

eks-docs

そこで、他の アワーズ ユーザは、まず を編集して、IAMユーザーまたはロールをAmazon EKSクラスタに追加する必要があります。

を実行することで、ConfigMap ファイルを編集することができます。 kubectl edit -n kube-system configmap/aws-auth その後、新しいユーザーをマッピングするためのエディターが付与されます。

apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  mapUsers: |
    - userarn: arn:aws:iam::111122223333:user/ops-user
      username: ops-user
      groups:
        - system:masters
  mapAccounts: |
    - "111122223333"

を意識してください。 mapUsers を追加しているところです。 ops-user と共に mapAccounts ラベルで AWS のユーザーアカウントとKubernetesクラスタ上のユーザー名を指定します。

しかし、このアクションだけではRBACで提供される権限はありません。これらのエンティティ権限を提供するには、クラスタでロールバインディングを作成する必要があります。

amazonのドキュメントにあるように( iam-docs ) によると、ConfigMap で指定されたユーザーに対して、kubernetes クラスタ上でロールバインディングを作成する必要があるとのことです。そのためには、以下のコマンドを実行します ( kub-docs ):

kubectl create clusterrolebinding ops-user-cluster-admin-binding --clusterrole=cluster-admin --user=ops-user

これはクラスタ管理者に ClusterRole という名前のユーザーに ops-user をクラスタ全体で使用します。