View a markdown version of this page

访问审计日志 AWS CloudTrail - Amazon Managed Workflows for Apache Airflow

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

访问审计日志 AWS CloudTrail

AWS CloudTrail 在您创建 AWS 账户 时已在您的上启用。 CloudTrail 记录 IAM 实体或 AWS 服务(例如适用于 Apache Airflow 的亚马逊托管工作流程)进行的活动,该活动被记录为 CloudTrail 事件。您可以在 CloudTrail 控制台中查看、搜索和下载过去 90 天的事件历史记录。 CloudTrail 捕获亚马逊 MWAA 控制台上的所有事件以及对亚马逊 MWAA API 的所有调用。但不会捕获只读操作(例如 GetEnvironmentPublishMetrics 动作)。本页介绍 CloudTrail 如何使用监控亚马逊 MWAA 的事件。

在中创建跟踪 CloudTrail

您需要创建跟踪才能访问您的持续事件记录 AWS 账户,包括亚马逊 MWAA 的事件。跟踪可以 CloudTrail 将日志文件传输到 Amazon S3 存储桶。如果您不创建跟踪,仍可以在 CloudTrail 控制台中访问可用的事件历史记录。例如,使用收集的信息 CloudTrail,您可以确定向亚马逊 MWAA 发出的请求、发出请求的 IP 地址、谁提出请求、何时提出请求以及其他详细信息。要了解更多信息,请参阅为您的 AWS 账户创建跟踪

记录数据平面事件

以下亚马逊 MWAA API 操作是数据平面事件:InvokeRestApiCreateWebLoginToken、和。CreateCliToken与管理事件不同,默认情况下 AWS CloudTrail 不记录数据事件,也不会出现在 CloudTrail 事件历史记录中。您必须配置明确包含数据事件的跟踪。将收取额外费用。有关更多信息,请参阅《 AWS CloudTrail 用户指南》中的记录数据事件。

记录数据平面事件
  1. 打开控制 CloudTrail 台。

  2. 在导航窗格中,选择跟踪,然后选择创建跟踪

  3. 输入跟踪名称并为日志文件配置 Amazon S3 存储桶。

  4. 选择日志事件页面上,选择数据事件

  5. 数据事件类型下,选择托管 Apache Airflow

  6. 查看您的设置并选择创建跟踪

跟踪激活后,将在大约 15 分钟内将InvokeRestApiCreateWebLoginToken、和等数据平面事件 CloudTrail 传送CreateCliToken到您的 Amazon S3 存储桶。如果您配置了 Amazon CloudWatch Logs,请使用以下筛选模式来查找这些事件:

{ ($.eventName = "InvokeRestApi") || ($.eventName = "CreateWebLoginToken") || ($.eventName = "CreateCliToken") }
未记录响应负载

CloudTrail 编辑日志条目中的RestApiResponse字段。 CloudTrail 记录呼叫及其状态码,但不记录响应负载。

使用事件历史记录访问 CloudTrail 事件

您可以通过查看事件历史记录,在 CloudTrail 控制台中对过去 90 天内的操作和安全事件进行故障排除。例如,您可以按区域访问与创建、修改或删除您的 AWS 账户 资源(例如 IAM 用户或其他 AWS 资源)相关的事件。要了解更多信息,请参阅使用 CloudTrail 事件历史记录访问事件

  1. 打开 CloudTrail 控制台

  2. 选择事件历史记录

  3. 选择要查看的事件,然后选择比较事件详细信息

CreateEnvironment 的示例跟踪

跟踪记录是一种配置,可用于将事件作为日志文件传送到您指定的 Simple Storage Service(Amazon S3)存储桶。

CloudTrail 日志文件包含一个或多个日志条目。事件代表来自任何来源的单个请求,并包含有关所请求操作的信息,例如操作的日期和时间或请求参数。 CloudTrail 日志文件不是公共 API 调用的有序堆栈跟踪,也未按任何特定顺序列出。以下示例是由于缺乏权 限而被拒绝的 CreateEnvironment 操作的日志条目。为了保护隐私,AirflowConfigurationOptions 中的值已被删除。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "00123456ABC7DEF8HIJK", "arn": "arn:aws:sts::012345678901:assumed-role/root/myuser", "accountId": "012345678901", "accessKeyId": "", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "00123456ABC7DEF8HIJK", "arn": "arn:aws:iam::012345678901:role/user", "accountId": "012345678901", "userName": "user" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2020-10-07T15:51:52Z" } } }, "eventTime": "2020-10-07T15:52:58Z", "eventSource": "airflow.amazonaws.com", "eventName": "CreateEnvironment", "awsRegion": "us-west-2", "sourceIPAddress": "205.251.233.178", "userAgent": "PostmanRuntime/7.26.5", "errorCode": "AccessDenied", "requestParameters": { "SourceBucketArn": "arn:aws:s3:::my-bucket", "ExecutionRoleArn": "arn:aws:iam::012345678901:role/AirflowTaskRole", "AirflowConfigurationOptions": "***", "DagS3Path": "sample_dag.py", "NetworkConfiguration": { "SecurityGroupIds": [ "sg-01234567890123456" ], "SubnetIds": [ "subnet-01234567890123456", "subnet-65432112345665431" ] }, "Name": "test-cloudtrail" }, "responseElements": { "message": "Access denied." }, "requestID": "RequestID", "eventID": "EventID", "readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": "012345678901" }

InvokeRestApi 日志条目示例

以下是该InvokeRestApi操作的完整日志条目示例。 CloudTrail 编辑该RestApiResponse字段。

在生产环境中使用临时证书

此示例显示了代入角色的临时证书,这是推荐的方法。对于生产工作负载,使用或 AWS Security Token Service (AWS STS) 中的临时证书,而不是长期访问密钥。

{ "eventVersion": "1.09", "userIdentity": { "type": "AssumedRole", "principalId": "00123456ABC7DEF8HIJK:MySession", "arn": "arn:aws:sts::012345678901:assumed-role/MyRole/MySession", "accountId": "012345678901", "accessKeyId": "ASIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "00123456ABC7DEF8HIJK", "arn": "arn:aws:iam::012345678901:role/MyRole", "accountId": "012345678901", "userName": "MyRole" }, "attributes": { "creationDate": "2024-01-20T12:00:00Z", "mfaAuthenticated": "false" } } }, "eventTime": "2024-01-20T12:15:00Z", "eventSource": "airflow.amazonaws.com", "eventName": "InvokeRestApi", "awsRegion": "us-west-2", "sourceIPAddress": "203.0.113.10", "userAgent": "Boto3/1.28.0 Python/3.11.0", "requestParameters": { "Name": "MyAirflowEnvironment", "Path": "/dags", "Method": "GET" }, "responseElements": { "RestApiStatusCode": 200, "RestApiResponse": "***" }, "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "readOnly": false, "resources": [ { "accountId": "012345678901", "type": "AWS::MWAA::Environment", "ARN": "arn:aws:airflow:us-west-2:012345678901:environment/MyAirflowEnvironment" } ], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "012345678901", "eventCategory": "Data" }

接下来做什么?