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

前端开发者本地运行AWS Amplify的最小IAM权限配置咨询

前提假设

  • 拥有单个AWS组织“MyOrg”和单个AWS账户“MyAccountId”
  • 采用AWS Identity Center管理人工用户的身份验证(Authn)与授权(Authz)
  • 已存在一个AWS Amplify App(v5),配置如下:
    • 托管环境:dev、prod
      • 托管应用为NextJS Web应用
    • 后端环境:dev、prod
      • 已启用“auth”类别
        • 禁用自助注册
  • 托管环境中的前端应用使用AWS Amplify客户端SDK amplify-js与后端环境进行身份验证
  • 拥有管理员账户,可修改上述任意配置

目标

需为新前端开发者完成入职配置,使其能够:

  • 通过命令行在本地运行前端应用
  • 通过本地前端应用以用户“user1”身份在“dev”后端环境中完成身份验证
  • 使用前端应用的体验与托管在同一“dev”后端环境下的前端应用一致

开发者不得:

  • 通过AWS Amplify CLI对后端环境执行修改或删除操作(如移除类别、修改类别配置等),假设前端应用本身无需此类操作

挑战

按照官方文档配置AWS Amplify CLI以本地运行前端应用时,采用的AdministratorAccess-Amplify AWS托管策略不符合最小权限原则,该策略允许开发者执行所有操作,包括删除应用、重新配置类别等

已完成配置

  • 在AWS Identity Center中为开发者创建用户,开发者可登录组织的SSO门户
  • 将用户加入“Frontend Developers Group”组,该组关联“Frontend Developer”权限集,开发者可以“Frontend Developer”身份登录AWS账户“MyAccountId”
  • 在“dev”后端环境的身份验证用户池(AWS Cognito)中为“dev”应用添加用户,开发者可登录基于“dev”后端环境的前端应用
  • 开发者已按照官方文档正确配置AWS profile以使用“Frontend Developer”权限,可成功使用带有“Frontend Developer”权限集的profile完成AWS CLI与Amplify CLI的身份验证

核心问题

需为“Frontend Developer”权限集关联何种IAM策略(AWS托管或内联策略),以成功配置AWS Amplify CLI,使得开发者无法对Amplify后端环境执行破坏性(删除、编辑)操作,但仍可通过Amplify客户端SDK读取/使用后端环境?

已尝试方案

已查看AWS托管策略,仅找到以下两个:

  • AdministratorAccess-Amplify
  • AmplifyBackendDeployFullAccess
    二者权限范围过大,不符合需求。期望找到类似“AmplifyReadOnly”的策略。查看这些策略中的权限定义后,无法明确AWS Amplify CLI正常工作所需的具体权限,因为这需要了解Amplify CLI的底层操作逻辑。

目前只能逐个添加权限来调整IAM策略,但这种方法依赖CLI给出有效的错误提示,且耗时较长。此外,执行破坏性命令存在风险(即使使用测试应用,也可能误删重要内容)。最后,根据经验,AWS Amplify CLI工具链较为脆弱,必须严格按照其支持的方式使用(例如即使不需要未授权用户访问,也必须定义未授权用户角色)

解决方案

要实现最小权限需求,需创建自定义内联IAM策略,仅授予Amplify CLI读取后端配置所需的权限,同时拒绝所有破坏性操作。以下是具体策略内容:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amplify:GetApp",
                "amplify:GetBackendEnvironment",
                "amplify:GetBranch",
                "amplify:GetDomainAssociation",
                "amplify:ListApps",
                "amplify:ListBackendEnvironments",
                "amplify:ListBranches",
                "amplify:ListDomainAssociations",
                "amplify:ListTagsForResource",
                "cognito-idp:DescribeUserPool",
                "cognito-idp:DescribeUserPoolClient",
                "cognito-idp:ListUserPoolClients",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:amplify:${Region}:${MyAccountId}:apps/${AmplifyAppId}",
                "arn:aws:amplify:${Region}:${MyAccountId}:apps/${AmplifyAppId}/backendenvironments/dev",
                "arn:aws:cognito-idp:${Region}:${MyAccountId}:userpool/${UserPoolId}",
                "arn:aws:s3:::${AmplifyDeploymentBucket}/*",
                "arn:aws:s3:::${AmplifyDeploymentBucket}"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "amplify:CreateApp",
                "amplify:DeleteApp",
                "amplify:UpdateApp",
                "amplify:CreateBackendEnvironment",
                "amplify:DeleteBackendEnvironment",
                "amplify:UpdateBackendEnvironment",
                "amplify:CreateBranch",
                "amplify:DeleteBranch",
                "amplify:UpdateBranch",
                "amplify:CreateDomainAssociation",
                "amplify:DeleteDomainAssociation",
                "amplify:UpdateDomainAssociation",
                "amplify:StartDeployment",
                "amplify:StopDeployment",
                "cognito-idp:CreateUserPool",
                "cognito-idp:DeleteUserPool",
                "cognito-idp:UpdateUserPool",
                "cognito-idp:CreateUserPoolClient",
                "cognito-idp:DeleteUserPoolClient",
                "cognito-idp:UpdateUserPoolClient"
            ],
            "Resource": [
                "arn:aws:amplify:${Region}:${MyAccountId}:apps/${AmplifyAppId}",
                "arn:aws:amplify:${Region}:${MyAccountId}:apps/${AmplifyAppId}/backendenvironments/dev",
                "arn:aws:cognito-idp:${Region}:${MyAccountId}:userpool/${UserPoolId}"
            ]
        }
    ]
}

策略说明

  1. 允许的权限:

    • Amplify相关:仅允许读取应用、后端环境、分支等元数据的权限,确保CLI能拉取后端配置文件
    • Cognito相关:允许读取用户池和客户端配置,确保前端SDK能正常对接身份验证服务
    • S3相关:允许读取Amplify部署桶中的配置文件,CLI需要这些文件来生成本地配置
  2. 拒绝的权限:

    • 明确拒绝所有Amplify应用、后端环境、分支的创建/删除/修改操作
    • 拒绝Cognito用户池及客户端的创建/删除/修改操作
    • 拒绝部署相关操作,防止开发者触发应用部署

变量替换说明

将策略中的${Region}、${MyAccountId}、${AmplifyAppId}、${UserPoolId}、${AmplifyDeploymentBucket}替换为实际的AWS区域、账户ID、Amplify应用ID、Cognito用户池ID和Amplify部署桶名称。

验证步骤

  1. 将该策略关联到“Frontend Developer”权限集
  2. 开发者使用该权限集的AWS profile执行amplify pull --appId ${AmplifyAppId} --envName dev
  3. 确认CLI能成功拉取配置,且执行破坏性命令(如amplify delete、amplify update auth)时返回权限拒绝错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:44:50