Search

MWAA에서의 IAM 권한 관리

배경

이전에는 EKS 위에 Airflow를 배포해 사용했었다. 당시에는 Python boto3 클라이언트를 활용한 AWS API 호출이 거의 없어서 세부적인 IAM 권한 요구 사항에 크게 신경 쓰지 않았다.
그러나 MWAA 환경 + Athena를 주로 사용하는 곳으로 오면서 AWS 서비스를 자주 호출하게 되었고, MWAA에서는 IAM 권한을 명확하게 설정해줘야 정상적으로 작동한다는 것을 알게 되었다.

MWAA 환경에서의 실행 역할

MWAA는 AWS가 관리하는 컨테이너 환경에서 Airflow 작업을 수행한다. 각 MWAA 환경마다 하나의 IAM 역할(Execution Role)을 지정해주게 되는데, 이 역할의 권한으로 모든 DAG 작업들이 AWS 리소스를 호출하게 된다.
IAM 콘솔의 역할 > 사용 중인 MWAA 환경의 Execution Role > 권한 정책에서 필요한 권한을 추가할 수 있다.

IAM 권한 추가 사례

로컬 테스트에서 잘 작동하던 CloudTrail 로그 조회와 Athena 통계 조회 기능이 MWAA 환경에서는 정상적으로 동작하지 않았다. 확인 결과 MWAA의 Execution Role에 필요한 IAM 권한이 누락된게 원인이었다. 로컬에서는 AWS ACCESS KEY로 client 를 호출하니까 정상적으로 작동했던 것이다.
아래와 같이 두건의 실패를 권한 추가로 해결했다.
DAG에서 CloudTrail 로그를 조회할 때 boto3.client('cloudtrail').lookup_events() 호출이 실패
Athena 쿼리 실행 ID를 수집한 뒤 batch_get_query_execution 호출 시 빈 결과 반환
cloudtrail:LookupEvents , athena:batch_get_query_execution 권한을 추가해줌
{ "Effect": "Allow", "Action": ["cloudtrail:LookupEvents"], "Resource": ["*"] }
JSON
복사
{ "Effect": "Allow", "Action": ["athena:BatchGetQueryExecution"], "Resource": ["*"] }
JSON
복사

IAM 권한 변경 가이드

1.
MWAA 실행 역할 확인
AWS 콘솔 → MWAA → Environments에서 실행 역할 ARN 복사
2.
IAM 콘솔에서 역할 열기
AWS 콘솔 → IAM → Roles에서 복사한 역할 검색
3.
권한 추가
인라인 정책 생성 → JSON 탭에 정책 붙여넣고 추가
정책 연결 → 검색창에서 원하는 관리형 정책 이름을 검색해 선택하고 추가
4.
적용 확인
별도 재배포 없이 즉시 권한이 반영되며, DAG 재실행으로 정상 동작 확인

결론

MWAA 환경에서는 Execution Role 권한이 곧바로 Airflow 태스크의 AWS API 호출 권한이 된다
앞으로 MWAA에서 새로운 AWS API를 호출할 때 Execution Role에 필요한 권한이 포함되어 있는지 먼저 확인해야겠다