Amazon EKS の「現在のユーザーまたはロールには、この EKS クラスターの Kubernetes オブジェクトへのアクセス権がありません」というエラーを解決するにはどうすればよいですか?

最終更新日: 2021 年 4 月 6 日

Amazon Elastic Kubernetes Service (Amazon EKS) で「現在のユーザーまたはロールには、この EKS クラスターの Kubernetes オブジェクトへのアクセス権がありません」というエラーが表示されます。

簡単な説明

このエラーは、Amazon EKS クラスターの aws-auth ConfigMap に含まれていない、AWS Identity and Access Management (IAM) ロールまたはユーザーで AWS マネジメントコンソールを使用する場合に表示されます。

Amazon EKS クラスターを作成すると、クラスターの RBAC 設定で、IAM ユーザーまたはロール (クラスターを作成するフェデレーティッドユーザーなど) に system:masters アクセス権限が自動的に付与されます。Amazon EKS コンソールにアクセスし、IAM ユーザーまたはロールが aws-auth ConfigMap の一部でない場合、クラスターの Kubernetes ワークロードまたは概要の詳細を表示することはできません。

追加の AWS ユーザーまたはロールがクラスターとインタラクションできるようにするには、Kubernetes 内で aws-auth ConfigMap を編集する必要があります。

解決方法

注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新のバージョンの AWS CLI を使用していることを確認してください

IAM ユーザーまたはロールのアクセス権限を設定する

1.    クラスターを設定するためのプライマリアクセス権限を持つクラスター作成者または管理者ロールを検索するには、AWS CloudTrail で CreateCluster API 呼び出しを検索します。その後、API 呼び出しの userIdentity セクションを確認します。

注: CloudTrail は 90 日間の履歴のみを提供します。

2.    アクセス権限を必要とする IAM ユーザーまたはロールを特定します。

3.    特定された IAM ユーザーまたはロールに、AWS マネジメントコンソールですべてのクラスターのノードとワークロードを表示するためのアクセス権限があることを確認します。

aws-auth ConfigMap を使用して、IAM ユーザーまたはロールを RBAC ロールおよびグループにマッピングする

重要: Amazon EKS API サーバーに接続する前に、最新バージョンの AWS CLI をインストールして、設定します。

1.    AWS CLI ユーザーまたはロールの設定を取得します。

$ aws sts get-caller-identity

この出力は、IAM ユーザーまたはロールの Amazon リソースネーム (ARN) を返します。例:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

2.    ARN が、クラスターを設定するためのプライマリアクセス権を持つクラスターの作成者または管理者と一致することを確認します。ARN がクラスターの作成者または管理者と一致しない場合は、クラスターの作成者または管理者に連絡して aws-auth ConfigMap を更新します。

3.    テキストエディタで aws-auth ConfigMap を編集するには、クラスターの作成者または管理者が次のコマンドを実行する必要があります。

$ kubectl edit configmap aws-auth -n kube-system

4.    IAM ユーザーまたは IAM ロールを追加するには、以下のいずれかのステップを実行します。

IAM ユーザーを mapUsersに追加します。例:

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:bootstrapperssystem:nodes の代わりに system:masters を追加します。詳細については、Kubernetes ウェブサイトの Default roles and role bindings をご参照ください。

5.    Amazon EKS コンソールでエラーを確認します。例:

Error loading Namespaces
namespaces is forbidden: User "testuser" cannot list resource "namespaces" in API group "" at the cluster scope

前述のエラーが表示された場合は、クラスターロールとクラスターロールのバインディングまたはロールとロールのバインディングを作成するのセクションに進んでください。

クラスターロールとクラスターロールのバインディングまたはロールとロールのバインディングを作成する

ConfigMap で IAM アカウントまたはロールがマッピングされている Kubernetes ユーザーまたはグループは、ロールのバインディングまたはクラスターロールのバインディングのサブジェクトである必要があります。つまり、Kubernetes リソースを表示するためのアクセス権限を持つ Kubernetes ロールまたはクラスターロールにバインドされているロールのバインディングまたはクラスターロールのバインディングです。ユーザーまたはグループに必要なアクセス権限がない場合は、「権限がありません: Kubernetes クラスターへのアクセス権があることを確認してください」というエラーが表示されることがあります。ロールとバインディングを作成するには、Kubernetes ウェブサイトの Using RBAC Authorization をご参照ください。

次の点にご留意ください: すべての名前空間の Kubernetes リソースを表示するには、クラスターロールとクラスターロールのバインディングを作成する必要があります。特定の名前空間の Kubernetes リソースを表示するには、その名前空間のロールとロールのバインディングを作成する必要があります。

クラスターロールとクラスターロールのバインディングを作成するには、次の手順に従います。

1.    マニフェストファイルをダウンロードします。

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-full-access.yaml

注: ダウンロードしたファイルのグループ名は、eks-console-dashboard-full-access-group です。これは、aws-auth ConfigMap で IAM ユーザーまたはロールをマッピングする必要があるグループです。詳細については、クラスターのユーザーまたは IAM ロールを管理するの「すべての名前空間の Kubernetes リソースを表示する」のセクションをご参照ください。

2.    (オプション) クラスターに適用する前にグループの名前を変更し、IAM ユーザーまたはロールを ConfigMap でそのグループにマッピングします。例:

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-full-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-full-access-binding
subjects:
- kind: Group
  name: eks-console-dashboard-full-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-full-access-clusterrole
  apiGroup: rbac.authorization.k8s.io

3.    マニフェストファイルをデプロイします。

$ kubectl apply -f eks-console-full-access.yaml

4.    clusterrole および clusterrolebinding のオブジェクトの作成を確認します。

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-full-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding

5.    IAM エンティティの新しいグループである eks-console-dashboard-full-access-groupaws-auth ConfigMap を更新します。

$ kubectl edit configmap aws-auth -n kube-system

6.    IAM ユーザーを mapUsersに追加します。例:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
  username: testuser
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

7.    IAM ロールを mapRolesに追加します。例:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
  username: testrole    
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

特定の名前空間の Kubernetes リソースを表示する

1.    マニフェストファイルをダウンロードします。

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml

注: ファイル内のグループ名は、eks-console-dashboard-restricted-access-group です。これは、aws-auth ConfigMap で IAM ユーザーまたはロールをマッピングする必要があるグループです。詳細については、クラスターのユーザーまたは IAM ロールを管理するの「特定の名前空間の Kubernetes リソースを表示する」のセクションをご参照ください。

2.    (オプション) クラスターに適用する前にグループの名前を変更し、IAM ユーザーまたはロールを ConfigMap でそのグループにマッピングします。例:

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole-binding
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-restricted-access-clusterrole
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: eks-console-dashboard-restricted-access-role
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-role-binding
  namespace: default
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: eks-console-dashboard-restricted-access-role
  apiGroup: rbac.authorization.k8s.io

注: 前述のファイルの名前空間は default です。別の名前空間を指定するには、クラスターに適用する前にファイルを編集します。

3.    マニフェストをデプロイします。

$ kubectl apply -f eks-console-restricted-access.yaml

4.    clusterrole および clusterrolebinding のオブジェクトの作成を確認します。

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding
$ kubectl describe role.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role
$ kubectl describe rolebinding.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role-binding

5.    IAM エンティティの新しいグループである eks-console-dashboard-restricted-access-groupaws-auth ConfigMap を更新します。

$ kubectl edit configmap aws-auth -n kube-system

6.    IAM ユーザーを mapUsersに追加します。例:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
  username: testuser
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

7.    IAM ロールを mapRolesに追加します。例:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
  username: testrole    
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

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"

エラーは、特定の名前空間については表示されません。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?