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

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

Squid backend でユーザーのロールを管理し、リソースへのアクセスを安全に保つ

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

これは堅牢なメカニズムであり、細かな制御と権限をサポートするために最高度のコンプライアンスが求められる規制産業に対して、高いレベルのセキュリティと認可(authorization)を提供します。

RBAC の設定

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

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

ユーザーが追加または削除されるたびに、そのユーザーのロールを users コレクションに反映する必要があります。これは Squid の backend code を使って行います。たとえば、ユーザー状態が変化するたびに呼び出せる webhook や executable を追加するとよいでしょう。

以下は、auth provider がユーザー変更の webhook を提供していると仮定し、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 code 内の @secureCollection またはその他の @secure 関数の中で行います。

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

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 code、そして Client SDK の組み合わせにより、アプリケーション向けに安全で効率的な RBAC システムを自分でコントロールできます。