ユーザーにKubernetesアクセス権を付与(無料オールベータ)
- GitLab 16.1 で導入され、
environment_settings_to_graphql,kas_user_access,kas_user_access_project,expose_authorized_cluster_agentsというフラグがあります。この機能はベータ版です。- 機能フラグ
environment_settings_to_graphqlはGitLab 16.2で削除されました。- GitLab 16.2で機能フラグ
kas_user_access,kas_user_access_project,expose_authorized_cluster_agentsが削除されました。
組織内のKubernetesクラスターの管理者として、特定のプロジェクトやグループのメンバーにKubernetesアクセスを許可することができます。
アクセスを許可すると、プロジェクトまたはグループのKubernetes用ダッシュボードもアクティビティになります。
セルフマネージドインスタンスの場合は、以下のいずれかを確認してください:
- GitLab インスタンスとKASを同じドメインでホストしてください。
- KASをGitLabのサブドメインでホストします。例えば、GitLabは
gitlab.com、KASはkas.gitlab.com。
Kubernetesアクセスの設定
ユーザーにKubernetesクラスターへのアクセスを許可する場合にアクセスを設定します。
前提条件:
- Kubernetes用エージェントがKubernetesクラスターにインストールされていること。
- 開発者ロール以上が必要です。
アクセスを設定するには
-
エージェント設定ファイルで、
user_accessキーワードを以下のパラメータで定義します:-
projects:メンバがアクセス権を持つプロジェクトのリスト。 -
groups:メンバーがアクセス権を持つグループのリスト。 -
access_as:必須。プレーンアクセスの場合、値は{ agent: {...} }です。
-
アクセス設定後、リクエストはエージェントサービスアカウントを使用して API サーバに転送されます。例えば
# .gitlab/agents/my-agent/config.yaml
user_access:
access_as:
agent: {}
projects:
- id: group-1/project-1
- id: group-2/project-2
groups:
- id: group-2
- id: group-3/subgroup
ユーザーなりすましによるアクセスの設定
Kubernetesクラスターへのアクセスを許可し、リクエストを認証ユーザー用のインパーソネーションリクエストに変換できます。
前提条件:
- Kubernetes用エージェントがKubernetesクラスターにインストールされていること。
- 開発者ロール以上が必要です。
ユーザーなりすましによるアクセスを設定するには、以下の手順に従います:
-
エージェント設定ファイルで、
user_accessキーワードを以下のパラメータで定義します:-
projects:メンバがアクセス権を持つプロジェクトのリスト。 -
groups:メンバーがアクセス権を持つグループのリスト。 -
access_as:必須。ユーザーなりすましの場合、値は{ user: {...} }です。
-
アクセスを設定すると、要求は認証済みユーザーのなりすまし要求に変換されます。
ユーザーなりすましワークフロー
インストールされたagentk は、以下のように指定されたユーザーになりすまします:
-
UserNameはgitlab:user:<username> -
Groupsです:-
gitlab:user:GitLabユーザーからのリクエストに共通です。 -
gitlab:project_role:<project_id>:<role>各プロジェクト内の各ロールに適用されます。 -
gitlab:group_role:<group_id>:<role>各認証されたグループの各ロールについて。
-
-
Extraはリクエストに関する追加情報を運びます:-
agent.gitlab.com/id:エージェントID。 -
agent.gitlab.com/username:GitLabユーザーのユーザー名。 -
agent.gitlab.com/config_project_id:エージェント設定プロジェクトID。 -
agent.gitlab.com/access_type:personal_access_token,oidc_id_token,session_cookieのいずれか。
-
設定ファイルのuser_access の下に直接リストされているプロジェクトとグループのみがインポートされます。例えば
# .gitlab/agents/my-agent/config.yaml
user_access:
access_as:
user: {}
projects:
- id: group-1/project-1 # group_id=1, project_id=1
- id: group-2/project-2 # group_id=2, project_id=2
groups:
- id: group-2 # group_id=2
- id: group-3/subgroup # group_id=3, group_id=4
この設定では
- ユーザーが
group-1のみのメンバーである場合、Kubernetes RBAC グループgitlab:project_role:1:<role>のみを受け取ります。 - ユーザーが
group-2のメンバーである場合、Kubernetes RBACグループの両方を受け取ります:-
gitlab:project_role:2:<role>, -
gitlab:group_role:2:<role>.
-
RBACの作成者
Impersonatedリクエストでは、Kubernetes内部のリソース権限を識別するために、ClusterRoleBinding またはRoleBinding が必要です。適切な設定についてはRBAC認可を参照してください。
たとえば、awesome-org/deployment プロジェクト(ID: 123)のメンテナーにKubernetesワークロードの読み取りを許可する場合、ClusterRoleBinding リソースをKubernetes設定に追加する必要があります:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-cluster-role-binding
roleRef:
name: view
kind: ClusterRole
apiGroup: rbac.authorization.k8s.io
subjects:
- name: gitlab:project_role:123:maintainer
kind: Group