セキュリティルール
Squidは、AI agents、databases、backend functions、APIsなど、さまざまなエンティティへのアクセスを管理する強力な認可機能を提供します。これにより、データを保護し、認可されたユーザーのみが特定の操作を実行できるようにすることができます。
Squidのアクセス制御は、SquidバックエンドにおいてTypeScript関数を使用して管理されます。アクセス制御に関連する関数であることを示すため、1つまたは複数のdecorators(@で始まるラベル)を適用します。例えば、以下の関数では、@secureDatabase decoratorを用いて、認証済みのユーザーのみがbuild-in databaseにアクセスできることを保証しています:
@secureDatabase('all', 'built_in_db') // Decorator marks function as securing a database
allowAccessToBuiltInDb(): boolean {
return this.isAuthenticated();
}
SquidのdecoratorsおよびSquid Backend SDKを使用することで、ユーザーロールやpermissionsなど、さまざまな基準に基づきエンティティへのアクセスを制限することができます。
もしクライアントがセキュリティ保護されたエンティティへアクセスを試みた際に、authorization functionがfalseを返してユーザーが認可されていない場合、クライアントには以下の詳細情報を含むErrorが返されます:
{
"statusCode": 401,
"message": "UNAUTHORIZED"
}
例えば、以下のコードは指定されたユーザーのみがusersと呼ばれるコレクション内の自分のレコードを読み取ることができるようにします:
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);
}
}
このセキュリティ機能に基づいて、もしクライアントが以下のクエリの実行を試みた場合、この関数はユーザーに属さない複数のユーザーレコードにアクセスしようとするため、エラーが返されます:
// This function will throw an error
async function readAllUsers(squid: Squid): Promise<User[]> {
return await squid.collection<User>('users').query().snapshot();
}
探索
個々の機能におけるアクセス制御の詳細については、以下のドキュメントをご参照ください:
📄️ AI Agents と Agent API Keys のセキュリティ
指定されたエージェントのセキュリティを確保する関数として、@secureAiAgent デコレーターを使用します。セキュリティ方法をバイパスし、App API Keysを必要としないために、Agent API Keysを使用します。
📄️ API の保護
API コネクタへのアクセスを保護および管理するために、@secureApi デコレータを使用します。
📄️ データアクセスの保護
Squidが提供するさまざまなデコレータを使用して、Squidに接続されている(内蔵の内部データベースを含む)すべてのデータベースを保護します。
📄️ データの保護
クライアント認証とバックエンド機能を使用してデータへのアクセスを管理する
📄️ Securing GraphQL
@secureGraphQL デコレーターを使用して、GraphQL統合へのアクセスを保護します。
📄️ 分散ロックの保護
分散ロックは、データを順序よく処理するために共有リソースへのアクセス管理を行います。@secureDistributedLock デコレーターはロックを保護します。
📄️ キューの保護
The @secureTopic decorator はあなたの Apache Kafka キューを保護し、認証されたユーザーのみがデータストリームメッセージにアクセスできるようにします。
📄️ ストレージのセキュリティ確保
認可されたユーザーのみがファイルにアクセスできるように、あなたのストレージバケットを保護する @secureStorage デコレーター。