【问题标题】:AWS Video Rekognition is not publishing results to SNS TopicAWS Video Rekognition 未将结果发布到 SNS 主题
【发布时间】:2020-12-10 20:21:31
【问题描述】:

运行一些 nodejs aws rekognition 来检测 mp4 视频中的标签,但完成后不会发布到指定的 SNS 主题。使用主题/ROLE arns 提交请求时,我没有收到任何权限错误。

const AWS = require('aws-sdk');
AWS.config.update(
    {
        region: 'us-west-2',
        accessKeyId: "asdfadsf",
        secretAccessKey: "asdfasdfasdfasd1234123423"
    }
);


const params = {
    Video: {
        S3Object: {
            Bucket: 'myvidebucket',
            Name: '5d683b81760ec59c2015.mp4'
        }
    },
    NotificationChannel: {
        RoleArn: 'arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback',
        SNSTopicArn: 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:recoknize',
    },
    MinConfidence: 60
};


rekognition.startLabelDetection(params).promise().then(data => {
    console.log(JSON.stringify(data));
}).catch(error => {
    console.log(error);
});

该代码执行没有错误,我得到一个作业 ID。我的 SNS 主题订阅已确认,并且应该发布到我的 HTTPS 端点。但是什么都没有到达,AWS 控制台中的任何地方都没有关于此的错误日志。

当我通过 jobid 手动访问 rekogniztion 时,数据恢复正常,因此我知道它已正确完成。 IAM 权限一定会发生一些奇怪的事情。

【问题讨论】:

    标签: node.js amazon-web-services amazon-sns amazon-rekognition


    【解决方案1】:

    我已成功审核并测试了您的 nodejs 代码,我认为它没有任何问题。

    由于代码成功返回 AWS Rekognition“JobId”,您可以查看您的 SNS 配置并检查它是否与以下内容匹配:

    1.关于您的 SNS 主题'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:recoknize'),导航到访问策略并检查您是否有类似以下的策略:

    {
      "Version": "2008-10-17",
      "Id": "__default_policy_ID",
      "Statement": [
        {
          "Sid": "__default_statement_ID",
          "Effect": "Allow",
          "Principal": {
            "Service": "rekognition.amazonaws.com"
          },
          "Action": [
            "SNS:GetTopicAttributes",
            "SNS:SetTopicAttributes",
            "SNS:AddPermission",
            "SNS:RemovePermission",
            "SNS:DeleteTopic",
            "SNS:Subscribe",
            "SNS:ListSubscriptionsByTopic",
            "SNS:Publish",
            "SNS:Receive"
          ],
          "Resource": "arn:aws:sns:us-west-2:XXXXXXXXXXXX:AmazonRekognitionTopic"
        }
      ]
    }
    

    2. 关于您的 IAM 角色 ('arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback'),请确保以下几点:

    (i)你的角色的“信任关系”有如下声明:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service":"rekognition.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    (ii) 该角色附有一份类似于下面给出的政策文件:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "sns:publish"
                ],
                "Resource": "*"
            }
        ]
    }
    

    从 Amazon Rekognition 成功发布到 SNS 主题的消息应输出类似于:

    "JobId":"8acd9edd6edfb0e4985f8cd269e4863e54f7fcd451af6aafe10b32996dedbdba","Status":"SUCCEEDED","API":"StartLabelDetection","Timestamp":1568544553927,"Video":{"S3ObjectName":"final.mp4","S3Bucket":"syumak-rekognition"}}
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您输入。不幸的是,即使使用管理员用户凭据,我仍然无法使其正常工作。这么奇怪。 Rekognition 不会发布到我的主题。
    • 按照您的步骤进行操作,我只是出于某种原因需要创建新的安全凭证密钥。
    • 第 1 步帮助了我。我在访问策略中有一个条件,只允许主题所有者发布消息。我删除了它,它起作用了!
    【解决方案2】:

    隐藏在文档中 - 很明显 https://docs.aws.amazon.com/rekognition/latest/dg/api-video-roles.html#api-video-roles-all-topics

    AmazonRekognitionServiceRole 允许 Amazon Rekognition Video 访问 以 AmazonRekognition 为前缀的 Amazon SNS 主题。

    它没有说角色 ARN 需要加前缀。但不会受伤。 仔细检查您的主题是 AmazonRekognitionMyTopicName

     RoleArn: 'arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback', <- don't think this is so important.
    SNSTopicArn: 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:recoknize', <- Must be something like AmazonRekognitionSuccess
    

    另外 - 这有助于/我移除了允许通过电子邮件订阅以及 SQS 的 FIFO。 https://docs.aws.amazon.com/rekognition/latest/dg/video-troubleshooting.html

    这一行 验证您是否具有 IAM 服务角色,该角色授予 Amazon Rekognition Video 发布到您的 Amazon SNS 主题的权限。有关更多信息,请参阅配置 Amazon Rekognition Video。

    我创建了一个新的 IAM 并提供了它 AmazonRekognitionFullAccess AmazonSNSRole AmazonSNSFullAccess

    我更新了信任关系以包括 sns.amazonaws.com / rekognition.amazonaws.com.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "sns.amazonaws.com",
              "rekognition.amazonaws.com"
            ]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    不确定其中哪一个让所有内容都点击了 - 但花了半天时间/希望这可以节省一些时间。

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2018-03-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多