事象
マネージメントコンソールから作成したEKSに対してCloud9からkubectlコマンドで接続に行くも以下のようなエラーとなる。
$ kubectl get svc error: You must be logged in to the server (Unauthorized)
詳細なデバッグログは以下。
$ kubectl get svc -v=9
... helpers.go:246] server response object: [{
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
}]
error: You must be logged in to the server (Unauthorized)
環境情報
- EKS : 1.28
- aws-cli/2.15.5
原因/解決策
クラスターを作成した際のユーザと接続に行っているユーザが異なっている。
コンソール上で情報を確認した上で
$ aws sts get-caller-identity
{
"UserId": "xx",
"Account": "xx",
"Arn": "arn:aws:sts::xx"
}EKS側の「Access」>「IAM access entries」より同権限を追加すると
表題の事象は解消した。
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
以下、補足です。
補足
EKSを作成時にオーダーを行なったユーザ情報が「AmazonEKSClusterAdminPolicy」等でIAM access entriesに存在しています。
| Access entries selection | IAM principal ARN | Type | Username | Group names | Access policies |
なので、ここに新たに必要なユーザ情報を追加することで、EKSクラスターへのアクセスを許可します。
ちなみに追加する際にはネームスペース毎にも権限設定ができるので、例えば必要な権限を与えなかった場合には以下のようなエラーにもなりました。
$ kubectl get svc Error from server (Forbidden): services is forbidden: User "xx" cannot list resource "services" in API group "" in the namespace "default"
以上、ご参考になれば幸いです。