Amazon EKS の「Your current user or role does not have access to Kubernetes objects on this EKS cluster」というエラーを解決する方法を教えてください。

所要時間3分
0

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 IAM) のユーザーまたはロールで AWS マネジメントコンソールを使用するときに表示されることがあります。このエラーは、IAM ユーザーまたはロールに Kubernetes API へのアクセスに必要な RBAC (Kubernetes のウェブサイトからの) 権限がないことを示しています。AWS マネジメントコンソールで Kubernetes リソースを表示するには、AWS IAM ユーザーまたはロールを Amazon EKS クラスターの aws-auth ConfigMap にマップする必要があります。

Amazon EKS クラスターを作成すると、クラスターの RBAC 設定で system: masters 権限が IAM ユーザーまたはロールに自動的に付与されます。これにより、Amazon EKS コンソールから Kubernetes リソースを表示することができます。また、Kubernetes 内で aws-auth ConfigMap を編集し、追加の AWS ユーザーまたはロールにクラスターを操作する権限を付与することもできます。

2 つの異なる認証システムを使用しています。AWS マネジメントコンソールは IAM を使用します。EKS クラスターは Kubernetes RBAC システム (Kubernetes のウェブサイトにある) を使用しています。クラスターの aws-auth ConfigMap は IAM ID (ユーザーまたはロール) をクラスター RBAC アイデンティティに関連付けます。つまり、aws-auth ConfigMap は IAM アイデンティティを Kubernetes アイデンティティに関連付けるということです。

解決策

前提条件

始める前に、次の情報を収集してください。

管理者以外のユーザーまたはロール

クラスター管理者 IAM ユーザーまたはロールではないユーザーが、Amazon EKS コンソールでの表示が必要な場合は、次のステップを実行してください。

1.    AWS マネジメントコンソールユーザーの IAM アイデンティティ 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 アイデンティティ ARN を特定する」セクションを参照してください。

**クラスター作成者またはクラスター管理者のユーザーまたはロール **

クラスター作成者またはクラスター管理者は、kubectl ツールまたは eksctl ツールで aws-auth ConfigMap を管理してください。

注: デフォルトでは、system: master グループは cluster-admin という名前の clusterrole にバインドされています。この clusterrole は、ポリシールールでリソースと動詞にワイルドカード (「*」) を使用します。つまり、system: masters グループに割り当てられたすべてのユーザーは、クラスター内のすべての Kubernetes リソースにフルアクセスできます。

クラスター作成者とクラスター管理者が管理ステータスを確認する方法の詳細な手順については、「クラスター作成者の識別」セクションを参照してください。

AWS マネジメントコンソールユーザーの IAM アイデンティティ ARN を特定する

コンソールへのアクセスに使用している IAM ユーザーまたはロールを特定します。これは、AWS コマンドラインインターフェイス (AWS CLI) で使用する ID とは異なる場合があります。特定された IAM ユーザーまたはロールに、AWS マネジメントコンソールですべてのクラスターのノードとワークロードを表示する権限があることを確認します。次に、IAM アイデンティティの 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、 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 日間の履歴しかありません。

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 ロールを MapRole に追加します。例:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole    
    groups:
    - system:bootstrappers
    - system:nodes

次の情報を入力します:

  • system:masters では、スーパーユーザーは任意のリソースに任意のアクションを実行できます。これは実稼働環境のベストプラクティスではありません。
  • 付与された権限を最小限に抑えることがベストプラクティスです。特定の名前空間にのみアクセスできるロールを作成することを検討してください。詳細については、Kubernetes ウェブサイトの「Using RBAC authorization」を参照してください。また、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 クラスターリージョンに、\ _IAM\ _ARN を IAM ロールまたは ARN に置き換えます。

Amazon EKS クラスターへのアクセス権限を確認する

1.    Amazon EKS コンソールを開きます。

2.    [Amazon EKS] セクションのナビゲーションペインで、[クラスター] を選択します。

3.    クラスターを選択します。

4.    [概要] タブと [ワークロード] タブにエラーがないか確認します。

特定の名前空間を設定した場合、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"

特定の名前空間ではエラーは表示されません。

エラーメッセージのトラブルシューティングを行うには、「[Compute] (コンピューティング) タブに [Nodes] (ノード) が表示されず、また [Resources] (リソース) タブにも何も表示されず、AWS Management Console でエラーが表示される」を参照してください。


AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ