如何授予AWS Rekognition获取S3存储桶中对象的权限?

问题描述 投票:0回答:1

我正在尝试在云中创建一个使用 S3、Lambda 和 Rekognition 等的应用程序。

我现在遇到的问题是运行 Lambda 时出现以下错误:

An error occurred (InvalidS3ObjectException) when calling the SearchUsersByImage operation: Unable to get object metadata from S3. Check object key, region and/or access permissions.

我尝试谷歌搜索,并询问chatgpt,但它仍然不起作用。

这些服务位于同一区域 (eu-central-1),并使用 cloudformation (SAM) 创建。

我在 lambda 函数中添加了一个带有策略的角色,以便允许它与 S3 通信,但它仍然不起作用。这就是我的角色(我缩短了一点):

  ProcessEmployeeImageExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: RekognitionSearchUserByImagePolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action: rekognition:SearchUsersByImage
                Resource: !GetAtt EmployeeCollection.Arn
        - PolicyName: LambdaBasicExecutionPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - sqs:ChangeMessageVisibility
                  - sqs:ChangeMessageVisibilityBatch
                  - sqs:DeleteMessage
                  - sqs:DeleteMessageBatch
                  - sqs:GetQueueAttributes
                  - sqs:ReceiveMessage
                Resource: !GetAtt ImagesQueue.Arn
        - PolicyName: S3ReadPolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action: s3:GetObject
                Resource: !GetAtt EmployeesArrivedImagesBucket.Arn

这就是我的 Lambda 资源的样子:

  ProcessEmployeeImageFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Zip
      CodeUri: process_employee_image/
      Handler: app.lambda_handler
      Runtime: python3.12
      Architectures:
        - x86_64
      Role: !GetAtt ProcessEmployeeImageExecutionRole.Arn

查看 lambda 函数的仪表板时,它正确显示我的 lambda 可以与 S3 通信,但我仍然收到错误。

我还使用 AWS cli 来使用 Rekognition。使用 cli 一切正常,所以它与我上传的图像没有任何关系。

所以我认为这与我的 lambda 或我的 rekognition 集合不允许与我的 s3 存储桶对话有关?

有人知道如何解决这个问题吗?

amazon-web-services amazon-s3 aws-lambda amazon-iam amazon-rekognition
1个回答
0
投票

遵循使用这些服务的 PAM 示例。事实上,它展示了这个用例:

React 应用程序 -> API 网关 -> Lambda 函数 -> 各种 AWS 服务。

参见:

enter image description here

浏览此示例,您将了解如何构建可以成功调用这些 AWS 服务的 LAMBDA 函数。您可以在此处的 AWS COde LIb 中找到此内容:

https://docs.aws.amazon.com/code-library/latest/ug/dynamodb_example_cross_PAM_section.html

© www.soinside.com 2019 - 2024. All rights reserved.