

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

# Cross-account CloudTrail 记录
<a name="cross-account-logging"></a>

Lake Formation 提供了有关对数据湖中数据的所有跨账户访问的集中审计跟踪记录。当接收者 AWS 账户访问共享表中的数据时，Lake Formation CloudTrail 会将事件复制到拥有该账户的 CloudTrail 日志中。复制的事件包括通过集成服务（例如 Amazon Athena 和 Amazon Redshift Spectrum）对数据的查询，以及按任务访问AWS Glue的数据。

CloudTrail 对数据目录资源进行跨账户操作的事件同样会被复制。

作为资源所有者，如果您在 Amazon S3 中启用对象级日志记录，则可以运行将 S3 CloudTrail 事件与 Lake Formation 事件关联的查询，以确定访问了您的 S3 存储桶的账户。 CloudTrail 

**Topics**
+ [在跨账户 CloudTrail 日志中包含主体身份](#cross-account-logging-optin)
+ [查询 Amazon S3 跨账户访问 CloudTrail 日志](#cross-account-logging-s3)

## 在跨账户 CloudTrail 日志中包含主体身份
<a name="cross-account-logging-optin"></a>

默认情况下，添加到共享资源接收者日志并复制到资源所有者日志的跨账户 CloudTrail 事件仅包含外部账户委托人的委托人 ID，而不是 AWS 委托人（委托人 ARN）的人类可读的 Amazon 资源名称 (ARN)。在可信范围内（例如在同一个组织或团队内）共享资源时，您可以选择在活动中包括委托人 ARN。 CloudTrail 然后，资源所有者账户可以对访问他们拥有的资源的接收方账户中主体进行跟踪。

**重要**  
作为共享资源接收者，要在自己的 CloudTrail 日志中查看事件中的委托人 ARN，您必须选择与所有者账户共享委托人 ARN。  
如果数据访问是通过资源链接进行的，则共享资源接收方账户中会记录两个事件：一个是资源链接访问事件，另一个是目标资源访问事件。资源链接访问事件*确实*包括主体 ARN。目标资源访问事件不包括主体 ARN（不含选择服务）。资源链接访问事件不会被复制到所有者账户。

以下是默认跨账户 CloudTrail 事件的摘录（没有选择加入）。执行数据访问的账户为 1111-2222-3333。这是同时显示在调用账户和资源所有者账户中的日志。在跨账户案例中，Lake Formation 会在两个账户中填充日志。

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSAccount",
        "principalId": "AROAQGFTBBBGOBWV2EMZA:GlueJobRunnerSession",
        "accountId": "111122223333"
    },
    "eventSource": "lakeformation.amazonaws.com",
    "eventName": "GetDataAccess",
...
...
    "additionalEventData": {
        "requesterService": "GLUE_JOB",
        "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-G13T0Rmng2"
    },
...
}
```

作为共享资源使用者，当您选择包括主体 ARN 时，摘录将变为以下内容。`lakeFormationPrincipal` 字段表示通过 Amazon Athena、Amazon Redshift Spectrum 或 AWS Glue 作业执行查询的最终角色或用户。

```
{
    "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"
    },
...
}
```

**选择在跨 CloudTrail 账户日志中包含委托人 ARN**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 `Administrator` 用户或具有 `Administrator Access` IAM 策略的用户身份登录。

1. 在导航窗格中，选择**设置**。

1. 在**数据目录设置**页面的**默认权限 AWS CloudTrail部分中，为****资源所有者**输入一个或多个 AWS 资源所有者账户 ID。

   在输入每个账户 ID 之后按 **Enter** 键。

1. 选择**保存**。

   现在，存储在共享资源接收者和资源所有者的日志中的跨账户 CloudTrail 事件都包含委托人 ARN。

## 查询 Amazon S3 跨账户访问 CloudTrail 日志
<a name="cross-account-logging-s3"></a>

作为共享资源所有者，您可以查询 S3 CloudTrail 日志以确定访问过您的 Amazon S3 存储桶的账户（前提是您在 Amazon S3 中启用了对象级日志记录）。这仅适用于您在 Lake Formation 中注册的 S3 位置。如果共享资源使用者选择在 Lake Formation CloudTrail 日志中包含委托人 ARN，则可以确定访问存储桶的角色或用户。

使用运行查询时 Amazon Athena，您可以通过会话名称属性加入 Lake Formation CloudTrail CloudTrail 事件和 S3 事件。查询还可以筛选关于 `eventName="GetDataAccess"` 的 Lake Formation 事件以及关于 `eventName="Get Object"` 或 `eventName="Put Object"` 的 S3 事件。

以下是 Lake Formation 跨账户 CloudTrail 事件的摘录，在该事件中，已注册 S3 位置的数据被访问。

```
{
  "eventSource": "lakeformation.amazonaws.com",
  "eventName": "GetDataAccess",
  ..............
  ..............
  "additionalEventData": {
    "requesterService": "GLUE_JOB",
    "lakeFormationPrincipal": "arn:aws:iam::111122223333:role/ETL-Glue-Role",
    "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-B8JSAjo5QA"
   }
}
```

`lakeFormationRoleSessionName`密钥值可以与 S3 CloudTrail 事件`principalId`密钥中的会话名称合并。`AWSLF-00-GL-111122223333-B8JSAjo5QA`以下是 S3 CloudTrail 活动的摘录。它显示会话名称的位置。

```
{
   "eventSource": "s3.amazonaws.com",
   "eventName": "Get Object"
   ..............
   ..............
   "principalId": "AROAQSOX5XXUR7D6RMYLR:AWSLF-00-GL-111122223333-B8JSAjo5QA",
   "arn": "arn:aws:sets::111122223333:assumed-role/Deformationally/AWSLF-00-GL-111122223333-B8JSAjo5QA",  
   "session Context": {
     "session Issuer": {
       "type": "Role",
       "principalId": "AROAQSOX5XXUR7D6RMYLR",
       "arn": "arn:aws:iam::111122223333:role/aws-service-role/lakeformation.amazonaws.com/Deformationally",
       "accountId": "111122223333",
       "user Name": "Deformationally"
     },
   ..............
   ..............
}
```

会话名称的格式如下：

```
AWSLF-<version-number>-<query-engine-code>-<account-id->-<suffix>
```

**`version-number`**  
此格式的版本，当前为 `00`。如果会话名称格式发生变化，则下一个版本将是 `01`。

**`query-engine-code`**  
表示访问数据的实体。当前值如下：      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/cross-account-logging.html)

**`account-id`**  
向 Lake Formation 请求凭证的 AWS 账户 ID。

**`suffix`**  
随机生成的字符串。