web-dev-qa-db-ja.com

S3からオブジェクトメタデータを取得できません。 aws Rekognitionでオブジェクトキー、リージョン、アクセス許可を確認してください

import boto3

if __name__ == "__main__":

    bucket='MyBucketName'
sourceFile='pic1.jpg'
targetFile='pic2.jpg'

client=boto3.client('rekognition','us-east-1')

response=client.compare_faces(SimilarityThreshold=70,
                              SourceImage={'S3Object':{'Bucket':bucket,'Name':sourceFile}},
                              TargetImage={'S3Object':{'Bucket':bucket,'Name':targetFile}})

for faceMatch in response['FaceMatches']:
    position = faceMatch['Face']['BoundingBox']
    confidence = str(faceMatch['Face']['Confidence'])
    print('The face at ' +
           str(position['Left']) + ' ' +
           str(position['Top']) +
           ' matches with ' + confidence + '% confidence')

バケットにある2つの画像を比較しようとしていますが、どの地域を選択しても、常に次のエラーが発生します。-

botocore.errorfactory.InvalidS3ObjectException:CompareFaces操作の呼び出し中にエラーが発生しました(InvalidS3ObjectException):S3からオブジェクトメタデータを取得できません。オブジェクトキー、リージョン、アクセス許可を確認してください。

私のバケットのリージョンはus-east-1であり、コードで同じように構成しました。私は何が間違っているのですか?

私も同じ問題を抱えていました。それを修正するために私がしたことは、バケットとフォルダーを再配置することでした。画像がバケット内のフォルダではなく、バケット内に直接あることを確認してください。また、画像の名前が正しいこと、およびすべてが適切であることを再確認してください。

5
Sean Li

そのaccess_keyとsecret_keyで十分な権限を持っていないようです!資格情報がIAMユーザーのものである場合は、IAMユーザーがRekognitioncompare_faces読み取り操作とs3読み取り操作を実行する権限を持っていることを確認してください。また、s3ソースキーとターゲットオブジェクトキーが正しいかどうかも確認してください。また、永続的なアクセスキーを使用するのではなく、必要な権限を持つロールを作成し、そのロールが一時的なセキュリティ資格情報を要求するようにすることをお勧めします。

1
Manoj Acharya

AWS環境変数の設定を確認してくださいAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYコンパイル前のスクリプトで

1

また、この問題が発生し、IAMロールのリソースとしてバケット名が含まれていることに気付きました。最後にスラッシュとワイルドカードを追加する必要がありました。 「リソース」に変更しました:「arn:aws:s3 :::/*」

0
Jeffrey DeMuth