Amazon Elastic Kubernetes Service (Amazon EKS) で次のエラーが表示されます。 「Your current user or role does not have access to Kubernetes objects on this EKS cluster.」
簡単な説明
このエラーは、AWS Identity and Access Management (AWS) アイデンティティのユーザーまたはロールで AWS マネジメントコンソールを使用するときに表示されることがあります。このエラーは、IAM ユーザーまたはロールに Kubernetes API へのアクセスに必要な RBAC 権限がないことを示しています。AWS マネジメントコンソールで Kubernetes リソースを表示するには、AWS IAM アイデンティティを Amazon EKS クラスターの aws-auth ConfigMap にマップする必要があります。詳細については、Kubernetes ウェブサイトの「](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)RBAC 認可を使用する[」を参照してください。
Amazon EKS クラスターを作成すると、クラスターの RBAC 設定で system: masters 権限が IAM アイデンティティに自動的に付与されます。これにより、Amazon EKS コンソールから Kubernetes リソースを表示することができます。また、Kubernetes 内で aws-auth ConfigMap を編集し、追加の AWS ユーザーまたはロールにクラスターを操作する権限を付与することもできます。AWS マネジメントコンソールは IAM を使用して認証し、EKS クラスターは Kubernetes RBAC システムを使用します。クラスターの aws-auth ConfigMap は IAM ID をクラスター RBAC ID に関連付けるため、aws-auth ConfigMap は IAM ID を Kubernetes ID に関連付けます。
解決策
前提条件
状況に応じて、次の情報を収集してください。
管理者以外のユーザーまたはロール
クラスター管理者 IAM ユーザーまたはロールではないユーザーが、Amazon EKS コンソールでの表示が必要な場合は、次のステップを実行してください。
- AWS マネジメントコンソールユーザーの IAM アイデンティティ ARN を取得します。AWS IAM 認証システムでは、ConfigMap で使用されるロール ARN 内のパスを許可しません。IAM ロールの場合は、次の ARN 形式を使用してください。
arn:aws:iam::111122223333:role/example
**注:**次の形式には不要な情報が含まれているため、使用しないでください。
arn:aws:iam::111122223333:role/my-team/developers/example
- ARN をクラスター管理者に知らせて、管理者にあなたを aws-auth ConfigMap に追加するようにリクエストしてください。
注: ARN にアクセスする手順については、「AWS マネジメントコンソールユーザーの IAM アイデンティティ ARN を特定する」セクションを参照してください。
**クラスター作成者またはクラスター管理者のユーザーまたはロール **
クラスター作成者またはクラスター管理者は、kubectl ツールまたは eksctl ツールで aws-auth ConfigMap を管理してください。
注: デフォルトでは、system: master グループは cluster-admin という名前の clusterrole にバインドされています。この clusterrole は、ポリシールールでリソースと動詞にワイルドカード (「*」) を使用します。つまり、system: masters グループに割り当てられたすべてのユーザーは、クラスター内のすべての Kubernetes リソースにフルアクセスできます。
クラスター作成者とクラスター管理者が管理ステータスを確認する方法の詳細な手順については、「クラスター作成者の識別」セクションを参照してください。
AWS マネジメントコンソールユーザーの IAM アイデンティティ ARN を特定する
コンソールへのアクセスに使用している IAM ユーザーまたはロールを特定します。これは、AWS コマンドラインインターフェイス (AWS CLI) で使用する IAM ID とは異なる場合があります。特定された IAM ユーザーまたはロールに、AWS マネジメントコンソールですべてのクラスターのノードとワークロードを表示する権限があることを確認します。ARN にアクセスするには、次のいずれかのオプションを使用します。
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用しているようにしてください。
AWS CLI
IAM ユーザーまたはロールに AWS CLI でアクセスできる場合は、次のコマンドを実行します。
aws sts get-caller-identity --query Arn
CloudShell
AWS CLI でアクセスできない場合は、AWS CloudShell から次のコマンドを実行します。
aws sts get-caller-identity --query Arn
出力は次のようになります。
"arn:aws:iam::111122223333:role/testrole"
\ - または -
"arn:aws:iam::111122223333:user/testuser"
注:
- IAM ロールの ARN の場合は、その形式が前提条件セクションからの ARN 形式と似ていることを確認してください。
- ARN に assumed-role が含まれている場合は、ロールの ARN を取得する必要があります。たとえば、引き受けたロール ARN、 arn:aws:sts::123456:assumed-role/MyRole/aadams は、ロール ARN、arn:aws:sts::123456:role/MyRole に関連付けられています。この値は IAM コンソールで確認できます。
クラスター作成者を特定する
クラスターを設定するための主要な権限を持つクラスター作成者または管理者ロールは、AWS CloudTrail で CreateCluster API 呼び出しを検索します。次に、API 呼び出しの UserIdentity セクションを確認します。CloudTrail でクラスター作成者名が見つかっても削除されている場合は、同じ名前の新しい IAM ユーザーまたはロールを作成します。この新しい IAM エンティティは、元のクラスター作成者と同じ ARN を持っているため、クラスターへの同じ管理者アクセス権を継承します。
注: CloudTrail には 90 日間の履歴しかありません。
新しい IAM ユーザーまたはロールを Kubernetes RBAC に追加します
新しい IAM ユーザーまたはロールを Kubernetes RBAC に追加するには、まずクラスター作成者 IAM を使用するように AWS CLI を設定します。AWS CLI が IAM アイデンティティで正しく設定されていることを確認するには、次のコマンドを実行します。
$ aws sts get-caller-identity
出力で IAM ユーザーまたはロールの ARN が返ります。例:
{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}
次に、kubectl または eksctl を使用して aws-auth コンフィグマップを変更します。
kubectl
-
kubectl を使用して aws-auth ConfigMap を変更するには、次の kubectl コマンドを実行してクラスターにアクセスします。
$ kubectl edit configmap aws-auth -n kube-system
コンソールには現在の ConfigMap が表示されます。クラスターに接続できない場合は、kubeconfig ファイルを更新してみてください。クラスターを作成する ID には常にクラスターへのアクセス権があるため、クラスターにアクセスできる IAM 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 サーバーエンドポイントに接続する必要があります。
-
クラスター作成者または管理者としてテキストエディタで aws-auth ConfigMap を編集するには、次のコマンドを実行します。
$ kubectl edit configmap aws-auth -n kube-system
-
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 はスーパーユーザーアクセスであらゆるリソースに対して任意のアクションを実行できるため、本番環境では system: masters を使用しないのがベストプラクティスです。付与された権限を最小限に抑えることがベストプラクティスです。特定の名前空間のみにアクセスできるロールを作成します。必要な権限の「特定の名前空間の Kubernetes リソースを表示」セクションを確認してください。
eksctl
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 クラスターリージョンに、\ _IAM\ _ARN を IAM ロールまたは ARN に置き換えます。
Amazon EKS クラスターへのアクセス権限を確認する
次の手順を実行します。
- Amazon EKS コンソールを開きます。
- ナビゲーションペインで、[クラスター] を選択します。
- クラスターを選択します。
- [概要] タブと [ワークロード] タブにエラーがないか確認します。
特定の名前空間を設定した場合、Amazon EKS コンソールに次のエラーメッセージが表示されます。
"Error loading Deploymentsdeployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"
特定の名前空間ではエラーは表示されません。エラーメッセージのトラブルシューティングを行うには、「[Compute] (コンピューティング) タブに [Nodes] (ノード) が表示されず、また [Resources] (リソース) タブにも何も表示されず、AWS Management Console でエラーが表示される」を参照してください。