Lambda에서 S3에서 파일을 검색하려고 하면 botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied가 되었을 때의 대응 방법

AWS도 Python도 꼭 응부 초보자로 모르겠습니다.
  • 환경
  • OS : Ubuntu Server 18.04 LTS
  • Python 3.6


  • 이벤트 : Lambda 함수에서 Boto3을 사용하여 S3에있는 파일을 얻으려고하면 화가났다.



    lambda_function.py
    def get_file_from_s3(file_name: str):
        """S3よりファイルを取得する."""
        s3 = boto3.client('s3')
        try:
            file = s3.get_object(Bucket = BUCKET_NAME, Key = 'irai.txt')
        except botocore.exceptions.ClientError as e:
            if e.response['Error']['Code'] == "404":
                logger.error("The object does not exist.")
            else:
                raise e
    

    CloudWatch 로그
    get_file_from_s3('irai.txt')
    File "/var/task/lambda_function.py", line 91, in get_file_from_s3
    file = s3.get_object(Bucket = BUCKET_NAME, Key = 'irai.txt')
    File "/var/runtime/botocore/client.py", line 314, in _api_call
    return self._make_api_call(operation_name, kwargs)
    File "/var/runtime/botocore/client.py", line 612, in _make_api_call
    raise error_class(parsed_response, operation_name)
    botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
    

    원인 : Lambda에 설정된 IAM 역할에 S3에 대한 액세스 권한이 없기 때문에



    Lambda는 기능 등록시 해당 기능에서 사용할 IAM 역할을 선택할 수 있다고 생각하므로 S3 액세스 권한이 있는 역할을 선택하십시오. - 스택 오버플로

    대응 : IAM 역할에 S3에 대한 액세스 권한 설정



    참고 : IAM Role 및 Bucket Policy에서 Amazon S3에 대한 액세스 제어 수행 - yoshidashingo
  • 콘솔에서 IAM을 선택합니다.

  • 역할 목록에서 Lambda에서 사용하는 IAM 역할 선택

  • [Attach policies] 버튼을 누릅니다.
  • [AmazomS3FullAccess]를 선택하고 [Attach policy] 버튼으로 추가합니다.

  • 좋은 웹페이지 즐겨찾기