Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Amazon EKS で発生する "Your current user or role does not have access to Kubernetes objects on this EKS cluster" エラーの解決方法を教えてください。
Amazon Elastic Kubernetes サービス (Amazon EKS) クラスターにアクセスを試行すると、エラーメッセージ "Your current user or role does not have access to Kubernetes objects on this EKS cluster" が表示されます。
簡単な説明
AWS Identity and Access Management (IAM) ID に Kubernetes に対するロールベースアクセス制御 (RBAC) の権限がない場合、アクセスエラーが発生します。Kubernetes API にアクセスするには、RBAC 権限が必要です。RBAC の詳細については、Kubernetes のウェブサイトで「RBAC 認可を使用する」を参照してください。AWS マネジメントコンソールに Kubernetes リソースを表示するには、AWS IAM ID は、Amazon EKS クラスター内の aws-auth ConfigMap にマッピングされている必要があります。
重要: 次の解決策では、aws-auth ConfigMap を使用し、Kubernetes が RBAC 権限を処理するアプローチと整合させています。既存の aws-auth ConfigMap エントリをアクセスエントリに移行することを推奨します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
クラスターの作成者または管理者は、kubectl または eksctl を使用して aws-auth ConfigMap を更新できます。「IAM ユーザーまたはロールを RBAC の構成に追加する」に進みます。それ以外の場合は、クラスターアクセスを必要とする IAM ID の Amazon リソースネーム (ARN) を取得する必要があります。
クラスターアクセスが必要な IAM ID の ARN を取得する
クラスターへのアクセスが必要な IAM ユーザーまたはロールを特定します。
注: この IAM ID は、AWS CLI の実行時に指定する IAM ID とは異なる場合があります。AWS IAM Authenticator for Kubernetes では、aws-auth ConfigMap で使用するロールの ARN にパスを含めることはできません。詳細については、GitHub のウェブサイトで aws-iam-authenticator を参照してください。
AWS CLI で IAM ユーザーまたはロールにアクセスできる場合は、次の AWS CLI コマンド get-caller-identity を実行します。
aws sts get-caller-identity --query "Arn"
注: AWS CLI にアクセスできない場合は、Arn から引用符を削除し、上記のコマンドを AWS CloudShell で実行してください。
出力例:
"arn:aws:iam::111122223333:role/testrole"
コマンドの出力に IAM ロールの ARN が表示されている場合は、その ARN が正しい形式 (arn:aws:iam::111122223333:role/example) であることを確認します。
ARN に引き受けたロールが含まれている場合は、RBAC 権限を付与する IAM ロールの ARN を取得する必要があります。たとえば、引き受けたロールの ARN が arn:aws:sts::123456:assumed-role/MyRole/your_username である場合は、ロール ARN arn:aws:sts::123456:role/MyRole に関連付けられています。
この ARN をクラスターの管理者に提供し、ロールの ARN を aws-auth ConfigMap に追加するよう依頼してください。ARN を aws-auth ConfigMap に追加する手順については、「IAM ユーザーまたはロールを RBAC の構成に追加する」を参照してください。
IAM ユーザーまたはロールには、AWS マネジメントコンソールですべてのクラスターのノードとワークロードを表示する権限があることを確認します。
クラスター作成者を特定する
重要: クラスターの作成に関連付けられた IAM エンティティのみがクラスターリソースにアクセスできます。クラスター作成者のみが、aws-auth ConfigMap を編集し、他の IAM エンティティへのアクセスを付与できます。
クラスターを構成するための主要な権限を持つクラスター作成者または管理者ロールを特定します。まず、AWS CloudTrail イベント履歴で CreateCluster API コールの存在を確認します。次に、userIdentity フィールドを確認します。
クラスターの作成者名が CloudTrail で Deleted と表示されている場合は、同名の IAM ユーザーまたはロールを新規作成します。新しい IAM ID の ARN は、元のクラスター作成者と同一であるため、この新しい ID はクラスターへの同じ管理者アクセスを継承します。
注: CloudTrail には、90 日を超えて経過したクラスターのクラスター作成者名は表示されません。
AWS CLI を使用してクラスター作成者の IAM ID を取得するには、次の get-caller-identity コマンドを実行します。
aws sts get-caller-identity
出力例:
{ "UserId": "AIDACKCEVSQ6C2EXAMPLE", "Account": "111122223333", "Arn": "arn:aws:iam:: 111122223333:user/testuser" }
IAM ユーザーまたはロールを RBAC の構成に追加する
eksctl がインストールされている場合は、次の eksctl create iamidentitymapping コマンドを実行し、aws-auth ConfigMap を更新します。
eksctl create iamidentitymapping --cluster your_cluster_name --region=your_region --arn your_IAM_ARN --group system:masters --username admin
注: your_cluster_name をクラスター名に、your_region を AWS リージョンに、your_IAM_ARN を IAM ロールまたはユーザーの ARN に置き換えてください。
kubectl を使用して aws-auth ConfigMap を更新するには、次の手順を実行します。
-
次のコマンドを実行すると、aws-auth ConfigMap がデフォルトのテキストエディタで開きます。
kubectl edit configmap aws-auth -n kube-system注: コンソールには現在の ConfigMap が表示されます。クラスターに接続できない場合は、kubeconfig ファイルを更新します。クラスターの作成者である IAM ID は、常にそのクラスターにアクセスできます。
-
次の update-kubeconfig コマンドを実行し kubectl を構成すると、クラスターに接続できるようになります。
aws eks update-kubeconfig --region region_code --name your_cluster_name注: region_code をリージョンに、your_cluster_name をクラスター名に置き換えてください。kubectl コマンドは、Amazon EKS サーバーエンドポイントへの接続が必要です。API サーバーエンドポイントがパブリックの場合は、エンドポイントに接続するにはインターネットアクセスが必要です。エンドポイントがプライベートの場合は、クラスターが実行されている仮想プライベートクラウド (VPC) からサーバーエンドポイントに接続します。
-
開いたテキストエディターに次のコードを入力し、IAM ユーザーを追加します。
mapUsers: | - userarn: arn:aws:iam::111122223333:user/testuser username: testuser groups: - system:bootstrappers - system:nodes注: 111122223333 を AWS アカウント ID に、testuser を IAM ユーザーに置き換えてください。
または、次のコードを入力して IAM ロールを追加します。
mapRoles: | - rolearn: arn:aws:iam::111122223333:role/testrole username: testrole groups: - system:bootstrappers - system:nodes注: 111122223333 をアカウント ID に、testrole を IAM ロールに置き換えてください。
クラスターを作成すると、IAM ID は自動的に、そのクラスターの RBAC 構成内の system:masters 権限を取得します。デフォルトでは、system:masters グループは、クラスターロール cluster-admin に紐付けられます。
本番環境では、system:masters 権限の使用は推奨されません。system:masters 権限では、ユーザーにクラスター内のすべての Kubernetes リソースに対するフルアクセスが付与されます。代わりに、必須権限のみが含まれ、特定の名前空間にのみアクセスできるロールを作成することを推奨します。
クラスターへのアクセスを確認する
次の手順を実行します。
- Amazon EKS コンソールを開きます。
- ナビゲーションペインで [クラスター] を選択します。
- 目的のクラスターを選択します。
- [概要] タブと [ワークロード] タブにエラーがないか確認します。
エラーが表示されている場合は、「IAM のトラブルシューティング」を参照してください。たとえば、特定の名前空間への RBAC アクセスを設定した場合、次のエラーメッセージが表示される可能性があります。
"Error loading Deployments : deployments.apps is forbidden: User "AIDACKCEVSQ6C2EXAMPLE" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "EXAMPLENAMESPACE"
名前空間に関連するエラーを解決するには、適切なロールまたはクラスターロールバインドにより、RBAC ロールまたはクラスターロールを作成するか更新する必要があります。詳細については、Kubernetes のウェブサイトで「RoleBinding と ClusterRoleBinding」を参照してください。
- トピック
- Containers
- 言語
- 日本語
