AWS CognitoIdentityCredentials调用S3时未设置访问值报错排查
报错Unauthenticated access is not supported for this identity pool的核心原因是你发起凭证请求时没有携带有效登录凭证,且当前身份池未开启未认证用户访问权限,按以下步骤排查即可:
- 第一步:核对Cognito身份池的未认证访问配置
进入AWS Cognito控制台,打开报错环境对应的身份池,在「基本信息」页查看未认证访问的开关状态:- 如果你的业务允许未登录用户访问S3资源,直接打开该开关即可
- 如果业务要求必须登录后才能访问,说明你当前的代码缺少登录凭证的传递逻辑
- 第二步:补全认证场景下的凭证参数
若要求用户登录后访问,你需要在用户完成Cognito用户池登录、拿到有效会话后,将用户池返回的JWT令牌传入CognitoIdentityCredentials的Logins字段,完整代码示例如下:AWS.config.credentials = new AWS.CognitoIdentityCredentials( { IdentityPoolId: this.cognito.identityPoolId, RoleArn: this.cognito.roleArn, // 传入用户池登录凭证 Logins: { [`cognito-idp.${this.awsRegion}.amazonaws.com/${this.cognito.userPoolId}`]: 登录后获取的idToken值 } }, { region: this.awsRegion } ); - 第三步:核对身份池关联IAM角色的信任策略
打开IAM控制台,找到报错环境所用的roleArn对应的角色,检查信任策略是否允许Cognito身份池服务代入角色,且条件中的身份池ID和你实际传入的完全匹配。 - 第四步:检查身份池的角色分配规则
若你配置了基于用户属性的角色选择规则,需要确认规则匹配逻辑正确,且配置了兜底的默认认证角色,避免匹配失败导致凭证下发失败。
内容的提问来源于stack exchange,提问作者dcp3450
相关产品推荐
相关产品推荐

