

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon MWAA 的安全最佳實務
<a name="security-best-practices"></a>

Amazon MWAA 提供許多安全功能，供您在開發和實作自己的安全政策時考慮。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。
+ 使用最低許可政策。僅將許可授予使用者執行任務所需的資源或動作。
+ 使用 AWS CloudTrail 來監控您帳戶中的使用者活動。
+ 確保 Amazon S3 儲存貯體政策和物件 ACLs 將許可授予相關聯 Amazon MWAA 環境的使用者，以將物件放入儲存貯體。這可確保具有將工作流程新增至儲存貯體之許可的使用者也具有在 Airflow 中執行工作流程的許可。
+ 使用與 Amazon MWAA 環境相關聯的 Amazon S3 儲存貯體。Amazon S3 儲存貯體可以是任何名稱。請勿將其他物件存放在儲存貯體中，或使用儲存貯體搭配其他服務。

## Apache Airflow 中的安全最佳實務
<a name="security-best-practices-for-airflow"></a>

Apache Airflow 不是多租戶。雖然有[存取控制措施](https://airflow.apache.org/docs/apache-airflow/2.0.2/security/access-control.html)可將某些功能限制為 [Amazon MWAA 實作](access-policies.md#web-ui-access)的特定使用者，但 DAG 建立者確實能夠撰寫 DAGs，以變更 Apache Airflow 使用者權限並與基礎中繼資料庫互動。

我們建議在 Amazon MWAA 上使用 Apache Airflow 時執行下列步驟，以確保您環境的中繼資料庫和 DAGs是安全的。
+ 假設 Amazon [MWAA 執行角色](mwaa-create-role.md)或 [Apache Airflow ](https://airflow.apache.org/docs/apache-airflow/2.0.2/howto/connection.html)連線可存取的任何內容，也可以讓可寫入環境的使用者存取具有 DAG 寫入存取權的個別團隊，或能夠將檔案新增至 Amazon S3 `/dags` 資料夾。
+ 請勿直接提供 Amazon S3 DAGs 資料夾存取。反之，請使用 CI/CD 工具將 DAGs 寫入 Amazon S3，並執行驗證步驟，確保 DAG 程式碼符合團隊的安全準則。
+ 防止使用者存取您環境的 Amazon S3 儲存貯體。反之，請使用 DAG 工廠，以 YAML、JSON 或其他存放在與存放 DAGs Amazon MWAA Amazon S3 儲存貯體不同位置的定義檔案為基礎產生 DAGs。
+ 在 [Secrets Manager](connections-secrets-manager.md) 中存放秘密。雖然這不會阻止可以寫入 DAGs的使用者讀取秘密，但會阻止他們修改您環境使用的秘密。

### 偵測 Apache Airflow 使用者權限的變更
<a name="detecting-user-privilege-changes"></a>

您可以使用 CloudWatch Logs Insights 來偵測 DAGs 變更 Apache Airflow 使用者權限的發生情況。若要這樣做，您可以在其中一個 DAGs 變更 Apache Airflow 使用者權限時，使用 EventBridge 排程規則、Lambda 函數和 CloudWatch Logs Insights 來傳送通知至 CloudWatch 指標。

#### 先決條件
<a name="prerequisites"></a>

若要完成下列步驟，您將需要下列項目：
+ 在日誌層級啟用所有 Apache Airflow `INFO`日誌類型的 Amazon MWAA 環境。如需詳細資訊，請參閱 [在 Amazon CloudWatch 中存取 Airflow 日誌](monitoring-airflow.md)。

**設定 Apache Airflow 使用者權限變更的通知**

1. [建立 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)，針對五個 Amazon MWAA `Scheduler`環境日誌群組 (`DAGProcessing`、、`Task`、 `WebServer`和 ) 執行下列 CloudWatch Logs Insights 查詢字串`Worker`。

   ```
   fields @log, @timestamp, @message | filter @message like "add-role" | stats count() by @log
   ```

1. [建立依排程執行的 EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html)，並使用您在上一個步驟中建立的 Lambda 函數做為規則的目標。使用 Cron 或 Rate 表達式設定排程，以定期執行。