View a markdown version of this page

使用记录 AWS Lake Formation API 调用 AWS CloudTrail - AWS Lake Formation

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

使用记录 AWS Lake Formation API 调用 AWS CloudTrail

AWS Lake Formation 与 AWS CloudTrail一项服务集成,该服务提供用户、角色或 AWS 服务在 Lake Formation 中采取的操作的记录。 CloudTrail 将所有 Lake Formation API 调用捕获为事件。捕获的调用包括来自 Lake Formation 控制台的调用 AWS Command Line Interface、以及对 Lake Formation API 操作的代码调用。如果您创建了跟踪,则可以允许将 CloudTrail事件持续传输到 Amazon S3 存储桶,包括 Lake Formation 的事件。如果您未配置跟踪,您仍然可以在 CloudTrail 控制台的 “事件历史记录” 中查看最新的事件。使用收集的信息 CloudTrail,您可以确定向 Lake Formation 发出的请求、发出请求的 IP 地址、谁提出了请求、何时提出请求以及其他详细信息。

要了解更多信息 CloudTrail,请参阅AWS CloudTrail 用户指南

Lake Formation 信息位于 CloudTrail

CloudTrail 在创建新 AWS 账户时默认处于启用状态。当 Lake Formation 中发生活动时,该活动将与其他 AWS 服务 CloudTrail 事件一起记录在事件历史记录中。一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间以及请求参数等方面的信息。此外,每个事件或日志条目都包含有关生成请求的人员的信息。身份信息有助于您确定以下内容:

  • 请求是使用根证书还是 AWS Identity and Access Management (IAM) 用户凭证发出。

  • 请求是使用角色还是联合用户的临时安全凭证发出的。

  • 请求是否由其他 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素

您可以查看、搜索和下载您 AWS 账户的近期活动。有关更多信息,请参阅使用事件历史记录查看 CloudTrail 事件

要持续记录 AWS 账户中的事件,包括 Lake Formation 的事件,请创建跟踪。跟踪允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。在控制台创建跟踪时,跟踪默认应用于所有 AWS 区域。跟踪记录 AWS 分区中所有区域的事件,并将日志文件传送到您指定的 Amazon S3 存储桶。此外,您可以配置其他 AWS 服务(例如) Amazon Athena,以进一步分析 CloudTrail 日志中收集的事件数据并对其采取行动。 CloudTrail 还可以将日志文件传输到 Amazon CloudWatch 日志和 CloudWatch 事件。

有关更多信息,请参阅下列内容:

了解 Lake Formation 事件

所有 Lake Formation API 操作都由《开发者指南》记录 CloudTrail 并记录在《 AWS Lake Formation 开发者指南》中。例如,对PutDataLakeSettingsGrantPermissions、和RevokePermissions操作的调用会在 CloudTrail 日志文件中生成条目。

以下示例显示了该GrantPermissions操作 CloudTrail 的事件。该条目包括已授予权限的用户 (datalake_admin)、被授予权限的主体 (datalake_user1) 以及所授予的权限 (CREATE_TABLE)。该条目还显示授权失败,原因是 resource 参数中未指定目标数据库。

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZKE67KM3P775X74U2", "arn": "arn:aws:iam::111122223333:user/datalake_admin", "accountId": "111122223333", "accessKeyId": "...", "userName": "datalake_admin" }, "eventTime": "2021-02-06T00:43:21Z", "eventSource": "lakeformation.amazonaws.com", "eventName": "GrantPermissions", "awsRegion": "us-east-1", "sourceIPAddress": "72.21.198.65", "userAgent": "aws-cli/1.19.0 Python/3.6.12 Linux/4.9.230-0.1.ac.223.84.332.metal1.x86_64 botocore/1.20.0", "errorCode": "InvalidInputException", "errorMessage": "Resource must have one of the have either the catalog, table or database field populated.", "requestParameters": { "principal": { "dataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1" }, "resource": {}, "permissions": [ "CREATE_TABLE" ] }, "responseElements": null, "requestID": "b85e863f-e75d-4fc0-9ff0-97f943f706e7", "eventID": "8d2ccef0-55f3-42d3-9ede-3a6faedaa5c1", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }

下一个示例显示了该GetDataAccess操作的 CloudTrail 日志条目。主体不会直接调用此 API。相反,GetDataAccess每当主体或集成 AWS 服务请求临时凭证以访问注册到 Lake Formation 的数据湖位置的数据时,就会记录下来。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSAccount", "principalId": "AROAQGFTBBBGOBWV2EMZA:GlueJobRunnerSession", "accountId": "111122223333" }, "eventSource": "lakeformation.amazonaws.com", "eventName": "GetDataAccess", ... ... "additionalEventData": { "requesterService": "GLUE_JOB", "lakeFormationPrincipal": "arn:aws:iam::111122223333:role/ETL-Glue-Role", "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-G13T0Rmng2" }, ... }

使用 Lake Format CloudTrail ion 追踪数据访问权限

Lake Formation 会颁发临时的、限定范围的凭证来查询引擎(例如 Amazon EMR AWS Glue和),用于访问亚马逊 S3 中的表数据位置。Lake Formation 使用你在向 L ake Formation 注册数据位置时指定的 IAM 角色来出售这些证书。

CloudTrail 日志记录行为的变化(2026 年 2 月)

2026 年 2 月之前,当查询引擎s3:GetObject调用获取查询数据时, CloudTrail 日志会将 Lake Formation 注册 IAM 角色显示为委托人。

2026 年 2 月开始s3:GetObject呼叫 CloudTrail 日志还包括发起查询的 IAM 角色的 IAM 唯一标识符(以开头AROA)。此标识符对应于发起查询的 IAM 角色、Amazon EMR 任务或 AWS Glue ETL 任务。

跟踪从查询启动到 Amazon S3 的整个过程中的数据访问情况

每个s3:GetObject呼入 CloudTrail 对应一个lakeformation:GetDataAccess呼叫。您可以使用两个日志条目中都存在的 IAM 角色标识符来跟踪调用者的 IAM 角色,从查询启动到 Amazon S3 中的数据访问。

要在 Amazon S3 数据事件 CloudTrail 日志中启用源身份信息,请执行以下步骤。要在中启用 Amazon S3 数据事件 CloudTrail,请参阅为 Amazon S3 存储桶和对象启用 CloudTrail 事件记录

重要

在中启用 Amazon S3 数据事件 CloudTrail 会产生额外费用。

在 CloudTrail 日志中启用源身份跟踪
  1. 使用,运行get-data-lake-settings命令。在响应中,编辑要添加的Parameters字段"SET_SOURCE_IDENTITY": "TRUE"

    运行 put-data-lake-settings 命令。

    "Parameters": { "CROSS_ACCOUNT_VERSION": "4", "SET_SOURCE_IDENTITY": "TRUE" },
  2. 在用于向 Lake Formation 注册你的 Amazon S3 数据位置的 IAM 角色的信任策略中,添加sts:SetSourceIdentity

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lakeformation.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ] } ] }

以下日志在示例s3:GetObject CloudTrail 日志中显示了源身份信息。

"sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA2EXAMPLEXYZ3AB6CDKLM", "arn": "arn:aws:iam::111122223333:role/LFRegistrationRole", "accountId": "111122223333", "userName": "LFRegistrationRole" }, "sourceIdentity": "V2.111122223333.AROA3EXAMPLEPQR7ST9UVWXY" }, "invokedBy": "glue.amazonaws.com"
另请参阅
Amazon Redshift 联合目录访问监控

中的 Amazon Redshift 联合目录 AWS Glue Data Catalog 不会在 Lake Formation 日志中生成GetDataAccess事件。 CloudTrail 要跟踪 Data Catalog 中 Amazon Redshift 表的数据访问情况,请监控 GetTableBatchGetTable 事件,这些事件捕获 Redshift 联合表的元数据访问模式,包括表名、数据库名称和目录 ID 信息。