【问题标题】:Rekognition InvalidS3ObjectException Error in SearchFacesByImage (400 Bad Request.. Unable to get object metadata from S3)SearchFacesByImage 中的 Rekognition InvalidS3ObjectException 错误(400 Bad Request.. 无法从 S3 获取对象元数据)
【发布时间】:2019-01-28 06:02:34
【问题描述】:

当我使用图像或视频(s3 源)执行 Rekognition 时出现以下错误。

" 在 "https://rekognition.us-east-1.amazonaws.com" 上执行 "SearchFacesByImage" 时出错;AWS HTTP 错误:客户端错误:POST https://rekognition.us-east-1.amazonaws.com 导致 400 错误请求响应:{"__type":"InvalidS3ObjectException","Code":"InvalidS3ObjectException ","Logref":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"," (截断...) InvalidS3ObjectException (client): 无法从 S3 获取对象元数据。检查对象键、区域和/或访问权限。 - {"__type":"InvalidS3ObjectException","Code":"InvalidS3ObjectException.

下面是我的代码。

$credentials = new Credentials('xxxxxxxxx', 'xxxxxxxxxxxx');

$rekognitionClient = RekognitionClient::factory(array(
            'region' => "us-east-1",
            'version' => 'latest',
            'credentials' => $credentials,
            'http' => [ 'verify' => false ]
 ));

$result = $rekognitionClient->searchFacesByImage([
                    'CollectionId' => ''.$collection_id.'', // REQUIRED
                    'FaceMatchThreshold' => 25.0,
                    'Image' => [ // REQUIRED
                            'S3Object' => [
                                'Bucket' => 'facetracking',
                                'Name' => 'test.jpg',
                                'Key' => 'test.jpg',
                                'Version' => 'latest',
                            ],
                    ], 'MaxFaces' => 2,
                ]);

当我上传到 S3 时,从 S3 获取一个对象并在 Rekognition 中创建一个集合 一切正常,但我无法在 Laravel PHP 中执行 searchFacesByImage(来源:S3)和 startFaceSearch。

在 S3 中设置存储桶策略后也很累,如下所示。

{
    "Version": "2012-10-17",
    "Id": "PolicyXXXXXX",
    "Statement": [
        {
            "Sid": "StmtXXXXXX",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXX:root"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:GetObjectTorrent",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::<MyBucketName>/*",
                "arn:aws:s3:::<MyBucketName>"
            ]
        }
    ]
}

【问题讨论】:

    标签: php laravel amazon-web-services laravel-5 amazon-s3


    【解决方案1】:

    弹出此错误的另一个奇怪原因是您的存储桶权限可能过于严格。

    我在允许对此特定存储桶 ARN 执行所有操作时收到此错误。当我将 ARN 替换为 *时,它运行良好。

    真的很奇怪,我不确定为什么会这样,但希望它可以帮助某人。

    【讨论】:

    • 我猜你的政策不正确。您通过将 ARN 更改为 * 来修复它,这只是隐藏了问题(并使您的政策过于宽松)。
    【解决方案2】:

    通过删除版本解决了问题。因为我的存储桶版本控制已禁用。 'Version' =&gt; '&lt;String&gt;', // REQUIRED Only if Bucket versioning enabled

    版本

    Version 仅必填 如果桶启用了版本控制,您可以指定对象版本。

    必填:否

    https://github.com/aws/aws-sdk-php-laravel/issues/139

    $result = $rekognitionClient->searchFacesByImage([
                        'CollectionId' => ''.$collection_id.'', // REQUIRED
                        'FaceMatchThreshold' => 25.0,
                        'Image' => [ // REQUIRED
                                'S3Object' => [
                                    'Bucket' => 'facetracking',
                                    'Name' => 'test.jpg',
                                    'Key' => 'test.jpg',
                                ],
                        ], 'MaxFaces' => 2,
                    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多