AWS Video Rekognition 未将结果发布到 SNS 主题

Jef*_*ker 6 amazon-web-services node.js amazon-sns amazon-rekognition

运行一些nodejs aws rekognition来检测mp4视频中的标签,但完成后不会发布到指定的SNS主题。使用主题/角色 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);
});
Run Code Online (Sandbox Code Playgroud)

该代码执行时没有错误,并且我得到了作业 ID。我的 SNS 主题订阅已确认,并且应该发布到我的 HTTPS 端点。但什么也没有到达,并且 AWS 控制台中的任何位置都没有与此相关的错误日志。

当我通过 jobid 手动访问重新识别时,数据正常返回,因此我知道它正确完成。IAM 权限肯定发生了一些奇怪的事情。

syu*_*maK 6

我已经成功地审查并测试了你的nodejs代码,我没有发现它有任何问题。

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

1.在您的SNS 主题( 'arn:aws:sns:us-west-2:xxxxxxxxxxxx: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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

2.在您的IAM 角色 ('arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback')上,确保以下各项:

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service":"rekognition.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:publish"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

"JobId":"8acd9edd6edfb0e4985f8cd269e4863e54f7fcd451af6aafe10b32996dedbdba","Status":"SUCCEEDED","API":"StartLabelDetection","Timestamp":1568544553927,"Video":{"S3ObjectName":"final.mp4","S3Bucket":"syumak-rekognition"}}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。