パブリックデータアクセス
パブリック認可戦略は、API キーで保護されているAPIへのアクセスをすべてのユーザーに付与します。また、認可プロバイダーをオーバーライドして、API キーの代わりに Cognito の認証されていない IAM ロールを使用してパブリックアクセスを行うこともできます。
API キーベースの認証を使用してパブリック認可ルールを追加する
すべてのユーザーにアクセスを許可するには、.public() 認可戦略を使用します。内部では、API は API キーで保護されます。
const schema = a.schema({ Todo: a .model({ content: a.string(), }) .authorization(allow => [allow.publicApiKey()]),});アプリケーションでは、apiKey 認証モードを指定してモデルに対する CRUD 操作を実行できます。
do { let todo = Todo(content: "My new todo") let createdTodo = try await Amplify.API.mutate(request: .create( todo, authMode: .apiKey)).get()} catch { print("Failed to create todo", error)}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()]),});アプリケーションでは、awsIAM 認証モードを使用してモデルに対する CRUD 操作を実行できます。
do { let todo = Todo(content: "My new todo") let createdTodo = try await Amplify.API.mutate(request: .create( todo, authMode: .awsIAM)).get()} catch { print("Failed to create todo", error)}