Android中Amplify Storage获取身份ID失败,无法操作S3桶求解决
解决Amplify S3上传/下载时"获取身份ID失败"的问题
错误日志(翻译后)
StorageException{message=获取身份ID失败, cause=null, recoverySuggestion=AuthException{message=获取身份ID失败。请检查您是否已登录,以及身份池配置是否正确。, cause=null, recoverySuggestion=抱歉,目前我们没有针对此错误的建议修复方案。}} at com.amplifyframework.storage.s3.configuration.StorageAccessLevelAwarePrefixResolver.resolvePrefix(AWSS3PluginPrefixResolver.kt:70) at com.amplifyframework.storage.s3.operation.AWSS3StorageUploadFileOperation.start$lambda-1(AWSS3StorageUploadFileOperation.kt:89) at com.amplifyframework.storage.s3.operation.AWSS3StorageUploadFileOperation.$r8$lambda$_oyIiFAO5jakjMzA-FOjDISO9dI(Unknown Source:0) at com.amplifyframework.storage.s3.operation.AWSS3StorageUploadFileOperation$$ExternalSyntheticLambda2.run(Unknown Source:4)
排查与修复步骤
启用身份池的未认证访问权限
即便Storage配置了访客全权限,Cognito身份池本身可能未开启未认证访问:- 登录AWS控制台,进入Cognito身份池页面,找到对应项目的身份池
- 进入「编辑身份池」,勾选「启用对未认证身份的访问」选项
- 保存后执行
amplify pull同步最新配置到本地项目
确保Auth会话初始化完成
调用Storage操作前,必须完成Amplify初始化,且未认证用户需显式获取临时会话:// 初始化Amplify Amplify.configure(applicationContext) // 获取未认证用户会话,确保身份ID已生成 Amplify.Auth.fetchAuthSession( { result -> if (!result.isSignedIn) { // 会话就绪,可执行Storage上传/下载操作 } }, { error -> Log.e("Auth", "会话获取失败", error) } )验证S3桶策略权限
检查AWS控制台中S3桶的权限策略,确认身份池的未认证/认证角色拥有完整的存储操作权限,策略需包含类似语句:{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[你的AWS账号ID]:role/[身份池对应的未认证角色ARN]" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::[你的存储桶名称]/*" }核对本地Amplify配置文件
检查项目中的amplifyconfiguration.json:- Auth模块的
IdentityPoolId、Region需与AWS控制台一致 - Storage模块的
Bucket、Region需匹配目标S3桶信息
若配置有误,执行amplify push重新同步云端配置到本地
- Auth模块的
内容的提问来源于stack exchange,提问作者VinodS
相关产品推荐
相关产品推荐

