Cognito身份凭证无权对Kinesis视频资源执行操作

问题描述 投票:0回答:2

[我正在尝试允许使用Cognito身份池访问Kinesis视频流,但在调用AccessDeniedException时得到一个GetDataEndpoint

IAM角色策略文档:

{
    "Sid": "Stream",
    "Effect": "Allow",
    "Action": [
        "kinesisvideoarchivedmedia:GetHLSStreamingSessionURL",
        "kinesisvideo:GetDataEndpoint"
        ],
    "Resource": "arn:aws:kinesisvideo:us-west-2:XXXXXXXXXXXX:stream/<stream-name>/<stream-id>"
}

我已经使用策略模拟器测试了该策略,它显示了允许在流上执行GetDataEndpoint操作,但是在浏览器中对其进行测试时,会发生拒绝访问异常:

AccessDeniedException: 用户:arn:aws:sts :: XXXXXXXXXXXX:assumed-role // CognitoIdentityCredentials 无权执行:资源上的kinesisvideo:GetDataEndpoint: <resource-name>

这是我在网站上获取临时证书的方式:

AWS.config.region = 'us-west-2';AWS.config.credentials = new AWS.CognitoIdentityCredentials({
     IdentityPoolId: <identity-pool>,
});

AWS.config.credentials.get(function (err, data) {
    if (!err) {
        id = AWS.config.credentials.identityId;
        accessKey = AWS.config.credentials.accessKeyId;
        secretKey = AWS.config.credentials.secretAccessKey;
        token = AWS.config.credentials.sessionToken;
    }
});

我曾尝试对Kinesis视频操作和资源使用通配符,但仍然会遇到相同的错误。任何建议,将不胜感激。

amazon-web-services amazon-cognito amazon-kinesis
2个回答
0
投票

这将归因于Cognito应用于未经身份验证的用户的范围缩小策略。在这里进一步说明:https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html

如上述文档所述:

如果您需要访问这些服务以外的其他服务, 未经身份验证的用户,必须使用基本身份验证流程。


0
投票

为了轻松解决此问题,您还应该将未经身份验证的角色RoleArn传递给CognitoIdentityCredentials

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
     IdentityPoolId: <identity-pool>,
     RoleArn: <unauthorizedRoleArn>
});

这将确保,如指定的here

[如果提供了RoleArn,则此提供程序在首先从AWS.CognitoIdentity.getOpenIdToken()获得Open ID令牌后,将使用AWS.STS.assumeRoleWithWebIdentity()服务操作获取证书。

这实质上意味着将使用Basic (Classic) Flow提供凭据。>

此外,您还应该在身份池身份验证流设置中允许基本(经典)流

© www.soinside.com 2019 - 2024. All rights reserved.