パブリックデータアクセス
パブリック認可戦略は、API キーで保護されているAPIへのアクセスをすべてのユーザーに付与します。また、認可プロバイダーをオーバーライドして、API キーの代わりに Cognito の認証されていない IAM ロールを使用してパブリックアクセスを行うこともできます。
API キーベースの認証を使用してパブリック認可ルールを追加する
すべてのユーザーにアクセスを許可するには、.public() 認可戦略を使用します。内部では、API は API キーで保護されます。
const schema = a.schema({ Todo: a .model({ content: a.string(), }) .authorization(allow => [allow.publicApiKey()]),});アプリケーションでは、authMode を apiKey に指定して client.models.<model-name> を使用してモデルに対する CRUD 操作を実行できます。
import { generateClient } from 'aws-amplify/data';import type { Schema } from '../amplify/data/resource'; // Path to your backend resource definition
const client = generateClient<Schema>();
const { errors, data: newTodo } = await client.models.Todo.create( { content: 'My new todo', }, { authMode: 'apiKey', });API キーの有効期限を延長する
API キーの有効期限が切れていない場合、アプリをもう一度デプロイすることで有効期限を延長できます。API キーの有効期限は、アプリがデプロイされた日付から expiresInDays 日に設定されます。以下の例では、API キーは最新のデプロイから 7 日後に有効期限が切れます。
export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: 'apiKey', apiKeyAuthorizationMode: { expiresInDays: 7, }, },});API キーをローテーションする
有効期限が切れた、侵害された、または削除されたAPIキーをローテーションできます。API キーをローテーションするには、amplify/backend.ts ファイルでAPI キーリソースの論理IDをオーバーライドします。これにより、新しい論理IDを持つ新しい API キーが作成されます。
const backend = defineBackend({ auth, data,});
backend.data.resources.cfnResources.cfnApiKey?.overrideLogicalId( `recoverApiKey${new Date().getTime()}`);アプリをデプロイします。デプロイが完了したら、論理IDのオーバーライドを削除し、アプリをもう一度デプロイして、デフォルトの論理IDを使用します。
const backend = defineBackend({ auth, data,});
// backend.data.resources.cfnResources.cfnApiKey?.overrideLogicalId(// `recoverApiKey${new Date().getTime()}`// );アプリ用の新しい API キーが作成されます。
Amazon Cognito ID プールの認証されていないロールを使用してパブリック認可ルールを追加する
認可プロバイダーをオーバーライドすることもできます。以下の例では、identityPool がプロバイダーとして指定されており、API キーの代わりに Cognito ID プールからの「Unauthenticated Role」(認証されていないロール)を使用してパブリックアクセスを行うことができます。amplify/auth/resource.ts で定義された Auth リソースは、Cognito ID プールの「Unauthenticated Role」に対してスコープ設定された IAM ポリシーを自動的に生成します。
const schema = a.schema({ Todo: a .model({ content: a.string(), }) .authorization(allow => [allow.guest()]),});アプリケーションでは、identityPool 認証モードを使用して client.models.<model-name> でモデルに対する CRUD 操作を実行できます。
import { generateClient } from 'aws-amplify/data';import type { Schema } from '../amplify/data/resource'; // Path to your backend resource definition
const client = generateClient<Schema>();
const { errors, data: newTodo } = await client.models.Todo.create( { content: 'My new todo', }, { authMode: 'identityPool', });