python boto3:AWS Rekognition 无法访问 S3 存储桶

python boto3: AWS Rekognition is unable to access S3 bucket

我正在尝试将图像上传到 S3,然后让 AWS Rekognition 从 S3 获取它以进行人脸检测,但 Rekognition 无法做到这一点。

这是我的代码 - 上传然后检测:

import boto3

s3 = boto3.client('s3')
s3.put_object(
    ACL='public-read',
    Body=open('/Users/1111/Desktop/kitten800300/kitten.jpeg', 'rb'),
    Bucket='mobo2apps',
    Key='kitten_img.jpeg'
)

rekognition = boto3.client('rekognition')

response = rekognition.detect_faces(
    Image={
        'S3Object': {
            'Bucket': 'mobo2apps',
            'Name': 'kitten_img.jpeg',
        }
    }

)

这会产生错误:

Unable to get object metadata from S3. Check object key, region and/or access permissions.

这是为什么?

关于权限:我获得了 AWS root 访问密钥的授权,因此我可以完全访问所有资源。

您需要稍等片刻才能完成图片上传。

代码看起来 运行 很流畅,因此您的 jpeg 文件开始上传,甚至在上传完成之前,Rekognition 就开始检测图像中的人脸。由于代码运行时上传尚未完成,因此无法从您的 S3 中找到该对象。稍等一下。

以下是您可以做的几件事:

  1. 确保S3 bucket的区域与Recognition相同。否则,它不会工作。 S3 服务是全球性的,但每个存储桶都是在特定区域创建的。 AWS 客户应使用同一区域。
  2. 确保用户或角色的访问密钥具有资源的正确权限集。
  3. 确保文件确实已上传。
  4. 确保没有应用撤销访问权限的存储桶策略。
  5. 您可以在 S3 存储桶上启用日志记录以查看错误。
  6. 确保存储桶没有版本控制。如果版本化,请指定对象版本。
  7. 确保对象定义了正确的 ACL 集。
  8. 如果对象已加密,请确保您有权使用该 KMS 密钥解密对象。