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

本地网页查看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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:47:41