セキュリティルール
Squid は、AI agents、databases、backend functions、APIs など、さまざまな entity へのアクセスを制御できる強力な authorization 機能を提供します。これにより、データを保護し、許可されたユーザーだけが特定のアクションを実行できるようにできます。
Squid の access control は、Squid backend 内で TypeScript functions を使って管理されます。ある function が access control に関するものであることを示すには、1 つ以上の decorator を適用します。decorator は @ で始まるラベルです。たとえば、次の function は @secureDatabase decorator を使用して、認証済みユーザーのみが built-in database にアクセスできるようにします。
@secureDatabase('all', 'built_in_db') // Decorator marks function as securing a database
allowAccessToBuiltInDb(): boolean {
return this.isAuthenticated();
}
Squid decorators と Squid Backend SDK を使用すると、user roles や permissions などのさまざまな条件に基づいて entity へのアクセスを制限できます。
クライアントが security が設定された entity にアクセスしようとして、authorization function が false を返した場合(つまりユーザーが許可されていない場合)、クライアントは以下の詳細を含む Error を受け取ります。
{
"statusCode": 401,
"message": "UNAUTHORIZED"
}
たとえば、次のコードは、指定されたユーザーのみが users という collection 内の自分の record を読み取れるようにします。
import {
secureCollection,
SquidService,
QueryContext,
} from '@squidcloud/backend';
type User = { id: string; email: string; age: number };
export class ExampleService extends SquidService {
@secureCollection('users', 'read')
secureUsersRead(context: QueryContext<User>): boolean {
const userAuth = this.getUserAuth();
if (!userAuth) {
return false;
}
const userId = userAuth.userId;
return context.isSubqueryOf('id', '==', userId);
}
}
この security 機能に基づき、クライアントが次の query を実行しようとするとエラーが返されます。この function は、ユーザーに属さない複数の user records にアクセスしようとするためです。
// This function will throw an error
async function readAllUsers(squid: Squid): Promise<User[]> {
return await squid.collection<User>('users').query().snapshot();
}
探索
個々の機能に対する access controls について詳しくは、以下のドキュメントをご覧ください。
📄️ AI Agents と Agent API Keys のセキュリティ保護
@secureAiAgent デコレーターを使用して、特定の agent をセキュリティ保護する関数であることを指定します。Agent API Keys を使用すると、セキュリティ方法をバイパスでき、App API Keys を不要にできます。
📄️ API のセキュリティ保護
@secureApi デコレーターを使用して、API コネクターへのアクセスを保護および管理します。
📄️ データアクセスの保護
Squid が提供する一連のデコレーターを使用して、Squid に接続されているあらゆるデータベース(組み込みの内部データベースを含む)を保護します。
📄️ データの保護
クライアント認証とバックエンド機能を使用してデータへのアクセスを管理する
📄️ GraphQL のセキュリティ
@secureGraphQL デコレーターを使用して、GraphQL 統合へのアクセスを保護します。
📄️ 分散ロックのセキュリティ保護
分散ロックは、共有リソースへのアクセスを管理し、データを順序どおりにトランザクション処理できるようにします。@secureDistributedLock デコレータはロックをセキュリティ保護します。
📄️ キューのセキュリティ保護
@secureTopic デコレーターは Apache Kafka のキューを保護し、認可されたユーザーのみがデータストリームメッセージにアクセスできるようにします。
📄️ ストレージの保護
ストレージバケットを保護し、承認されたユーザーのみがファイルにアクセスできるようにする @secureStorage デコレーター。