Amazon MWAA의 보안 모범 사례 - Amazon Managed Workflows for Apache Airflow

Amazon MWAA의 보안 모범 사례

Amazon MWAA는 사용자가 자체 보안 정책을 개발하고 구현할 때 고려해야 할 여러 보안 기능을 제공합니다. 다음 모범 사례는 일반적인 지침이며 완벽한 보안 솔루션을 나타내지는 않습니다. 이러한 모범 사례는 사용자의 환경에 적절하지 않거나 충분하지 않을 수 있으므로 규정이 아닌 참고용으로만 사용하십시오.

  • 최소 허용 권한 정책을 사용합니다. 사용자가 작업을 수행하는 데 필요한 리소스 또는 작업에만 권한을 부여합니다.

  • AWS CloudTrail을 사용하여 계정에서의 사용자 활동을 모니터링합니다.

  • Amazon S3 버킷 정책 및 객체 ACL에서 관련 Amazon MWAA 환경의 사용자에게 객체를 버킷에 넣을 수 있는 권한을 부여하도록 해야 합니다. 이렇게 하면 버킷에 워크플로를 추가할 권한이 있는 사용자가 Airflow에서 워크플로를 실행할 권한도 갖게 됩니다.

  • Amazon MWAA 환경과 연관된 Amazon S3 버킷을 사용합니다. Amazon S3 버킷은 어떤 이름이든 사용할 수 있습니다. 버킷에 다른 객체를 저장하거나 다른 서비스와 함께 버킷을 사용하지 마십시오.

Apache Airflow의 보안 모범 사례

Apache Airflow는 멀티테넌트가 아닙니다. Amazon MWAA에서 구현하고 있는 것처럼 일부 기능을 특정 사용자로 제한하는 액세스 제어 조치가 있지만, DAG 생성자는 Apache Airflow 사용자의 권한을 변경하고 기본 메타데이터베이스와 상호 작용할 수 있는 DAG를 작성할 수 능력을 갖고 있습니다.

Amazon MWAA에서 Apache Airflow를 사용할 때는 환경의 메타데이터베이스와 DAG의 안전을 확보하기 위해 다음 단계를 수행하는 것이 좋습니다.

  • DAG 쓰기 권한이 있거나 Amazon S3 /dags 폴더에 파일을 추가할 수 있는 기능이 있는 별도의 팀에는 각각 별도의 환경을 사용합니다. 단, Amazon MWAA 실행 역할 또는 Apache Airflow 연결을 통해 액세스할 수 있는 모든 항목에는 해당 환경에 쓸 수 있는 사용자도 액세스할 수 있음을 예상해야 합니다.

  • Amazon S3 DAG 폴더에 직접 액세스할 수 있는 권한을 제공하지 마십시오. 대신, Amazon S3에 DAG를 작성할 때는 CI/CD 도구를 사용하되, DAG 코드가 팀의 보안 지침을 충족하는지 확인하는 검증 단계와 함께 사용합니다.

  • 환경의 Amazon S3 버킷에 대한 사용자 액세스를 차단합니다. 대신, DAG를 저장하는 Amazon MWAA Amazon S3 버킷과는 별도의 위치에 저장된 YAML, JSON 또는 기타 정의 파일을 기반으로 DAG를 생성하는 DAG 팩토리를 사용합니다.

  • Secrets Manager에 암호를 저장합니다. 이렇게 해도 DAG를 작성할 수 있는 사용자가 암호를 읽는 것을 막을 수는 없지만, 사용자 환경에서 사용하는 암호를 수정하는 것은 막을 수 있습니다.

Apache Airflow 사용자 권한 변경 감지

CloudWatch Logs Insights를 사용하면 Apache Airflow 사용자 권한을 변경하는 DAG가 발생하는 것을 감지할 수 있습니다. 그러기 위해서는, EventBridge 예약 규칙, Lambda 함수 및 CloudWatch Logs Insights를 사용하여 DAG 중 하나가 Apache Airflow 사용자 권한을 변경할 때마다 CloudWatch 지표에 알림을 전송할 수 있습니다.

사전 조건

아래 단계를 완료하려면 다음 사항이 필요합니다.

Apache Airflow 사용자 권한 변경에 대한 알림을 구성하려면
  1. 5개의 Amazon MWAA 환경 로그 그룹(DAGProcessing, Scheduler, Task, WebServer, 및 Worker) 에 대해 다음과 같은 CloudWatch Logs Insights 쿼리 문자열을 실행하는 Lambda 함수를 생성합니다.

    fields @log, @timestamp, @message | filter @message like "add-role" | stats count() by @log
  2. 이전 단계에서 생성한 Lambda 함수를 규칙의 대상으로 사용하여 일정에 따라 실행되는 EventBridge 규칙을 생성합니다. Cron 또는 Rate 표현식을 이용해서 일정을 구성하여 정기적으로 실행합니다.