You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Amplify Gen2中保留自定义认证角色策略不被覆盖?

问题描述

我用Amplify为Flutter应用配置了简单认证,通过npm create amplify@latest -y创建环境,npx ampx sandbox --outputs-format dart --outputs-out-dir lib启动沙箱,遵循Gen2文档配置,流程正常。

相关配置文件如下:

  • backend.ts:
defineBackend({ auth, data });
  • auth/resource.ts:
export const auth = defineAuth({ loginWith: { email: true } });
  • data/resource.ts:
const schema = a.schema({ Todo: a.model({ content: a.string() }).authorization((allow) => [allow.guest()]) });
export type Schema = ClientSchema<typeof schema>;
export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: 'iam' } });

我需要给认证角色添加自定义IoT权限,示例策略:

{ "Effect": "Allow", "Action": "iot:*", "Resource": "*" }

手动添加后权限生效,但每次修改数据Schema(比如把Todo的授权从allow.guest()改成allow.owner()),Amplify都会重新生成角色策略,导致自定义权限丢失。

请问怎么在依赖Amplify管理数据Schema的同时,保留自定义角色策略语句,避免每次部署后手动修改?

解决方案

在Amplify Gen2中,你可以通过扩展认证角色的策略来永久保留自定义权限,避免被自动覆盖。具体操作如下:

  1. 修改auth/resource.ts,在defineAuth的配置中添加roles字段,对认证后的用户角色(authenticatedUser)追加自定义IoT权限:
import { defineAuth, PolicyStatement } from '@aws-amplify/backend';

export const auth = defineAuth({
  loginWith: { email: true },
  roles: {
    authenticatedUser: {
      permissions: [
        new PolicyStatement({
          actions: ["iot:*"],
          resources: ["*"],
          effect: "Allow"
        })
      ]
    }
  }
});
  1. 如果需要给访客角色(unauthenticatedUser)也添加权限,同样在roles里配置:
roles: {
  authenticatedUser: { /* 如上配置 */ },
  unauthenticatedUser: {
    permissions: [
      new PolicyStatement({
        actions: ["iot:*"],
        resources: ["*"],
        effect: "Allow"
      })
    ]
  }
}
  1. 重新部署或启动沙箱:
npx ampx sandbox --outputs-format dart --outputs-out-dir lib

这样配置后,Amplify会在自动生成角色策略的基础上,合并你定义的自定义权限,后续修改Schema重新部署时,自定义IoT权限会被保留,不会被覆盖。

注意:PolicyStatement的参数要符合IAM策略格式,确保actions和resources的写法正确。

内容的提问来源于stack exchange,提问作者sretko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:22:08