ロールベース アクセス制御(RBAC)を設定する
多くの場合、認証では、Kubernetes のロールベース アクセス制御(RBAC)と組み合わせて、認証済みユーザーとサービス アカウントに対する、より細かいアクセス制御が提供されます。ユーザー ID ではなく、グループ名を使用する RBAC ポリシーを作成することをおすすめします。RBAC ポリシーをグループに明示的にリンクすることで、ID プロバイダでユーザー アクセスを完全に管理できるようになるため、ユーザーの権限が変更されるたびにクラスタを更新する必要がなくなります。なお、OIDC のセキュリティ グループのメンバーシップに基づいたアクセス制御を構成するには、ID プロバイダからグループ メンバー情報を取得できるように GKE Identity Service を設定する必要があります。
例
特定の認証済みユーザーにクラスタの Pod へのアクセス権を付与する場合は、次の例のように、これらのリソースへのアクセス権を付与する ClusterRole
を作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pod-reader rules: - apiGroups: [""] # The resource type for which access is granted resources: ["pods"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
対応する ClusterRoleBinding
を作成して、関連するユーザー(ここでは、us-east1-cluster-admins
セキュリティ グループのメンバーおよび ID が u98523-4509823
のユーザー)に ClusterRole
での権限を付与します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-pods-admins subjects: # Grants anyone in the "us-east1-cluster-admins" group # read access to Pods in any namespace within this cluster. - kind: Group name: gid-us-east1-cluster-admins # Name is case-sensitive apiGroup: rbac.authorization.k8s.io # Grants this specific user read access to Pods in any # namespace within this cluster - kind: User name: uid-u98523-4509823 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: pod-reader apiGroup: rbac.authorization.k8s.io
次の例では、この ClusterRoleBinding
により、ClusterRole
の権限が ID 12345678-BBBb-cCCCC-0000-123456789012
の関連グループに付与されています。この設定は Azure AD プロバイダにのみ関連し、Google Distributed Cloud クラスタで使用できます。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: pod-reader-binding subjects: # Retrieves group information for the group ID mentioned - kind: Group name: 12345678-BBBb-cCCCC-0000-123456789012 apiGroup: rbac.authorization.k8s.io
RBAC の使用の詳細については、ロールベース アクセス制御を構成すると、RBAC 認証の使用をご覧ください。
Google Cloud コンソールでアクセスするための RBAC ロールを作成する
OIDC プロバイダを使用して認証されたユーザーは、コマンドラインだけでなく、Google Cloud コンソールからクラスタにログインできます。
Google Cloud コンソールでクラスタ リソースにアクセスする認証済みユーザーは、関連する Kubernetes 権限を持っている必要があります。そうしたユーザーにクラスタ管理者などのより広範な権限を付与しない場合は、クラスタのノード、永続ボリューム、Pod、ストレージ クラスを表示するために必要な最小限の権限を含むカスタム RBAC ロールを作成します。この一連の権限を定義するには、クラスタに ClusterRole
RBAC リソース(cloud-console-reader
)を作成します。
cloud-console-reader
は、クラスタのノード、永続ボリューム、Pod、ストレージ クラスに対する get
、list
、watch
の権限をユーザーに付与し、これらのリソースの詳細情報を確認できるようにします。
kubectl
cloud-console-reader
ClusterRole
を作成してクラスタに適用するには、次のコマンドを実行します。
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
次に、前のセクションで説明したように、権限ポリシーの設定時にこの ClusterRole
をユーザーに付与できます。Google Cloud コンソールでクラスタを表示するための IAM 権限も必要です。