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 中找到该对象。稍等一下。
以下是您可以做的几件事:
- 确保S3 bucket的区域与Recognition相同。否则,它不会工作。 S3 服务是全球性的,但每个存储桶都是在特定区域创建的。 AWS 客户应使用同一区域。
- 确保用户或角色的访问密钥具有资源的正确权限集。
- 确保文件确实已上传。
- 确保没有应用撤销访问权限的存储桶策略。
- 您可以在 S3 存储桶上启用日志记录以查看错误。
- 确保存储桶没有版本控制。如果版本化,请指定对象版本。
- 确保对象定义了正确的 ACL 集。
- 如果对象已加密,请确保您有权使用该 KMS 密钥解密对象。
我正在尝试将图像上传到 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 中找到该对象。稍等一下。
以下是您可以做的几件事:
- 确保S3 bucket的区域与Recognition相同。否则,它不会工作。 S3 服务是全球性的,但每个存储桶都是在特定区域创建的。 AWS 客户应使用同一区域。
- 确保用户或角色的访问密钥具有资源的正确权限集。
- 确保文件确实已上传。
- 确保没有应用撤销访问权限的存储桶策略。
- 您可以在 S3 存储桶上启用日志记录以查看错误。
- 确保存储桶没有版本控制。如果版本化,请指定对象版本。
- 确保对象定义了正确的 ACL 集。
- 如果对象已加密,请确保您有权使用该 KMS 密钥解密对象。