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

如何通过CDK/CloudFormation/CLI设置AWS Cognito自定义用户池属性为只读?

解决Cognito自定义用户池属性设为只读的问题

核心逻辑梳理

用户池自定义属性的“可修改”是用户池层面的配置,决定该属性是否允许被客户端修改;而用户池客户端的WriteAttributes是客户端层面的配置,控制当前客户端能修改哪些属性。要实现客户端无法修改某个自定义属性,需要:

  • 用户池层面将该属性设为“可修改”(若设为不可修改,所有客户端都无法修改)
  • 客户端的WriteAttributes中不包含该自定义属性

各工具的正确配置方式

1. Java CDK

不要直接使用空的ClientAttributes,需明确指定允许修改的标准属性,不添加自定义属性:

// 配置允许客户端修改的标准属性,按需调整
ClientAttributes writeAttributes = ClientAttributes.builder()
    .withStandardAttributes(StandardAttributes.builder()
        .email(new StandardAttribute().withMutable(true))
        .name(new StandardAttribute().withMutable(true))
        .build())
    // 不添加任何自定义属性到可写列表
    .build();

// 创建用户池客户端时关联该配置
UserPoolClient userPoolClient = UserPoolClient.Builder.create(this, "MyAppClient")
    .userPool(yourUserPool)
    .writeAttributes(writeAttributes)
    .build();

2. CloudFormation YAML

明确列出允许修改的标准属性,不要包含自定义属性:

MyUserPoolClient:
  Type: AWS::Cognito::UserPoolClient
  Properties:
    UserPoolId: !Ref MyUserPool
    WriteAttributes:
      - email
      - name
      # 此处不要添加custom:开头的自定义属性

3. AWS CLI

更新客户端时,指定允许修改的属性,排除自定义属性:

aws cognito-idp update-user-pool-client \
  --user-pool-id YOUR_USER_POOL_ID \
  --client-id YOUR_CLIENT_ID \
  --write-attributes email name

常见问题排查

  • 空WriteAttributes无效:空数组会被Cognito视为保留原有配置(默认允许修改所有用户池可修改属性),必须明确指定允许的属性。
  • Invalid write attributes specified错误:
    • 检查属性是否在用户池层面设为可修改
    • 自定义属性必须带custom:前缀(如custom:hobby)
    • 不要指定用户池层面设为不可修改的属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:07:10