メインコンテンツまでスキップ

ロールベースアクセス制御(RBAC)

Squid backend でユーザーロールを管理し、リソースへのアクセスを保護する

Squid は、あらゆるエンタープライズのユースケースに適合するよう、セキュリティ制御を中核に据えて設計されています。Squid Console には、標準で Admin と Developer のロールおよび権限 が定義されていますが、Squid ではアプリケーション固有の要件に合わせて、ロールベースアクセス制御(RBAC)機能をさらに構築・カスタマイズすることもできます。

これは堅牢な仕組みであり、きめ細かな制御と権限を支えるために最高レベルのコンプライアンスが求められる規制産業に対して、高いセキュリティと認可を提供します。

RBAC の設定

このガイドでは、Squid のフレームワークを使用して、効率的に RBAC を実装する方法を説明します。

Squid には、アプリケーションのユーザーロールをプログラムから管理できる組み込み NoSQL データベースが用意されています。まずは users コレクションを使ってこれらのロールを保存・管理できます。新しいコレクションを作成する必要はなく、アプリケーションに必要なだけロールの種類を定義できます。

ユーザーが追加または削除されるたびに、そのユーザーのロールで users コレクションを更新する必要があります。これは Squid の backend コードで行います。たとえば、ユーザー状態が変化するたびに呼び出せる webhook や実行ファイルを追加したい場合があります。

以下は、auth provider がユーザー変更の webhooks を提供していると仮定し、TypeScript の decorator を使ってそれを行う基本例です。

Backend code
@webhook('userAdded')
async handleUserAdded(request: WebhookRequest) {
const apiKey = request.headers['apiKey'];
if (apiKey !== this.secrets['AUTH_PROVIDER_API_KEY']) {
throw Error('not authorized');
}
const userId = request.body.userId;
const role = request.body.role;
await this.squid.collection<User>('users').doc(userId).insert(
{userId, role});
}

// TODO - Implement webhooks for user updated and deleted

ユーザーロールに基づく認可: users コレクションでユーザーとそのロールが確立できたら、これらのロールに基づいてリクエストをどのように認可するかを決められます。これは backend コード内の @secureCollection またはその他の @secure 関数内で行います。

たとえば、クライアントがコレクションからデータを読み取ろうとした場合、@secureCollection で decorate された関数を呼び出して、アクセスを許可する前にユーザーのロールを検証できます。

Backend code
@secureCollection('name_of_the_collection', 'id of the integration', 'read')
secureReadCollection(request: SecureCollectionRequest): Promise<boolean> {
const userId = this.getUserId();
const user = await this.squid.collection<User>('users').doc(userId).snapshot();
const role = user.role;

// Check the role and decide whether to authorize the request
return role === 'admin';
}

結論として、Squid は、特定のニーズに合致するカスタム RBAC システムを実装するために必要なツールと柔軟性を提供します。users コレクション、backend コード、そして Client SDK を組み合わせることで、アプリケーション向けの安全で効率的な RBAC システムを自分でコントロールできます。