Kubernetes と gcloud: サービス アカウントの使用を停止するにはどうすればよいですか?

Kubernetes と gcloud: サービス アカウントの使用を停止するにはどうすればよいですか?

私はいくつかのGoogle Cloud Servicesを使用しています。私が作業しているCloud Storageバケットの一部はプロジェクトAにあり、自分のアカウントからアクセスできますが、一部はプロジェクトBにあり、サービスアカウントでのみアクセスできます。適切なサービスアカウントを有効化しました。

gcloud auth activate-service-account --key-file mykey.json

その後のログインでは、

gcloud config set account service_account

アクティブなプロジェクトを切り替える必要もあったので、次のコマンドを使用しました。

gcloud config set project project-B

サービスアカウントは問題なく機能し、Google Cloud Storageに保存されている特定のbitbucketにアクセスできましたが、その後、Argoを使用してkubernetesワークフローを送信する必要があったため、次のコマンドで自分のアカウントとプロジェクトに戻りました。

gcloud config set account my_account
gcloud config set project project-A

「gcloud auth list」を使用すると、my_accountがアクティブであることがわかります

ACTIVE  ACCOUNT
        service_account.iam.gserviceaccount.com
*       my_account

しかし、「kubectl -n default get services」を実行して送信しようとすると、次のエラーが発生しました。

Error from server (Forbidden): services is forbidden: User "service_account.iam.gserviceaccount.com" cannot list resource "services" in API group "" in the namespace "default": Required "container.services.list" permission.

デフォルトではなく my_namespace を使用すると、同じエラーが発生します。「gsutil ls」などの gcloud コマンドは、正しいアカウントとプロジェクトにいるかのように機能するため、これにかなり困惑しています。Kubernetes がまだサービス アカウントを使用していると認識するのはなぜですか。また、Kubernetes で必要な操作を再び実行できるように、サービス アカウントの使用を停止するにはどうすればよいですか。実行しようとしているコマンドとパイプラインは、サービス アカウントをアクティブ化する前は完全に正常に動作していました。

答え1

結局、走るだけでよかった

gcloud container clusters get-credentials mycluster

当初は、kubeconfig ファイルを削除して get-credentials コマンドを実行してこれを修正する必要があると考えていました ~/.kube/config が、コメントで指摘されているように、必要なのは get-credentials コマンドだけであることがわかりました。

この問題は、gcloud サービス アカウントがアクティブなときに argo コマンドを実行すると特に発生するようです。コマンドは最初に失敗し、その後のすべての kubectl コマンドがこの権限エラーを返します。サービス アカウントに切り替えて gcloud コマンドを実行し、その後自分のアカウントに戻った場合、kubectl の動作には影響しません。

関連情報