Lambda에서 "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"라고 해서 빠졌다
개요
Lambda에서 S3의 특정 오브젝트를 다운로드하는 조작을 Python(boto3)에서 실행했지만, Access Denied라고 말해 실행할 수 없다.
실행 역할에 AmazonS3FullAccess를 부여하는 유사한 결과.
실행 내용
import json
import boto3
def lambda_handler(event, context):
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-hoge-hoge-bucket')
bucket.download_file('test.txt', 'fuga.txt')
Lambda에 표시되는 오류
{
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied",
"errorType": "ClientError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n bucket.download_file('test.txt', 'fuga.txt')\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 244, in bucket_download_file\n return self.meta.client.download_file(\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 170, in download_file\n return transfer.download_file(\n",
" File \"/var/runtime/boto3/s3/transfer.py\", line 307, in download_file\n future.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 106, in result\n return self._coordinator.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 265, in result\n raise self._exception\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 126, in __call__\n return self._execute_main(kwargs)\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 150, in _execute_main\n return_value = self._main(**kwargs)\n",
" File \"/var/runtime/s3transfer/download.py\", line 511, in _main\n response = client.get_object(\n",
" File \"/var/runtime/botocore/client.py\", line 357, in _api_call\n return self._make_api_call(operation_name, kwargs)\n",
" File \"/var/runtime/botocore/client.py\", line 676, in _make_api_call\n raise error_class(parsed_response, operation_name)\n"
]
}
원인
KMS에 의해 기본 암호화 가 유효한 버킷의 객체를 조작하고 있었다.
해결책
KMS에서, 암호화에 사용하고 있는 키의 키 유저에게 대상이 되는 Lambda의 실행 롤을 추가한다.
의도적으로 KMS에서의 암호화를 설정하고 있다고 깨닫습니다만, aws에 의해 자동적으로 암호화되는(RDS의 스냅샷등) 경우는 좀처럼 눈치채지 않네요.
Reference
이 문제에 관하여(Lambda에서 "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"라고 해서 빠졌다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmdsg/items/2c66a61f1710965d9d31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import json
import boto3
def lambda_handler(event, context):
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-hoge-hoge-bucket')
bucket.download_file('test.txt', 'fuga.txt')
Lambda에 표시되는 오류
{
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied",
"errorType": "ClientError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n bucket.download_file('test.txt', 'fuga.txt')\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 244, in bucket_download_file\n return self.meta.client.download_file(\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 170, in download_file\n return transfer.download_file(\n",
" File \"/var/runtime/boto3/s3/transfer.py\", line 307, in download_file\n future.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 106, in result\n return self._coordinator.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 265, in result\n raise self._exception\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 126, in __call__\n return self._execute_main(kwargs)\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 150, in _execute_main\n return_value = self._main(**kwargs)\n",
" File \"/var/runtime/s3transfer/download.py\", line 511, in _main\n response = client.get_object(\n",
" File \"/var/runtime/botocore/client.py\", line 357, in _api_call\n return self._make_api_call(operation_name, kwargs)\n",
" File \"/var/runtime/botocore/client.py\", line 676, in _make_api_call\n raise error_class(parsed_response, operation_name)\n"
]
}
원인
KMS에 의해 기본 암호화 가 유효한 버킷의 객체를 조작하고 있었다.
해결책
KMS에서, 암호화에 사용하고 있는 키의 키 유저에게 대상이 되는 Lambda의 실행 롤을 추가한다.
의도적으로 KMS에서의 암호화를 설정하고 있다고 깨닫습니다만, aws에 의해 자동적으로 암호화되는(RDS의 스냅샷등) 경우는 좀처럼 눈치채지 않네요.
Reference
이 문제에 관하여(Lambda에서 "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"라고 해서 빠졌다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmdsg/items/2c66a61f1710965d9d31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied",
"errorType": "ClientError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n bucket.download_file('test.txt', 'fuga.txt')\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 244, in bucket_download_file\n return self.meta.client.download_file(\n",
" File \"/var/runtime/boto3/s3/inject.py\", line 170, in download_file\n return transfer.download_file(\n",
" File \"/var/runtime/boto3/s3/transfer.py\", line 307, in download_file\n future.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 106, in result\n return self._coordinator.result()\n",
" File \"/var/runtime/s3transfer/futures.py\", line 265, in result\n raise self._exception\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 126, in __call__\n return self._execute_main(kwargs)\n",
" File \"/var/runtime/s3transfer/tasks.py\", line 150, in _execute_main\n return_value = self._main(**kwargs)\n",
" File \"/var/runtime/s3transfer/download.py\", line 511, in _main\n response = client.get_object(\n",
" File \"/var/runtime/botocore/client.py\", line 357, in _api_call\n return self._make_api_call(operation_name, kwargs)\n",
" File \"/var/runtime/botocore/client.py\", line 676, in _make_api_call\n raise error_class(parsed_response, operation_name)\n"
]
}
KMS에 의해 기본 암호화 가 유효한 버킷의 객체를 조작하고 있었다.
해결책
KMS에서, 암호화에 사용하고 있는 키의 키 유저에게 대상이 되는 Lambda의 실행 롤을 추가한다.
의도적으로 KMS에서의 암호화를 설정하고 있다고 깨닫습니다만, aws에 의해 자동적으로 암호화되는(RDS의 스냅샷등) 경우는 좀처럼 눈치채지 않네요.
Reference
이 문제에 관하여(Lambda에서 "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"라고 해서 빠졌다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmdsg/items/2c66a61f1710965d9d31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Lambda에서 "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"라고 해서 빠졌다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hmdsg/items/2c66a61f1710965d9d31텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)