Cognito无法提供有效凭证,Evidently命令执行失败求助
问题分析与解决方案
你的核心问题是IAM策略的资源匹配逻辑,以及可能存在的IAM策略缓存或region配置问题,以下是具体修正步骤:
1. 修正IAM策略的资源范围(关键)
虽然你使用了Resource: '*',但CloudWatch Evidently的部分API(如ListFeatures)对资源权限的匹配要求更精确,需要明确指定项目ARN而非通配符。修改CloudFormation模板中的UIIAMRole策略:
Policies: - PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - evidently:ListFeatures - evidently:EvaluateFeature Resource: - "arn:aws:evidently:us-east-1:YOUR_ACCOUNT_ID:project/my-evidently-project" - "arn:aws:evidently:us-east-1:YOUR_ACCOUNT_ID:project/my-evidently-project/feature/*" # 移除cognito-identity:GetCredentialsForIdentity,该权限不需要赋予客户端角色(由Cognito服务自动处理)
替换YOUR_ACCOUNT_ID为你的AWS账号ID,这样既覆盖了项目本身(对应ListFeatures),也覆盖了单个功能(对应EvaluateFeature)。
2. 检查并修复region配置
- 对于AWS CLI调用,确保指定正确的region:
aws evidently list-features --project my-evidently-project --region us-east-1 - 你的Node SDK代码已经指定了region,这部分没问题,但要确认Evidently项目确实部署在
us-east-1。
3. 等待IAM策略缓存生效
IAM策略的变更通常需要1-5分钟才能全局生效,如果你刚创建完资源就测试,可能需要等待一段时间再重试。
4. 排查Evidently项目的资源策略
登录AWS控制台进入Evidently项目,检查是否存在资源级策略(Resource-based Policy)限制了未认证角色的访问,如果有,需添加允许该角色访问的规则。
额外优化:修正角色信任策略的Condition
虽然这不是当前权限错误的直接原因,但可以让信任策略更严谨:将ForAnyValue:StringLike改为ForAnyValue:StringEquals,因为unauthenticated是固定值,不需要模糊匹配:
Condition: StringEquals: cognito-identity.amazonaws.com:aud: !Ref CognitoIdentityPool ForAnyValue:StringEquals: cognito-identity.amazonaws.com:amr: unauthenticated
内容的提问来源于stack exchange,提问作者nvioli
相关产品推荐
相关产品推荐

