

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

# CloudTrail 登录 Transfer Family 网络应用程序
<a name="webapp-cloudtrail"></a>

CloudTrail 是 Amazon Web Services 服务 用来记录你内部所采取的行动的 Amazon Web Services 账户。它持续监控和记录控制台登录、 Amazon Command Line Interface 命令和操作等活动的 API 操作。 SDK/API 这使您可以记录谁在何时何地采取了什么行动。 CloudTrail 通过提供 Amazon 环境中所有活动的历史记录，帮助审计、访问管理和监管合规性。

对于 Transfer Family 网络应用程序，您可以跟踪用户执行的身份验证事件和数据访问操作。要启用全面日志记录，您需要：

1. 配置 CloudTrail 为记录管理事件以跟踪身份验证活动。

1. 启用 Amazon S3 数据事件以跟踪通过您的网络应用程序执行的文件操作。

**另请参阅**
+ [CloudTrail IAM 身份中心的用例](https://docs.amazonaws.cn/singlesignon/latest/userguide/sso-cloudtrail-use-cases.html)
+ [了解 IAM 身份中心登录事件](https://docs.amazonaws.cn/singlesignon/latest/userguide/understanding-sign-in-events.html)
+ [CloudTrail 用户身份元素](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)
+ [为 S3 存储桶和对象启用 CloudTrail 事件记录](https://docs.amazonaws.cn/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html)
+ [亚马逊 S3 CloudTrail 活动](https://docs.amazonaws.cn/AmazonS3/latest/userguide/cloudtrail-logging-s3-info.html)

## 启用 Amazon S3 数据事件
<a name="webapp-enable-s3-data-events"></a>

要跟踪通过 Transfer Family 网络应用程序在 Amazon S3 存储桶上执行的文件操作，您需要为这些存储桶启用数据事件。数据事件提供对象级 API 活动，对于跟踪 Web 应用程序用户执行的文件上传、下载和其他操作特别有用。

要为您的 Transfer Family 网络应用程序启用 Amazon S3 数据事件，请执行以下操作：

1. 打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.amazonaws.cn/cloudtrail/)。

1. 在导航窗格中，选择 T **ra** ils，然后选择现有跟踪或创建新跟踪。

1. 在 “**高级事件选择器”** 下，选择 “**编辑”**。

1. 选择**添加高级事件选择器**。

1. 对于第一个字段选择器：
   + 将 “**字段”** 设置为 `eventCategory`
   + 将**运算符**设置为**等于**
   + 将 “**值” 设置为** `Data`

1. 选择**添加字段**，对于第二个字段选择器：
   + 将 “**字段”** 设置为 `resources.type`
   + 将**运算符**设置为**等于**
   + 将 “**值” 设置为** `AWS::S3::Object`

1. （可选）要仅记录特定存储桶的事件，请选择**添加字段**并添加：
   + 将 “**字段”** 设置为 `resources.ARN`
   + 将**运算符**设置为**开头为**
   + 将 “**值” 设置为** `arn:aws:s3:::your-bucket-name/`

1. 选择**保存更改**。

或者，您可以使用旧版数据事件配置：

1. 在**数据事件**下，选择**编辑**。

1. 对于**数据事件类型**，选择 **S3 存储桶和对象事件**。

1. 选择要为其记录数据事件的 Amazon S3 存储桶。您可以选择 “**所有当前和将来的 S3 存储桶**”，也可以指定单个存储桶。

1. 选择是记录**读取**事件、**写入**事件，还是同时记录两者。

1. 选择**保存更改**。

启用数据事件后，您可以在为配置的 Amazon S3 存储桶中访问这些日志 CloudTrail。日志包括诸如执行操作的用户、操作时间戳、受影响的特定对象以及帮助跟踪通过 Transfer Family 网络应用程序执行`userId`的操作的`onBehalfOf`字段等详细信息。

### 查找和查看您的日志
<a name="webapp-find-view-logs"></a>

您可以通过多种方式查找和查看 Transfer Family 网络应用程序的 CloudTrail 日志：

#### 使用控制 CloudTrail 台
<a name="webapp-find-logs-console"></a>

查看最近事件的最快方法：

1. 打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.amazonaws.cn/cloudtrail/)。

1. 选择**事件历史记录**。

1. 按以下条件筛选事件：
   + **事件源**：`signin.amazonaws.com`用于 Web 应用程序事件
   + **事件源**：`s3.amazonaws.com`用于文件操作

1. 单击任何事件可查看详细信息。

#### 访问 Amazon S3 中的日志
<a name="webapp-find-logs-s3"></a>

要访问存储在 Amazon S3 中的完整日志文件，请执行以下操作：

1. 识别您的 CloudTrail 跟踪的 Amazon S3 存储桶：

   ```
   aws cloudtrail describe-trails --query 'trailList[*].[Name,S3BucketName]' --output table
   ```

1. 导航到 Amazon S3 中的日志文件：

   ```
   aws s3 ls s3://your-cloudtrail-bucket/AWSLogs/account-id/CloudTrail/region/YYYY/MM/DD/
   ```

1. 下载并搜索您的网络应用程序 ID 的日志文件：

   ```
   aws s3 cp s3://your-cloudtrail-bucket/AWSLogs/account-id/CloudTrail/region/YYYY/MM/DD/ . --recursive
   gunzip *.json.gz
   grep -l "webapp-1a2b3c4d5e6f7g8h9" *.json
   ```

#### Amazon CLI 用于搜索事件
<a name="webapp-find-logs-cli"></a>

使用以下方式搜索特定的 Web 应用程序事件 Amazon CLI：

```
aws logs filter-log-events \
  --log-group-name /aws/cloudtrail/your-trail-name \
  --filter-pattern "webapp-1a2b3c4d5e6f7g8h9" \
  --start-time $(date -d "1 day ago" +%s)000
```

或者搜索身份验证事件：

```
aws logs filter-log-events \
  --log-group-name /aws/cloudtrail/your-trail-name \
  --filter-pattern "UserAuthentication" \
  --start-time $(date -d "1 day ago" +%s)000
```

## 身份验证日志示例
<a name="webapp-authentication-log-examples"></a>

CloudTrail 记录 Transfer Family 网络应用程序的身份验证事件，这可以帮助您跟踪成功和失败的登录尝试。这些日志对于安全监控和合规性特别有用。

**Topics**
+ [证书验证日志条目示例](#webapp-credential-verification-example)
+ [登录身份验证的日志条目示例](#webapp-signin-authentication-example)
+ [的日志条目示例 ListCallerAccessGrants](#webapp-list-caller-access-grants-example)
+ [GetDataAccess 事件日志条目示例](#webapp-get-data-access-example)

### 证书验证日志条目示例
<a name="webapp-credential-verification-example"></a>

以下示例显示了在身份验证过程中发生的凭据验证事件的 CloudTrail 日志条目。

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "Unknown",
        "principalId": "123456789012",
        "arn": "",
        "accountId": "123456789012",
        "accessKeyId": "",
        "userName": "demo-user-2",
        "onBehalfOf": {
            "userId": "f12bb510-a011-702f-10dd-5607e2776dbc",
            "identityStoreArn": "arn:aws:identitystore::123456789012:identitystore/d-9a670c546e"
        },
        "credentialId": "58138a11-87e5-401d-8f0b-7161c9389112"
    },
    "eventTime": "2025-08-08T15:29:30Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "CredentialVerification",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "192.0.2.224",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
    "requestParameters": null,
    "responseElements": null,
    "additionalEventData": {
        "AuthWorkflowID": "f304a48b-7b6d-41c8-b136-4f49c91c1f31",
        "CredentialType": "PASSWORD"
    },
    "requestID": "ff936828-4a81-453c-802d-81368b6bca1a",
    "eventID": "70cb7008-493d-42c2-a9eb-38bf168af6a8",
    "readOnly": false,
    "eventType": "Amazon ServiceEvent",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "serviceEventDetails": {
        "CredentialVerification": "Success"
    },
    "eventCategory": "Management"
}
```

此事件提供了有关身份验证过程中的凭证验证步骤的更多详细信息，显示了使用的特定凭据 ID 和身份验证工作流程 ID。

### 登录身份验证的日志条目示例
<a name="webapp-signin-authentication-example"></a>

以下示例显示了使用 IAM Identity Center CloudTrail 登录 Web 应用程序期间成功进行用户身份验证事件的日志条目。

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "Unknown",
        "principalId": "123456789012",
        "arn": "",
        "accountId": "123456789012",
        "accessKeyId": "",
        "userName": "demo-user-2",
        "onBehalfOf": {
            "userId": "f12bb510-a011-702f-10dd-5607e2776dbc",
            "identityStoreArn": "arn:aws:identitystore::123456789012:identitystore/d-9a670c546e"
        },
        "credentialId": "b41f0a02-1635-4d07-a414-aecf9e14b906"
    },
    "eventTime": "2025-08-07T14:09:07Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "UserAuthentication",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "192.0.2.14",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
    "requestParameters": null,
    "responseElements": null,
    "additionalEventData": {
        "AuthWorkflowID": "7a4ef12c-7c4b-4bc3-b5bd-c2469afcc795",
        "LoginTo": "https://example.awsapps.com/start/",
        "CredentialType": "PASSWORD"
    },
    "requestID": "fc91bcf0-ac53-4454-a1a0-fb911eacc095",
    "eventID": "18522007-1e60-4a71-b2b5-150baf504ab3",
    "readOnly": false,
    "eventType": "Amazon ServiceEvent",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "serviceEventDetails": {
        "UserAuthentication": "Success"
    },
    "eventCategory": "Management"
}
```

在此示例中，请注意以下重要字段：
+ `eventSource`：显示 “signin.amazonaws.com”，表示这是一个 IAM 身份中心身份验证事件。
+ `userIdentity.onBehalfOf`：包含 Web 应用程序用户的用户 ID 和身份存储 ARN。
+ `additionalEventData.LoginTo`：显示正在访问的 IAM 身份中心应用程序 URL。
+ `additionalEventData.CredentialType`：表示使用的身份验证方法（密码）。
+ `serviceEventDetails`：显示身份验证结果（成功）。

### 的日志条目示例 ListCallerAccessGrants
<a name="webapp-list-caller-access-grants-example"></a>

以下示例显示了一个事件的 CloudTrail 日志条目，该 ListCallerAccessGrants 事件在 Transfer Family 网络应用查询用户的可用访问权限时发生。

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAEXAMPLEID:aws-transfer",
        "arn": "arn:aws:sts::123456789012:assumed-role/Amazon TransferWebAppIdentityBearer-us-east-2/aws-transfer",
        "accountId": "123456789012",
        "accessKeyId": "ASIAEXAMPLEKEY",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAEXAMPLEID",
                "arn": "arn:aws:iam::123456789012:role/service-role/Amazon TransferWebAppIdentityBearer-us-east-2",
                "accountId": "123456789012",
                "userName": "Amazon TransferWebAppIdentityBearer-us-east-2"
            },
            "attributes": {
                "creationDate": "2025-08-08T15:29:34Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "transfer.amazonaws.com",
        "onBehalfOf": {
            "userId": "f12bb510-a011-702f-10dd-5607e2776dbc",
            "identityStoreArn": "arn:aws:identitystore::123456789012:identitystore/d-9a670c546e"
        }
    },
    "eventTime": "2025-08-08T15:29:35Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "ListCallerAccessGrants",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "transfer.amazonaws.com",
    "userAgent": "transfer.amazonaws.com",
    "requestParameters": {
        "Host": "123456789012.s3-control.dualstack.us-east-2.amazonaws.com",
        "allowedByApplication": "true",
        "maxResults": "100"
    },
    "responseElements": null,
    "additionalEventData": {
        "SignatureVersion": "SigV4",
        "CipherSuite": "TLS_AES_128_GCM_SHA256",
        "bytesTransferredIn": 0,
        "AuthenticationMethod": "AuthHeader",
        "x-amz-id-2": "1g34AaAELn/fntxwrifVsr41VDl8dp5ygWFasHJFNVq5FDCWYfX0ye7s4tWHEJC8ppI5lLePYLIcw3iTXAgn5Q==",
        "bytesTransferredOut": 462
    },
    "requestID": "48485MTZEDWT0ANT",
    "eventID": "3de5dd60-b7cf-474c-a1ab-631467c1a5c3",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "Amazon:S3::AccessGrantsInstance",
            "ARN": "arn:aws:s3:us-east-2:123456789012:access-grants/default"
        }
    ],
    "eventType": "Amazon ApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

在此示例中，请注意以下重要字段：
+ `eventName`：显示这是一个 ListCallerAccessGrants 事件，用于查询可用的 S3 访问授权。
+ `requestParameters.allowedByApplication`：表示查询已筛选为应用程序允许的授权。
+ `requestParameters.maxResults`：显示响应中要返回的最大授权数量。
+ `userIdentity.onBehalfOf`：将请求链接到特定的 Web 应用程序用户。

此事件有助于跟踪 Transfer Family 网络应用何时查询用户可以访问的 S3 资源，从而可以查看访问授权发现操作。

### GetDataAccess 事件日志条目示例
<a name="webapp-get-data-access-example"></a>

以下示例显示了事件的 CloudTrail 日志条目，该 GetDataAccess 事件在 Transfer Family Web 应用程序代表用户请求 S3 资源的访问权限时发生。

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROASEQRAEABP7ADWEZA5:aws-transfer",
        "arn": "arn:aws:sts::123456789012:assumed-role/AWSTransferWebAppIdentityBearer-ap-southeast-1/aws-transfer",
        "accountId": "123456789012",
        "accessKeyId": "ASIAEXAMPLEKEY",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROASEQRAEABP7ADWEZA5",
                "arn": "arn:aws:iam::123456789012:role/service-role/AWSTransferWebAppIdentityBearer-ap-southeast-1",
                "accountId": "123456789012",
                "userName": "AWSTransferWebAppIdentityBearer-ap-southeast-1"
            },
            "attributes": {
                "creationDate": "2025-05-08T16:09:05Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "transfer.amazonaws.com",
        "onBehalfOf": {
            "identityStoreArn": "arn:aws:identitystore::123456789012:identitystore/d-9667b0da7a",
            "userId": "191a35ec-10a1-70c1-e4ab-e2802411e13e"
        }
    },
    "eventTime": "2025-05-08T16:10:25Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "GetDataAccess",
    "awsRegion": "ap-southeast-1",
    "sourceIPAddress": "transfer.amazonaws.com",
    "userAgent": "transfer.amazonaws.com",
    "requestParameters": {
        "Host": "123456789012.s3-control.dualstack.ap-southeast-1.amazonaws.com",
        "durationSeconds": 900,
        "permission": "READWRITE",
        "target": "s3://amzn-s3-demo-bucket/users/john.doe/documents/*"
    },
    "responseElements": null,
    "additionalEventData": {
        "AuthenticationMethod": "AuthHeader",
        "CipherSuite": "TLS_AES_128_GCM_SHA256",
        "SignatureVersion": "SigV4",
        "bytesTransferredIn": 0,
        "bytesTransferredOut": 2244,
        "x-amz-id-2": "8ce8sZOgNwsaj9w1mzagyA+csONjYl8FgEw4FGpE8DARi90aNC0RFWlTYNEn7ChqE9RCJrTzMvS+ru7Vz2xXHrkQt/1uQ9exZTZdlhX+/fM="
    },
    "requestID": "BXGSKKQXCWS5RAHB",
    "eventID": "c11db1d1-dfb8-431e-8625-48eba2ebadfe",
    "readOnly": true,
    "resources": [
        {
            "type": "Amazon:S3::AccessGrantsInstance",
            "ARN": "arn:aws:s3:ap-southeast-1:123456789012:access-grants/default",
            "accountId": "123456789012"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

在此示例中，请注意以下重要字段：
+ `eventName`：显示这是一个 Transfer Family 请求 S3 资源的访问权限时发生 GetDataAccess 的事件。
+ `userIdentity.onBehalfOf`：包含身份存储 ARN 和用户 ID，将访问请求关联到特定 Web 应用用户。
+ `requestParameters.target`：显示请求访问的 S3 路径模式。
+ `requestParameters.permission`：表示请求的访问类型（读写、读或写）。
+ `requestParameters.durationSeconds`：显示访问权限的有效期限（通常为 900 秒/15 分钟）。
+ `sourceIPAddress`和`userAgent`：两者都显示 “transfer.amazonaws.com”，表示这是内部服务请求。

GetDataAccess 事件对于跟踪 Transfer Family 网络应用程序用户何时被授予访问特定 S3 资源的权限特别有用，可帮助您监控访问模式并确保获得适当的授权。

## 查看 CloudTrail 日志条目
<a name="webapp-view-log-entries"></a>

您可以通过多种方式查看和分析您的 Transfer Family 网络应用程序的 CloudTrail 日志条目：

### 使用控制 CloudTrail 台
<a name="webapp-view-logs-console"></a>

 CloudTrail 控制台提供了一个用户友好的界面，用于查看和筛选日志条目：

1. 打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.amazonaws.cn/cloudtrail/)。

1. 在导航窗格中，选择**事件历史记录**。

1. 使用筛选选项缩小事件范围：
   + 将**事件来源**设置为，`transfer.amazonaws.com`以便仅查看 Transfer Family 事件。
   + 按**事件名称**筛选以查看特定的操作，例如`UserAuthentication`.
   + 使用**时间范围**来关注特定时间段内的事件。

1. 点击任何事件可查看其详细信息。

### 访问 Amazon S3 中的日志
<a name="webapp-view-logs-s3"></a>

如果您已将 CloudTrail 跟踪配置为将日志传输到 Amazon S3 存储桶，则可以直接访问原始日志文件：

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 导航到存储 CloudTrail 日志的存储桶和前缀。

1. 日志按年、月、日和地区进行组织。导航到相应的目录。

1. 下载并打开 JSON 格式的日志文件。