运行一些nodejs aw rekognition以检测mp4视频中的标签,但是完成后它不会发布到指定的SNS主题。提交带有主题/角色信息的请求时,我没有任何权限错误。
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手动访问识别时,数据恢复正常,因此我知道它正确完成了。使用IAM权限必须进行一些奇怪的事情。
答案 0 :(得分:1)
我已成功检查并测试了您的nodejs代码,但没有发现任何问题。
由于代码成功返回了AWS Rekognition“ JobId”,因此您可以查看您的SNS配置并检查其是否符合以下条件:
1。。在您的 SNS主题上( 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:rekknize' ),导航至访问策略,然后检查您是否具有类似于以下内容的策略:
{
"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') < / strong>,请确保以下几点:
(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"}}
希望这会有所帮助。
答案 1 :(得分:0)
隐藏在文档中-显然 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
也-这有帮助/我取消了FIFO,该FIFO除了允许SQS之外还允许通过电子邮件进行订阅。 https://docs.aws.amazon.com/rekognition/latest/dg/video-troubleshooting.html
此行 确认您具有IAM服务角色,该角色赋予了Amazon Rekognition Video权限以发布到您的Amazon SNS主题。有关更多信息,请参阅配置Amazon Rekognition视频。
我创建了一个新的IAM并给了它 AmazonRekognitionFullAccess 亚马逊 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"
}
]
}
不确定是哪一个使所有内容都点击了-但是在此上度过了愉快的一天/希望这可以节省一些时间。