簡體   English   中英

ClientError:調用HeadObject操作時發生錯誤(403):嘗試上傳視頻時被禁止

[英]ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden when trying to upload video

我正在嘗試從我帳戶的 S3 存儲桶將視頻上傳到 Vimeo,但出現錯誤:

[ERROR] ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

我已經使用 SAM cli 設置了 CloudFormation 堆棧。 谷歌搜索后似乎我的策略沒有足夠的權限,但我不確定如何在 YAML 文件中指定權限集。

這是相關代碼和錯誤代碼

                # Get the URI for the S3 Bucket
                s3_bucket = rec["s3"]["bucket"]["name"]
                s3 = boto3.client("s3")

                with tempfile.NamedTemporaryFile() as file_obj:
                    s3.download_fileobj(s3_bucket, s3_key, file_obj)
                    vimeo_replace_file(vimeo_id, file_obj)

錯誤

[ERROR] ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
Traceback (most recent call last):
  File "/var/task/app.py", line 61, in lambda_handler
    s3.download_fileobj(s3_bucket, s3_key, file_obj)
  File "/var/task/boto3/s3/inject.py", line 795, in download_fileobj
    return future.result()
  File "/var/task/s3transfer/futures.py", line 103, in result
    return self._coordinator.result()
  File "/var/task/s3transfer/futures.py", line 266, in result
    raise self._exception
  File "/var/task/s3transfer/tasks.py", line 269, in _main
    self._submit(transfer_future=transfer_future, **kwargs)
  File "/var/task/s3transfer/download.py", line 354, in _submit
    response = client.head_object(
  File "/var/task/botocore/client.py", line 508, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/task/botocore/client.py", line 915, in _make_api_call
    raise error_class(parsed_response, operation_name)
[ERROR] ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden Traceback (most recent call last):   File "/var/task/app.py", line 61, in lambda_handler     s3.download_fileobj(s3_bucket, s3_key, file_obj)   File "/var/task/boto3/s3/inject.py", line 795, in download_fileobj     return future.result()   File "/var/task/s3transfer/futures.py", line 103, in result     return self._coordinator.result()   File "/var/task/s3transfer/futures.py", line 266, in result     raise self._exception   File "/var/task/s3transfer/tasks.py", line 269, in _main     self._submit(transfer_future=transfer_future, **kwargs)   File "/var/task/s3transfer/download.py", line 354, in _submit     response = client.head_object(   File "/var/task/botocore/client.py", line 508, in _api_call     return self._make_api_call(operation_name, kwargs)   File "/var/task/botocore/client.py", line 915, in _make_api_call     raise error_class(parsed_response, operation_name)

模板.YAML

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  vimeo-replace-file
  Sample SAM Template for vimeo-replace-file
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 60

Resources:
  VimeoReplaceFile:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: core/
      Handler: app.lambda_handler
      Runtime: python3.9
      MemorySize: 6114
      Architectures:
        - x86_64
      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket: !Ref SrcBucket
            Events: s3:ObjectCreated:*

  SrcBucket:
    Type: AWS::S3::Bucket

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  VimeoReplaceFileFunction:
    Description: "VimeoReplaceFile Lambda Function ARN"
    Value: !GetAtt VimeoReplaceFile.Arn

我找到了答案,如果這對任何人都有幫助的話。 基本上,我需要將該策略添加到 YAML 文件中。

所以,政策是:

Policies:
        - AmazonS3FullAccess

模板.YAML

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  vimeo-replace-file
  Sample SAM Template for vimeo-replace-file
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 60

Resources:
  VimeoReplaceFile:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: core/
      Handler: app.lambda_handler
      Runtime: python3.9
      MemorySize: 6114
        - x86_64
      Policies:
        - AmazonS3FullAccess
      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket: !Ref SrcBucket
            Events: s3:ObjectCreated:*


  SrcBucket:
    Type: AWS::S3::Bucket

Outputs:
  VimeoReplaceFileFunction:
    Description: "VimeoReplaceFile Lambda Function ARN"
    Value: !GetAtt VimeoReplaceFile.Arn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM