認可¶
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
: 単一インスタンスへの参照権限に加えて、exec
、console
、file
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