Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Dec 13, 2024

パブリックデータアクセス

パブリック認可戦略は、API キーで保護されているAPIへのアクセスをすべてのユーザーに付与します。また、認可プロバイダーをオーバーライドして、API キーの代わりに Cognito の認証されていない IAM ロールを使用してパブリックアクセスを行うこともできます。

API キーベースの認証を使用してパブリック認可ルールを追加する

すべてのユーザーにアクセスを許可するには、.public() 認可戦略を使用します。内部では、API は API キーで保護されます。

amplify/data/resource.ts
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 日後に有効期限が切れます。

amplify/data/resource.ts
export const data = defineData({
schema,
authorizationModes: {
defaultAuthorizationMode: 'apiKey',
apiKeyAuthorizationMode: {
expiresInDays: 7,
},
},
});

API キーをローテーションする

有効期限が切れた、侵害された、または削除されたAPIキーをローテーションできます。API キーをローテーションするには、amplify/backend.ts ファイルでAPI キーリソースの論理IDをオーバーライドします。これにより、新しい論理IDを持つ新しい API キーが作成されます。

amplify/backend.ts
const backend = defineBackend({
auth,
data,
});
backend.data.resources.cfnResources.cfnApiKey?.overrideLogicalId(
`recoverApiKey${new Date().getTime()}`
);

アプリをデプロイします。デプロイが完了したら、論理IDのオーバーライドを削除し、アプリをもう一度デプロイして、デフォルトの論理IDを使用します。

amplify/backend.ts
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 ポリシーを自動的に生成します。

amplify/data/resource.ts
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)
}