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 の安全を確保するために、次の手順を実行することをお勧めします。

  • Amazon MWAA 実行ロール または Apache Airflow 接続 でアクセスできるものには、その環境に書き込むことができるユーザーもアクセスできると仮定して、DAG 書き込みアクセス権を持つチームや Amazon S3 /dags フォルダにファイルを追加できる個別のチームには、別々の環境を使用してください。

  • Amazon S3 DAG フォルダへの直接アクセスを提供しないでください。代わりに、CI/CD ツールを使用して Amazon S3 に DAG を書き込み、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 インサイトを使用して、DAG の 1 つが Apache Airflow ユーザー権限を変更するたびに CloudWatch メトリクスに通知を配信できます。

前提条件

このセクションの手順を完了するには、次のものが必要です。

Apache Airflow ユーザー権限が変更された際の通知を設定するには
  1. 5 つの Amazon MWAA 環境ロググループ (DAGProcessingSchedulerTaskWebServer および Worker) に対して次の CloudWatch Logs Insights クエリ文字列を実行する Lambda 関数を作成 します。

    fields @log, @timestamp, @message | filter @message like "add-role" | stats count() by @log
  2. 前のステップで作成した Lambda 関数をルールのターゲットとして、スケジュールに従って実行される EventBridge ルールを作成 します。cron または rate 式を使用して、定期的に実行されるようにスケジュールを構成します。