本地网页查看AWS Kinesis视频流遇AccessDeniedException问题排查
解决AWS Kinesis视频流AccessDeniedException及sts:assumeRole异常的问题
结合你用未认证Cognito身份访问Kinesis视频流的场景,虽然你的IAM策略看起来给了全权限,但问题大概率出在以下几个容易忽略的点上:
1. 未认证角色的信任策略配置错误
Cognito的未认证角色必须明确信任cognito-identity.amazonaws.com服务,才能被Cognito身份池调用扮演。如果信任关系没配置对,会直接触发sts:assumeRole异常,后续的Kinesis操作自然也会因为身份无效而报错。
检查并修正信任策略的步骤:
- 进入IAM控制台,找到你的未认证角色
- 切换到「信任关系」标签页,确认是否包含类似以下的配置:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "你的Cognito身份池ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }
如果缺少这个配置,或者Condition里的amr未包含unauthenticated,Cognito就无法为未认证用户完成角色扮演。
2. Kinesis视频流的资源策略限制
即使IAM角色拥有kinesisvideo:*权限,目标视频流自身的资源策略可能会拒绝未认证用户的访问。你需要给流添加允许未认证角色访问的资源策略:
示例配置(替换成你的角色ARN和流ARN):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::XXXXXXXXX:role/你的未认证角色名" }, "Action": "kinesisvideo:GetDataEndpoint", "Resource": "arn:aws:kinesisvideo:你的区域:XXXXXXXXX:stream/你的流名/YYYYMMDD" } ] }
注意:流ARN中的时间戳后缀(创建流时生成)可以用*代替,简化配置。
3. 权限边界(Permission Boundary)的限制
如果你的未认证角色被设置了权限边界,即使IAM策略允许相关操作,权限边界也可能覆盖这些权限,导致实际权限不足。
检查方法:
- 进入IAM角色的「权限」标签页,查看是否有「权限边界」配置。如果存在,确认边界策略是否包含了
kinesisvideo:GetDataEndpoint和sts:AssumeRoleWithWebIdentity操作。
4. Cognito身份池的角色关联错误
最后确认你的Cognito身份池是否正确关联了配置好权限的未认证角色:
- 进入Cognito控制台,打开对应的身份池
- 切换到「身份池设置」标签页,查看「未认证身份的IAM角色」是否选择了你配置权限的那个角色。
按以上步骤逐一排查,应该能解决你遇到的权限异常问题。
内容的提问来源于stack exchange,提问作者Quillbert Q.
相关产品推荐
相关产品推荐

