既存の GKE クラスタで Google Cloud Groups RBAC を有効にしています。
そのために、最初にワークスペースにすべてのグループを作成し、ドキュメントに従って必要な「gke-security-groups@ourdomain.com」も作成しました。
これらのグループは、シングル サインオン用に Active Directory と統合された Workspace で作成されます。
ドキュメントに記載されているように、すべてのグループは「gke-security-groups@ourdomain」のメンバーです。また、すべてのグループがメンバーを表示できます。
クラスタが更新され、Google Cloud Groups RBAC のフラグが有効になり、値を「gke-security-groups@ourdomain.com」に指定しました。
次に、グループの 1 つ (group_a@ourdomain.com と呼びましょう) を IAM に追加し、次へのアクセスのみを許可するカスタム ロールを割り当てました。
"container.apiServices.get",
"container.apiServices.list",
"container.clusters.getCredentials",
"container.clusters.get",
"container.clusters.list",
これは、ユーザーが Kubernetes クラスターにログインし、そこから Kubernetes RBAC を適用できるようにするための最小値です。
Kubernetes では、特定の名前空間内のポッドのリストを提供するロールと、IAM に追加したばかりのグループを指定するロール バインディングを適用しました。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: test-role
namespace: custom-namespace
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: test-rolebinding
namespace: custom-namespace
roleRef:
kind: Role
name: test-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
name: group_a@ourdomain.com
今まですべてがよさそうだ。しかし、グループ「group_a@ourdomain.com」に属するユーザーでこの名前空間のポッドを一覧表示しようとすると、次のようになります。
サーバーからのエラー (禁止): ポッドは禁止されています: ユーザー "my-user@ourdomain.com" は、名前空間 "custom-namespace" の API グループ "" のリソース "ポッド" を一覧表示できません: ["container.pods. list"] パーミッション。
もちろん、container.pods.list を group_a@ourdomain が割り当てられたロールに与えると、ポッドを一覧表示できますが、GCloud でのこの権限はグローバルであるため、すべての名前空間に対して開きます。
ここで何が欠けていますか?
これが関連しているかどうかはわかりませんが、gcloud の組織はたとえば「my-company.io」と呼ばれ、SSO のグループは「...@groups.my-company.io」と呼ばれ、gke-security は-groups グループも「groups.my-company.io」ドメインで作成されました。
また、RoleBinding のグループの代わりに、ユーザーを直接指定すると機能します。