ロールベースアクセス制御 (RBAC)
Squid backend でユーザーロールを管理し、リソースへのアクセスを保護します
Squid はあらゆるエンタープライズユースケースに対応できるよう、セキュリティコントロールをコアに設計されています。Squid Console では Admin and Developer roles and permissions が標準搭載されていますが、Squid ではアプリケーション固有の要件に合わせて、さらにカスタマイズされた Role-Based Access Control (RBAC) 機能を構築することも可能です。
これは、きめ細やかなコントロールと権限管理をサポートするために最高レベルのコンプライアンスが求められる規制業界向けに、高いセキュリティと認可機能を提供する堅牢なメカニズムです。
RBAC の設定
このガイドでは、Squid のフレームワークを使用したシンプルな RBAC 実装方法について説明します。
Squid は組み込みの NoSQL データベースを提供しており、これを使用してアプリケーションのユーザーロールをプログラムで管理できます。新しい collection を作成する必要はなく、アプリケーションで必要なだけの種類のロールを定義して管理するために、まずは users
collection を利用してロールを保存し、管理することから始めることができます。
ユーザーが追加または削除されるたびに、そのユーザーのロールを users
collection に更新する必要があります。これは Squid の backend コードを使用して行います。たとえば、ユーザーの状態が変更されたときに呼び出し可能な webhook や実行可能ファイルを追加することも考えられます。
以下は、auth provider がユーザーの変更に対して webhook を提供していることを前提に、TypeScript のデコレーターを使用してその処理を行う基本的な例です:
@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
collection にユーザーとそのロールが確立されると、これらのロールに基づいてリクエストの認可方法を決定することができます。これは、backend コード内の @secureCollection
やその他の @secure
関数内で実施されます。
たとえば、クライアントが collection からデータを読み取ろうとした場合、@secureCollection
でデコレートされた関数を呼び出して、アクセスを許可する前にユーザーのロールを確認することができます:
@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 collection、backend コード、Client SDK の組み合わせにより、アプリケーション向けの安全で効率的な RBAC システムを制御することができます。