AWS Cognito/IAM未授权角色错误:网站用户视频转码权限问题
嘿,作为AWS新手碰到权限问题太正常了,我帮你梳理下最可能的几个原因和解决步骤,都是我自己踩过的坑~
解决AWS Cognito/IAM角色授权错误(Elastic Transcoder + S3场景)
核心问题本质是:你的用户通过JS API操作时,Cognito身份池对应的IAM角色没有足够权限调用Elastic Transcoder,或是访问S3的输入/输出桶。下面一步步排查解决:
1. 检查Cognito身份池的授权角色
登录AWS控制台,找到Cognito身份池,进入你的身份池详情,查看「未验证身份」或「已验证身份」对应的IAM角色(取决于你的用户类型)。
打开这个IAM角色的权限策略,确保包含以下必要权限:
- S3相关:允许访问输入桶的
s3:GetObject(Elastic Transcoder需要读取源文件),以及输出桶的s3:PutObject(转码后写入);如果用户还要上传文件到输入桶,得再加s3:PutObject权限到输入桶。 - Elastic Transcoder相关:允许
elastictranscoder:CreateJob(创建转码任务),如果需要查看任务状态,还要elastictranscoder:ReadJob。
给你个示例权限策略(记得替换成你的桶名和区域):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::你的输入桶名/*", "arn:aws:s3:::你的输出桶名/*" ] }, { "Effect": "Allow", "Action": [ "elastictranscoder:CreateJob", "elastictranscoder:ReadJob" ], "Resource": "arn:aws:elastictranscoder:你的区域:*:jobs/*" } ] }- S3相关:允许访问输入桶的
2. 确保Elastic Transcoder角色有S3访问权限
Elastic Transcoder本身需要一个IAM角色来访问S3输入/输出桶,这个角色是你创建转码管道时指定的。
检查这个角色的权限策略:必须允许从输入桶读取、向输出桶写入,要是开了日志,还要允许写入CloudWatch日志。
另外,这个角色的信任关系必须允许
elastictranscoder.amazonaws.com作为信任实体,不然Elastic Transcoder没法「借用」这个角色。信任关系示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "elastictranscoder.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
3. 检查Cognito身份池的信任关系
- 确保Cognito的IAM角色信任关系允许Cognito身份池来「借用」它。比如信任关系里要有这段:
{ "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "你的身份池ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" // 或者"unauthenticated",看你的用户类型 } } }
4. 前端JS代码的权限配置
- 如果你用AWS Amplify或直接用AWS SDK,要确保初始化时指定了正确的身份池ID,且用户已经通过Cognito正确认证(如果是已验证用户的话)。
- 比如用AWS SDK v3时,初始化CognitoIdentityProvider和ElasticTranscoderClient,得确保用的是从Cognito获取到的凭证。
5. 利用具体错误信息定位
- 要是能拿到控制台的具体报错,直接按关键词排查:
- 报
AccessDenied:大概率是IAM权限不足; - 报
InvalidRoleException:Elastic Transcoder的角色信任关系有问题; - 报
NotAuthorizedException:可能是Cognito用户没正确获取到凭证。
- 报
最后提醒下,修改完IAM策略后等个几分钟,AWS权限同步有时候会有延迟~
内容的提问来源于stack exchange,提问作者Quentin
相关产品推荐
相关产品推荐

