1.2. マルチテナントモデルを採用する際の重要な考慮事項
マルチテナントクラスター管理権限を付与すると、テナントは Argo CD によってアプリケーションに付与された権限を使用して権限を昇格できるため、マルチテナントの操作や権限に対する制限を回避して操作が可能になる場合があります。このような状況を防ぐには、Red Hat OpenShift GitOps Operator を通じてインストールされた Argo CD の権限モデルを理解し、それを活用して OpenShift GitOps でアプリケーション配信を成功させる方法を把握する必要があります。
1.2.1. Argo CD ロールベースアクセス制御 (RBAC)
Red Hat OpenShift GitOps のアクセス制御は、次の 2 つの異なるレベルで管理されます。
- Kubernetes レベルでは、GitOps Argo CD Application Controller は 1 つ以上のクラスターと対話し、クラスターごとに 1 つの Kubernetes サービスアカウントを使用してさまざまなリソースをデプロイします。このサービスアカウントには、Argo CD のこのインスタンスが管理するすべてのテナントおよびユースケースのリソースをデプロイする権限が必要です。
- Argo CD レベルでは、GitOps Argo CD Application Controller に、Kubernetes から独立した独自の RBAC 権限モデルが含まれています。ユーザーレベルのアクセスを管理するには、基盤となる Kubernetes 権限とは独立してこの RBAC モデルを使用できます。この機能を使用すると、純粋な Kubernetes の観点からはユーザーがアクセスできない Argo CD アプリケーションにアクセスできるようになります。
これら 2 つのアクセス制御とコンポーネント間の相互作用は明確に区別されているため、Argo CD を使用してマルチテナントソリューションを設計するときには、権限の昇格が懸念事項になります。権限の昇格とは、テナントがアプリケーションコントローラーのサービスアカウントの権限昇格を利用して、通常は実行が許可されないアクションを実行することです。Argo CD RBAC または Argo CD の個別のインスタンスを使用することで、Argo CD インスタンスで権限昇格を抑えることができます。
1.2.2. Argo CD プロジェクト
Argo CD プロジェクト (OpenShift Container Platform プロジェクトと混同しないでください) は、アプリケーションをグループ化する方法を提供します。Argo CD プロジェクトを使用すると、デプロイできるリソースと、そのデプロイ先に関するアプリケーションの制限を指定できます。さらに、Argo CD カスタムリソース (CR) のグローバルレベルではなくプロジェクトレベルでより細かく定義することにより、Argo CD のロールベースアクセス制御 (RBAC) ルールと権限を有効にできます。
Operator の Argo CD CR でテナント RBAC をグローバルに定義できますが、AppProject
CR では制限とともにテナント RBAC を定義する必要があります。
テナントの数が多い場合は、グローバル RBAC を使用してすべてのテナントを管理しようとすると、繰り返しが多く発生する可能性があります。
テナントのインスタンス数が多い場合は、プロジェクト設定の一部がテナントプロジェクト間で同じに可能性があります。重複を減らし、メンテナンスを最小限に抑えるには、共通の設定にグローバルプロジェクトを使用し、それをテナントプロジェクトに継承します。
常に独自のプロジェクトを定義し、Operator による Argo CD インストールで作成されたデフォルトのプロジェクトは使用しないでください。