

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon MWAA 的安全最佳实践
最佳实践

Amazon MWA3 提供了在您开发和实施自己的安全策略时需要考虑的大量安全特征。以下最佳实践是一般指导原则，并不代表完整安全解决方案。这些最佳实践可能不适合环境或不满足环境要求，请将其视为有用的考虑因素而不是惯例。
+ 使用最低许可的权限策略。仅向用户执行任务所需的资源或操作授予权限。
+  AWS CloudTrail 用于监控您账户中的用户活动。
+ 确保 Amazon S3 存储桶策略和对象向关联的 Amazon MWAA 环境中的用户 ACLs 授予将对象放入存储桶的权限。这样可以确保有权向存储桶添加工作流程的用户也拥有在 Airflow 中运行工作流程的权限。
+ 使用与 Amazon MWAA 环境关联的 Amazon S3 存储桶。Amazon S3 存储桶可以是任何名称。请勿在存储桶中存储其他对象，也不要将该存储桶与其他服务一起使用。

## Apache Airflow 中的安全最佳实践


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 用户权限并与底层元数据库交互的内容。

在亚马逊 MWAA 上使用 Apache Airflow 时，我们建议您执行以下步骤，以确保您的环境的元数据库是安全的。 DAGs 
+ 为具有 DAG 写入权限或能够将文件添加到 Amazon S3 `/dags` 文件夹的不同团队使用不同的环境，前提是可以写入环境的用户也可以访问 [Amazon MWAA 执行角色](mwaa-create-role.md)或 [Apache Airflow 连接](https://airflow.apache.org/docs/apache-airflow/2.0.2/howto/connection.html)访问的任何内容。
+ 请勿提供直接的 Amazon S3 DAGs 文件夹访问权限。取而代之的是，使用 CI/CD 工具写入 DAGs Amazon S3，并通过验证步骤确保 DAG 代码符合团队的安全准则。
+ 阻止用户访问环境的 Amazon S3 存储桶。取而代之的是，使用 DAGs 基于 YAML、JSON 或其他定义文件生成的 DAG 工厂，该文件存储在与您存储的 Amazon MWAA Amazon S3 存储桶不同的位置。 DAGs
+ 在 [Secrets Manager](connections-secrets-manager.md) 中管理密钥 虽然这不会阻止可以写入 DAGs 的用户读取密钥，但它会阻止他们修改您的环境使用的密钥。

### 检测 Apache Airflow 用户权限的更改


你可以使用 CloudWatch Logs Insights 来检测 Apache Airflow 用户权限 DAGs 发生更改的情况。为此，只要您 DAGs 更改了 Apache Airflow 用户权限，您就可以使用 EventBridge 计划规则、Lambda 函数和 L CloudWatch ogs Insights 向 CloudWatch 指标发送通知。

#### 先决条件


要完成本节中的步骤，您需要以下满足以下条件：
+ Amazon MWAA 环境启用 `INFO` 日志级别的所有 Apache Airflow 日志类型。有关更多信息，请参阅[访问 Amazon 中的 Airflow 日志 CloudWatch](monitoring-airflow.md)。

**要配置有关 Apache Airflow 用户权限更改的通知，请执行以下操作**

1. [创建一个 Lambda 函数，该函数](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)针对五个 Amazon MWAA 环境 CloudWatch 日志组（`DAGProcessing`、、、`Scheduler`和）运行以下 Logs Insights 查询字符串。`Task` `WebServer` `Worker`

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

1. 使用您在@@ [上一步中创建的 Lambda 函数作为 EventBridge 规则的目标，创建按计划运行](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html)的规则。使用 cron 或 rate 表达式配置计划程序，使其定期运行。