(exp-projects)= # プロジェクトについて ```{youtube} https://www.youtube.com/watch?v=cUHkgg6TovM ``` LXDサーバーを整理して、関連するインスタンスをまとめるためにプロジェクトを使用できます。 隔離されたインスタンスに加えて、各プロジェクトは特定のイメージ、プロファイル、ネットワーク、およびストレージを持つことができます。 例えば、プロジェクトは以下のシナリオで役立ちます: - 異なる目的のために非常に多くのインスタンスを実行している場合、例えば、異なる顧客プロジェクトのために。 これらのインスタンスを別々にして、それらを見つけやすく管理しやすくすることを望みます。また、整合性のために各顧客プロジェクトで同じインスタンス名を再利用することができます。 顧客プロジェクト内の各インスタンスは、同じ基本構成(例えば、ネットワークやストレージ)を使用する必要がありますが、顧客プロジェクト間で構成が異なる場合があります。 この場合、各顧客プロジェクト(つまり、各インスタンスのグループ)ごとにLXDプロジェクトを作成し、各LXDプロジェクトで異なるプロファイル、ネットワーク、およびストレージを使用できます。 - LXDサーバーが複数のユーザー間で共有されている場合。 各ユーザーは自分のインスタンスを実行し、自分のプロファイルを設定するかもしれません。 ユーザーインスタンスを制限し、各ユーザーが自分のインスタンスのみとやり取りでき、他のユーザーが作成したインスタンスを見ることができないようにしたいです。 さらに、各ユーザーのリソースを制限し、異なるユーザーのインスタンスが互いに干渉しないようにしたいです。 この場合、制限されたプロジェクトを持つマルチユーザー環境を設定できます。 LXDには`default`プロジェクトが付属しています。 プロジェクトを追加する方法については、{ref}`projects-create`を参照してください。 (projects-isolation)= ## プロジェクトの隔離 プロジェクトは常にそれらが含むインスタンスをカプセル化します。これは、インスタンスがプロジェクト間で共有されず、インスタンス名が複数のプロジェクトで重複して使用できることを意味します。 特定のプロジェクト内にいる場合、そのプロジェクトに属するインスタンスのみが表示されます。 他のエンティティ(イメージ、プロファイル、ネットワーク、およびストレージ)は、プロジェクト内で隔離されるか、`default`プロジェクトから継承されます。 どのエンティティが隔離されているかを設定するには、プロジェクト内で対応する*機能*を有効または無効にします。 機能が有効になっている場合、対応するエンティティはプロジェクト内で隔離されます。機能が無効になっている場合、`default`プロジェクトから継承されます。 例えば、プロジェクトに`features.networks`を有効にすると、プロジェクトは別のネットワークのセットを使用し、`default`プロジェクトで定義されたネットワークは使用しません。`features.images`を無効にすると、プロジェクトは`default`プロジェクトで定義されたイメージにアクセスでき、プロジェクトを使用している間に追加したイメージも`default`プロジェクトに追加されます。 プロジェクトを作成するときに有効または無効になっている機能についての情報は、利用可能な{ref}`project-features`のリストを参照してください。 ```{note} 新しいプロジェクトを使用する前に、有効にしたい機能を選択する必要があります。 プロジェクトにインスタンスが含まれている場合、機能はロックされます。 それらを編集するには、まずすべてのインスタンスを削除する必要があります。 アップグレードで追加された新しい機能は、既存のプロジェクトでは無効になっています。 ``` (projects-confined)= ## マルチユーザー環境での制限されたプロジェクト LXDサーバーが複数のユーザーによって使用される場合(例えば、ラボ環境で)、プロジェクトを使用して各ユーザーの活動を制限できます。 この方法は、{ref}`projects-isolation`で説明されているように、インスタンスや他のエンティティ(機能設定に依存)を隔離します。 また、ユーザーを自分のユーザースペースに制限し、他のユーザーのインスタンスやデータにアクセスできないようにします。 LXDサーバーやその設定に影響を与える変更、例えばストレージの追加や削除は許可されません。 さらに、この方法では、`lxd`グループのメンバーでなくてもLXDを使用できます({ref}`security-daemon-access`を参照)。 `lxd`グループのメンバーは、LXDへの完全なアクセス権を持っており、ファイルシステムのパスをアタッチしたり、インスタンスのセキュリティ機能を調整したりすることができます。これにより、ホストシステムへのルートアクセスが可能になります。 制限されたプロジェクトを使用することで、ユーザーがLXDでできることを制限しますが、同時にユーザーがルートアクセスを得ることも防ぎます。 ### プロジェクトの認証方法 特定のユーザーにプロジェクトを制限するために使用できるさまざまな認証方法があります。 クライアント証明書 : {ref}`authentication-tls-certs`を制限して、特定のプロジェクトのみへのアクセスを許可することができます。 アクセスを制限する前に、プロジェクトが存在している必要があります。 制限された証明書を使用して接続するクライアントは、クライアントがアクセスが許可されているプロジェクトのみを見ることができます。 RBAC認証 : {ref}`authentication-rbac`を使用する場合、ロールをグローバルおよびプロジェクト単位でユーザーやグループに割り当てることができます。 ロールは、プロジェクト内でユーザーが許可されている操作を定義します。 この方法で、各プロジェクトを表示、使用、または管理できるユーザーを設定できます。 マルチユーザーLXDデーモン : LXD snap には、ユーザーごとの動的なプロジェクト作成を可能にするマルチユーザーLXDデーモンが含まれています。 `lxd`グループ以外の特定のユーザーグループを設定して、グループ内のすべてのユーザーに制限されたLXDアクセスを提供できます。 このグループのメンバーであるユーザーがLXDを使用し始めると、LXDは自動的にこのユーザーの制限されたプロジェクトを作成します。 snap を使用していない場合でも、ディストリビューションがサポートしていれば、この機能を使用できます。 さまざまな認証方法を有効にし、設定する方法については、{ref}`projects-confine`を参照してください。