ユーザーに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