1 분 소요

 안녕하세요 마개입니다.
Python에서 AWS의 Athena를 이용할 때 발생한 에러를 다뤄보고자 합니다.


99C825335A071CCB21


에러 파악

 Python에서 Athena를 이용하려고 할 때 AccessDeniedException 에러가 발생할 수 있습니다. 정확히는 아래 코드를 보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
import boto3

client = boto3.client('athena')
response = client.start_query_execution(
    QueryString='쿼리',
    QueryExecutionContext={
        'Database': 'DB명'
    },
    ResultConfiguration={
        'OutputLocation': 'Athena 쿼리 결과 스토리지 위치'
    }
)
...(생략)...


 코드를 보면 Python에서 Athena 접근을 하기 위한 가장 간단한 사용 방법입니다. 그러나 이 부분을 실행하면 아래와 같은 에러 메시지가 발생할 수 있습니다.


1
2
3
4
5
6
7
8
9
Traceback (most recent call last):
  File "/home/ksh/pythonProject/athena_test.py", line 38, in <module>
    response = client.start_query_execution(
  File "/home/ksh/pythonProject/venv/lib/python3.8/site-packages/botocore/client.py", line 386, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/ksh/pythonProject/venv/lib/python3.8/site-packages/botocore/client.py", line 705, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the StartQueryExecution operation: User: arn:aws:iam::XXXXXXXX:user/trace is not authorized to perform: athena:StartQueryExecution on resource: arn:aws:athena:ap-northeast-2:XXXXXXXX:workgroup/primary because no identity-based policy allows the athena:StartQueryExecution action


 에러 메시지를 보면 IAM 유저 (trace)가 Athena의 StartQueryExecution을 사용할 권한이 없다는 뜻입니다. 어찌 된 것인지 찾아보겠습니다.


원인 분석 및 해결

AWS Console에 접속하여 IAM으로 이동합니다.


IAM

좌측 메뉴에서 Users로 이동합니다.


Users


 Users에 유저가 여러 개라서 그중에 어떤 것인지 모르겠다면 위의 에러 메시지를 다시 살펴보면 arn:aws:iam::XXXXXXX:user/... 부분이 있습니다. 이 뒤에 있는 것이 해당 유저명입니다. 해당 유저를 찾았다면 해당 유저를 클릭합니다.


Permissions

 Permissions 탭으로 넘어와서 확인을 해보면 위와 같은 경우 S3에 대한 Access만 가능한 상태입니다. Add permissions 버튼을 클릭하여 Athena에 대한 Access도 추가합니다.


Add

 Add permissions 버튼을 클릭하면 Add user to group, Copy permissions from existing user, Attach existing policies directly가 있는데 마지막 거를 선택하고 검색에 athena를 검색합니다. 검색 결과 중에 AmazonAthenaFullAccess를 선택하고 하단에 Next:Review 버튼을 클릭 후 내용을 확인 후 Add permissions 버튼을 클릭하여 마무리합니다.


Final

 그러면 위와 같이 Athena 권한이 생성되었는지 확인합니다.
(예제를 위해 FullAccess 권한으로 넣었지만 필요한 것들만 선택하여 Access 권한을 다루는 것이 더 좋습니다.) 완료가 되었으면 파이썬에서 다시 실행하여 이상 없이 진행되는지 확인합니다.