Amazon EKS アクセスエントリ API を使用して EKS クラスターへのアクセスを回復する方法を教えてください。
シングルサインオンユーザーの変更、または aws-auth ConfigMap の削除または破損が原因で、Amazon Elastic Kubernetes Service (Amazon EKS) にアクセスできません。
簡単な説明
EKS クラスターにアクセスできなくなった場合、kubectl コマンドを実行すると、次のようなエラーが表示されます。
「エラー: サーバーへのログインが必要です (認証失敗)」
クラスターへのアクセスを回復するには、アクセスエントリを使用して AWS Identity and Access Management (IAM) プリンシパルのアクセス許可を管理します。これは Amazon EKS クラスターの外部から行います。
注: EKS クラスターの作成者が存在する場合は、EKS クラスター作成者の IAM プリンシパルを引き受け、ログインしてクラスターにアクセスします。デフォルトでは、EKS クラスターの作成者はクラスターの管理者です。以下のプロセスでは、クラスター作成者の元の IAM ロールと共存する管理者ロールを作成します。
解決策
前提条件
- kubectl をインストールします。
- 最新バージョンの AWS コマンドラインインターフェイス (AWS CLI) をインストールして設定します。
- 次のアクセス許可を持つ IAM ロールが必要です。 CreateAccessEntry、ListAccessEntries、DescribeAccessEntry、DeleteAccessEntry、UpdateAccessEntry
注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS EKS アクセスエントリ API を使用して Amazon EKS クラスターアクセスを管理する
注: 次のコマンドでは、以下を置き換えます。
<ACCOUNT_ID> は、EKS クラスターのあるソースアカウントのアカウント ID に置き換えます。
<REGION> は、お使いの AWS リージョンの名前に置き換えます。
<CLUSTER_NAME> は、お使いの EKS クラスターの名前に置き換えます。
<IAM_PRINCIPAL_ARN> は、管理者アクセス許可を持たせるロールの ARN に置き換えます。
AWS EKS アクセスエントリ API を使用して Amazon EKS クラスターアクセスを管理するには、次の手順を実行します。
-
kubectl がインストールされているホストマシンで、以下のアクセス許可を持つ IAM ロールを引き受けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:ListAccessEntries", "eks:CreateAccessEntry", "eks:DescribeCluster", "eks:UpdateClusterConfig" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>" ] }, { "Effect": "Allow", "Action": [ "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:DisassociateAccessPolicy", "eks:AssociateAccessPolicy", "eks:UpdateAccessEntry", "eks:DescribeAccessEntry" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*" ] } ] }
-
ID を確認するには、以下のコマンドを実行します。
aws sts get-caller-identity
コマンドの出力で得た ARN を書き留めます。次のような形式となります。arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin
-
次のコマンドを実行して Amazon EKS クラスターの現在の認証モードを確認します。
aws eks describe-cluster --name <CLUSTER_NAME> --query 'cluster.accessConfig.authenticationMode' --region <REGION>
Amazon EKS クラスターの現在の認証モードが API_AND_CONFIG_MAP の場合、既にクラスターでは必要なアクセスモードを使用しています。ステップ 5 までスキップします。
-
次のコマンドを実行して Amazon EKS クラスターの認証モードを更新します。
aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>
注: CONFIG_MAP 認証モードから API モードに切り替えることはできますが、API モードから CONFIG_MAP モードに戻すことはできません。
-
次のコマンドを実行して、クラスターと IAM ロールのアクセスエントリを作成します。
aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>
出力は次のようになります。
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a", "createdAt": "2024-02-13T19:27:45.370000+00:00", "modifiedAt": "2024-02-13T19:27:45.370000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } }
-
次のコマンドを実行して、AmazonEKSClusterAdminPolicy を Amazon EKS クラスターと IAM ロールに関連付けます。
aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \ --principal-arn <IAM_PRINCIPAL_ARN> \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster \ --region <REGION>
出力は次のようになります。
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708", "createdAt": "2024-02-25T08:34:06.002000+00:00", "modifiedAt": "2024-02-25T08:34:06.002000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } }
-
kubeconfig ファイルを更新または生成するには、次のコマンドを実行して EKS クラスターに接続します。
aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
-
次のコマンドを実行して、ユーザーが管理者として EKS クラスターにアクセスできることを確認します。
kubectl auth can-i '*' '*' --all-namespaces
**注:**管理者として EKS クラスターにアクセスできる場合、出力には yes と表示されます。
関連情報
簡素化された Amazon EKS アクセス管理コントロールの詳細
EKS アクセスエントリ (eksctl のウェブサイト)
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 8年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前