Amazon EKS の「現在のユーザーまたはロールには、この EKS クラスターの Kubernetes オブジェクトへのアクセス権がありません」というエラーを解決するにはどうすればよいですか?
Amazon Elastic Kubernetes Service (Amazon EKS) で「現在のユーザーまたはロールには、この EKS クラスターの Kubernetes オブジェクトへのアクセス権がありません」というエラーが表示されます。
簡単な説明
このエラーは、AWS Identity and Access Management (IAM) ユーザーまたはロールで AWS マネジメントコンソールを使用する場合に表示される場合があります。このエラーは、IAM ユーザーまたはロールに Kubernetes API にアクセスするために必要な (Kubernetes ウェブサイトからの)RBAC 権限がないことを示しています。AWS マネジメントコンソールで Kubernetes リソースを表示するには、AWS IAM ユーザーまたはロールを Amazon EKS クラスターの aws-auth ConfigMap にマップする必要があります。
Amazon EKS クラスターを作成すると、クラスターの RBAC 設定で、IAM ユーザーまたはロールに system:masters 許可が自動的に付与されます。これにより、Amazon EKS コンソールを介して、Kubernetes リソースを表示できます。また、Kubernetes 内で aws-auth ConfigMap を編集し、追加の AWS ユーザーまたはロールがクラスターとインタラクションする能力を付与することができます。
2 つの異なる認証システムが使用されています。AWS マネジメントコンソールは IAM を使用します。EKS クラスターは Kubernetes RBAC システムを使用しています (Kubernetes ウェブサイトから)。クラスターの aws-auth ConfigMap は、IAM ID (ユーザーまたはロール) をクラスターの RBAC ID に関連付けます。つまり、aws-auth の ConfigMap は IAM ID を Kubernetes ID に関連付けているということです。
解決方法
前提条件
始める前に、次の情報を収集してください。
管理者以外のユーザーまたはロール
クラスター管理者の IAM ユーザーまたはロールではなく、Amazon EKS コンソールでの可視性が必要な場合は、次の手順を実行してください。
1. AWS マネジメントコンソールユーザーの IAM ID Amazon リソースネーム (ARN) を取得します。
IAM ロールの場合は、次の ARN 形式を使用してください。
arn:aws:iam::111122223333:role/example
重要: 次の形式は使用しないでください。
arn:aws:iam::111122223333:role/my-team/developers/example
2. ARN をクラスター管理者に提供し、管理者に aws-auth ConfigMap にお客様を追加するよう依頼してください。
注: ARN にアクセスする手順については、「AWS マネジメントコンソールユーザーの IAM ID ARN を特定する」セクションを参照してください。
クラスター作成者またはクラスター管理者のユーザーまたはロール
クラスターの作成者またはクラスター管理者の場合は、kubectl ツールまたは eksctl ツールを使用して aws-auth ConfigMap を管理してください。
注:デフォルトでは、system:masters グループは cluster-admin という名前のクラスターロールにバインドされます。このクラスターロールは、PolicyRuleのリソースとVerbsにワイルドカード (「*」) を使用します。つまり、system:masters グループに割り当てられたすべてのユーザーは、クラスター内のすべての Kubernetes リソースにフルアクセスできるということです。
クラスター作成者とクラスター管理者が管理者のステータスを識別する方法の詳細な手順については、「クラスター作成者を特定する」セクションを参照してください。
AWS マネジメントコンソールユーザーの IAM ID ARN を特定します
コンソールへのアクセスに使用している IAM ユーザーまたはロールを特定します。これは、AWS コマンドラインインターフェイス (AWS CLI) で使用する ID とは異なる場合があります。特定された IAM ユーザーまたはロールに、AWS マネジメントコンソールですべてのクラスターのノードとワークロードを表示するためのアクセス権限があることを確認します。次に、IAM ID の ARN を取得します。ARN にアクセスするには、次のいずれかのオプションを使用します。
AWS CLI を使用する
IAM ユーザーまたはロールに AWS CLI にアクセスできる場合は、次のコマンドを実行します。
aws sts get-caller-identity --query Arn
CloudShell を起動
AWS CLI にアクセスできない場合は、次のコマンドを実行します。
aws sts get-caller-identity --query Arn
出力は次のようになります。
"arn:aws:iam::111122223333:role/testrole"
-または-
"arn:aws:iam::111122223333:user/testuser"
注意:
- IAM ロール ARN の場合は、形式が「前提条件」セクションで取得した ARN 形式と似ていることを確認してください。
- ARN にロールを引き継いだものが含まれている場合は、そのロールの ARN を取得する必要があります。たとえば、arn:aws:sts::123456:assumed-role/MyRole/aadams の想定ロール ARN は、arn:aws:sts::123456:role/MyRole というロール ARN に関連付けられています。この値は IAM コンソールで確認できます。
クラスター作成者を特定する
クラスターを設定するためのプライマリアクセス権限を持つクラスター作成者または管理者ロールを検索するには、AWS CloudTrail で CreateCluster API 呼び出しを検索します。その後、API 呼び出しの userIdentity セクションを確認します。
ヒント: CloudTrail でクラスター作成者の名前が見つかったのに削除されている場合は、同じ名前で新しい IAM ユーザーまたはロールを再作成してください。この新しい IAM エンティティは、元のクラスター作成者と同じ ARN を持っているため、クラスターへの同じ管理者アクセス権を継承します。
注: CloudTrail は 90 日間の履歴しか提供されません。
kubectl または eksctl を使用して、新しい IAM ユーザーまたはロールを Kubernetes RBAC に追加します。
kubectl または eksctl ツールを選択して aws-auth ConfigMap を編集する前に、必ずステップ 1 を完了してください。次に、手順 2~4 に従って kubectl で編集します。eksctl を使用して編集するには、手順 5 に進みます。
1. クラスターの作成者または管理者を特定したら、クラスター作成者の IAM を使用するように AWS CLI を設定します。詳細については、「設定の基本」を参照してください。
AWS CLI が IAM エンティティで正しく設定されていることを確認するには、次のコマンドを実行します。
$ aws sts get-caller-identity
出力は、IAM ユーザーまたはロールの ARN を返します。例:
{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
注: CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
2. kubectl を使用して aws-auth ConfigMap を変更するには、クラスターにアクセスできる必要があります。次の kubectl コマンドを実行します。
$ kubectl edit configmap aws-auth -n kube-system
コンソールには、現在の ConfigMap が表示されます。
クラスターに接続できない場合は、kubeconfig ファイルを更新してみてください。クラスターにアクセスできる IAM ID を使用してファイルを実行します。クラスターを作成した ID には、常にクラスターアクセス権があります。
aws eks update-kubeconfig --region region_code --name my_cluster
注: region_code を EKS クラスターの AWS リージョンコードに、 my_cluster を EKS クラスター名に置き換えてください。
kubectl コマンドは EKS サーバーエンドポイントに接続する必要があります。API サーバーエンドポイントが公開されている場合、エンドポイントに接続するにはインターネットにアクセスできる必要があります。API サーバーエンドポイントがプライベートの場合は、EKS クラスターが実行されている VPC 内から EKS サーバーエンドポイントに接続する必要があります。
3. テキストエディタで aws-auth ConfigMap を編集するには、クラスターの作成者または管理者が次のコマンドを実行します。
$ kubectl edit configmap aws-auth -n kube-system
4. IAM ユーザーまたはロールを追加します。
mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:bootstrappers - system:nodes
-または-
IAM ロールを mapRolesに追加します。例:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:bootstrappers - system:nodes
次の情報を考慮してください。
- system:masters は、スーパーユーザーがあらゆるリソースに対してあらゆるアクションを実行できるようにします。これは本番環境でのベストプラクティスではありません。
- 付与される権限を最小限に抑えることがベストプラクティスです。特定の名前空間にのみアクセスできるロールを作成することを検討してください。詳細については、Kubernetes ウェブサイトの「RBAC 認証の使用」を参照してください。また、Amazon EKS コンソールの制限付きアクセスの例については、「必要なアクセス権限」と「特定の名前空間での Kubernetes リソースの表示」セクションを確認してください。
5. eksctl ツールを使用すると、以下のコマンドで aws-auth ConfigMap を更新できます。
eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>
注: your_cluster_Name を EKS クラスター名に、your_region を EKS クラスターリージョンに、YOUR_IAM_ARN を IAM ロールまたは ARN に置き換えてください。
Amazon EKS クラスターへのアクセスを確認する
1. Amazon EKS コンソールを開きます。
2. Amazon EKS セクションのナビゲーションペインで、[Clusters] (クラスター) を選択します。
3. お客様のクラスターを選択します。
4. [Overview] (概要) タブと [Workloads] (ワークロード) タブにエラーがないかどうかを確認します。
特定の名前空間について設定した場合は、Amazon EKS コンソールで次のエラーメッセージが表示されます。
Error loading Deployments deployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"
エラーは、特定の名前空間については表示されません。
エラーメッセージのトラブルシューティングを行うには、「コンピュートタブのノードまたはリソースタブに何も表示されず、AWS マネジメントコンソールにエラーが表示される。」を参照してください。

関連するコンテンツ
- 質問済み 5年前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 4年前lg...
- AWS公式更新しました 8ヶ月前