認可

Unix ソケットで Incus とやり取りする際、incus-adminグループのメンバーは Incus API へのフルアクセスを得ます。 一方、incus グループのみのメンバーはそのユーザーに割り当てられた単一のプロジェクトに制限されます。

ネットワーク越しに Incus とやり取りする際は(手順はIncusをネットワークに公開するには参照)、さらに認証しユーザーアクセスを制限できます。 以下の 2 つの認可の方法がサポートされます:

TLS 認可

Incus はネイティブで 信頼できるTLSクライアント を 1 つまたは複数のプロジェクトに制限することをサポートします。 クライアント証明書が制限される際、クライアントはまたグローバルな設定変更やアクセス可能なプロジェクトの設定(限度や制約)の変更も行えません。

アクセスを制限するには、incus config trust edit <fingerprint> を使用します。 restrictedキーをtrueに設定し、クライアントのアクセスを制限するプロジェクトのリストを指定します。 プロジェクトのリストが空の場合、クライアントはどのプロジェクトへのアクセスも許可されません。

この認可の方法はクライアントが TLS で認証する場合は、他の認可の方法が設定されているかどうかによらず、必ず使用されます。

Open Fine-Grained Authorization (OpenFGA)

Incus は OpenFGA との統合をサポートします。 この認可の方法はきめ細かく設定ができます。 例えば、ユーザーアクセスを単一のインスタンスに制限するのに使えます。

OpenFGA を認可に使うには、あなた自身で OpenFGA サーバーを設定し稼働させる必要があります。 Incus でこの認可の方法を有効にするには、openfga.* サーバー設定オプションを設定する必要があります。 Incus は OpenFGA サーバーに接続し、OpenFGA モデル を書き込み、以降の全てのリクエストへの認可をこのサーバーに問い合わせます。

OpenFGA モデル

OpenFGA では、特定の API リソースへのアクセスはユーザーとそのリソースの関連によって決定されます。 これらの関連は OpenFGA 認可モデルで決まります。 Incus の OpenFGA 認可モデルは API リソースを他のリソースとの関連とユーザーやグループのそのリソースへの関連に基づいて記述します。 いくつかの便利な関連がモデルに組み込まれています:

  • server -> admin: Incus へのフルアクセス。

  • server -> operator: サーバー設定、証明書、ストレージプールの編集権限を除いた、Incus へのフルアクセス。

  • server -> viewer: サーバーレベルの設定を参照できるが変種出来ない。プロジェクトやその中身は参照できない。

  • project -> manager: 編集権限を含む、単一プロジェクトへのフルアクセス。

  • project -> operator: 編集権限を除いた、単一プロジェクトへのフルアクセス。

  • project -> viewer: 単一プロジェクトへの参照権限。

  • instance -> manager: 編集権限を含む、単一インスタンスへのフルアクセス。

  • instance -> operator: 編集権限を除いた、単一インスタンスへのフルアクセス。

  • instance -> user: 単一インスタンスへの参照権限に加えて、 execconsolefile APIの権限。

  • instance -> viewer: 単一インスタンスへの参照権限。

重要

ホストへのルート権限を信頼して与えられないユーザーに対しては以下の関連は許可すべきではありません:

  • server -> admin

  • server -> operator

  • server -> can_edit

  • server -> can_create_storage_pools

  • server -> can_create_projects

  • server -> can_create_certificates

  • certificate -> can_edit

  • storage_pool -> can_edit

  • project -> manager

他の関連は許可しても構いません。 しかし、適切なプロジェクトの制約を適用する必要があります。

完全な Incus の OpenFGA の認可モデル internal/server/auth/driver_openfga_model.openfga 内で定義されます:

model
  schema 1.1
type user

type group
  relations
    define member: [user]

type certificate
  relations
    define server: [server]
    define can_edit: [user, group#member] or admin from server
    define can_view: user from server

type image
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type image_alias
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type instance
  relations
    define project: [project]
    define manager: [user, group#member]
    define operator: [user, group#member] or manager
    define user: [user, group#member] or operator
    define viewer: [user, group#member] or operator
    define can_edit: manager or operator from project
    define can_view: user or viewer or viewer from project
    define can_update_state: [user, group#member] or operator or operator from project
    define can_manage_snapshots: [user, group#member] or operator or operator from project
    define can_manage_backups: [user, group#member] or operator or operator from project
    define can_connect_sftp: [user, group#member] or user or operator from project
    define can_access_files: [user, group#member] or user or operator from project
    define can_access_console: [user, group#member] or user or operator from project
    define can_exec: [user, group#member] or user or operator from project

type network
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type network_acl
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type network_integration
  relations
    define server: [server]
    define can_edit: [user, group#member] or admin from server
    define can_view: user from server

type network_zone
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type profile
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type project
  relations
    define server: [server]
    define manager: [user, group#member] or operator from server
    define operator: [user, group#member] or manager or operator from server
    define viewer: [user, group#member] or operator
    define can_edit: manager
    define can_view: viewer
    define can_create_images: [user, group#member] or operator or operator from server
    define can_create_image_aliases: [user, group#member] or operator or operator from server
    define can_create_instances: [user, group#member] or operator or operator from server
    define can_create_networks: [user, group#member] or operator or operator from server
    define can_create_network_acls: [user, group#member] or operator or operator from server
    define can_create_network_zones: [user, group#member] or operator or operator from server
    define can_create_profiles: [user, group#member] or operator or operator from server
    define can_create_storage_volumes: [user, group#member] or operator or operator from server
    define can_create_storage_buckets: [user, group#member] or operator or operator from server
    define can_view_operations: [user, group#member] or viewer
    define can_view_events: [user, group#member] or viewer

type server
  relations
    define admin: [user, group#member]
    define operator: [user, group#member] or admin
    define viewer: [user, group#member] or operator
    define user: [user:*]
    define can_edit: admin
    define can_view: user
    define can_create_storage_pools: [user, group#member] or admin
    define can_create_projects: [user, group#member] or operator
    define can_view_resources: [user, group#member] or viewer
    define can_create_certificates: [user, group#member] or admin
    define can_view_metrics: [user, group#member] or viewer
    define can_override_cluster_target_restriction: [user, group#member] or admin
    define can_view_privileged_events: [user, group#member] or admin

type storage_bucket
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project

type storage_pool
  relations
    define server: [server]
    define can_edit: [user, group#member] or admin from server
    define can_view: user from server

type storage_volume
  relations
    define project: [project]
    define can_edit: [user, group#member] or operator from project
    define can_view: [user, group#member] or can_edit or viewer from project
    define can_manage_snapshots: [user, group#member] or can_edit
    define can_manage_backups: [user, group#member] or can_edit