使用 AWS CloudTrail 记录 IAM 和 AWS STS API 调用 - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 AWS CloudTrail 记录 IAM 和 AWS STS API 调用

IAM 和 AWS STS 与 AWS CloudTrail 集成,后者是一项服务,它提供 IAM 用户或角色所采取的操作的记录。CloudTrail 将对 IAM 和 AWS STS 的所有 API 调用作为事件捕获,包括来自控制台和 API 调用的调用。如果您创建了跟踪,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶。如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。可使用 CloudTrail 获取有关对 IAM 或 AWS STS 发出的请求的信息。例如,您可以查看发出请求的源 IP 地址、用户、时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,请参阅 AWS CloudTrail User Guide

CloudTrail 中的 IAM 和 AWS STS 信息

在您创建 CloudTrail 账户时,即针对该账户启用了 AWS。当 IAM 或 AWS STS 中发生活动时,该活动将记录在 CloudTrail 事件中,并与其他 AWS 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件

要持续记录 AWS 账户中的事件(包括 IAM 和 AWS STS 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有区域。此跟踪在 AWS 分区中记录来自所有区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他 AWS 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅:

所有 IAM 和 AWS STS 操作均由 CloudTrail 记录下来并记载到IAM API 参考AWS Security Token Service API Reference中。

记录 IAM 和 AWS STS API 请求

CloudTrail 记录对 IAM 和 AWS STS API 操作的所有经过身份验证的 API 请求(使用凭证发出)。CloudTrail 还记录对 AWS STS 操作、AssumeRoleWithSAMLAssumeRoleWithWebIdentity 的未经身份验证的请求,并记录由身份提供商提供的信息。您可以使用此信息将由一个联合身份用户通过担任角色发出的调用映射回发出请求的外部联合发起人。如果使用 AssumeRole,您可以将调用映射回到发出请求的 AWS; 服务或发出请求的用户的账户。CloudTrail 日志条目中 JSON 数据的 userIdentity 部分包含您将 AssumeRole* 请求与特定联合身份用户进行映射时所需的信息。有关更多信息,请参阅 AWS CloudTrail User Guide中的 CloudTrail userIdentity 元素

例如,IAM CreateUserDeleteRoleListGroups 调用和其他 API 操作全部都由 CloudTrail 记录。

本主题后面将会介绍有关此类日志条目的示例。

重要

如果在区域中激活 AWS STS 终端节点而不是默认全球终端节点,您还必须在这些区域中启用 CloudTrail 日志记录。这是记录在这些区域中进行的任何 AWS STS API 调用所必需的。有关更多信息,请参阅 AWS CloudTrail User Guide 中的在其他区域中启用 CloudTrail

将 API 请求记录到其他 AWS 服务

对其他 AWS 服务 API 操作的经过身份验证的请求由 CloudTrail 记录,这些日志条目包含有关生成请求的人员的信息。

例如,假设您发出一个请求来列出 Amazon EC2 实例或创建 CodeDeploy 部署组。有关发出该请求的人员或服务的详细信息将包含在该请求的日志条目中。此信息可帮助您确定发出该请求的是 AWS 账户根用户、IAM 用户、角色还是其他 AWS 服务。

有关 CloudTrail 日志条目中用户身份信息的详细信息,请参阅 AWS CloudTrail User Guide 中的 userIdentity 元素

记录区域登录事件

如果您允许 CloudTrail 将登录事件记录到您的日志中,您需要了解 CloudTrail 如何选择在何处记录事件。

  • 如果您的用户直接登录到控制台,他们将重定向到全球或区域登录终端节点。终端节点依赖于所选服务控制台是否支持区域。例如,主控制台主页支持区域。如果您登录到 https://alias.signin.amazonaws.cn/console,则会重定向到区域登录终端节点,例如,https://us-west-2.signin.amazonaws.cn。这种重定向在用户的区域日志中创建一个区域 CloudTrail 日志条目:

    另一方面,Amazon S3 控制台不支持区域,因此,如果您登录到 https://alias.signin.amazonaws.cn/console/s3,则 AWS 将您重定向到全球登录终端节点 (https://signin.amazonaws.cn)。这种重定向创建一个全球 CloudTrail 日志条目。

  • 您可以使用类似于 https://alias.signin.amazonaws.cn/console?region=ap-southeast-1 的 URL 登录到启用了区域的主控制台主页,以手动请求特定的区域登录终端节点。在这种情况下,AWS 将您重定向到 ap-southeast-1 区域登录终端节点,并生成一个区域 CloudTrail 日志事件。

将登录事件视为区域还是全球事件取决于用户登录到的控制台,以及用户构建登录 URL 的方式。

  • 服务控制台是否区域化? 如果是,登录请求将自动重定向到区域登录终端节点,并在该区域的 CloudTrail 日志中记录事件。例如,如果您登录到区域化的 https://alias.signin.amazonaws.cn/console,系统将您重定向到区域中的登录终端节点,例如,https://us-west-2.signin.amazonaws.cn。将在该区域的日志中记录事件。

    不过,某些服务尚未区域化。例如,Amazon S3 服务目前无法 识别。如果您登录到 https://alias.signin.amazonaws.cn/console/s3,系统会将您重定向到位于 https://signin.amazonaws.cn 的全球登录终端节点。这种重定向在全球日志中创建一个事件。

  • 您还可以使用类似于 https://alias.signin.amazonaws.cn/console?region=ap-southeast-1 的 URL 来手动请求特定区域登录终端节点。此 URL 将您重定向到 ap-southeast-1 区域登录终端节点。这种重定在区域日志中生成一个事件。

防止重复的区域日志条目

CloudTrail 在每个区域创建单独的跟踪。这些跟踪包括这些区域所发生的事件的信息,以及全球事件和非区域特定的事件。示例包括 IAM API 调用、对全球终端节点的 AWS STS 调用以及 AWS 登录事件。例如,假设您具有两个跟踪,分别位于不同的区域中。如果您随后创建新的 IAM 用户,则会在两个区域的日志文件中添加 CreateUser 事件,从而创建重复的日志条目。

AWS Security Token Service (STS) 是一项全球服务,在 https://sts.amazonaws.com.cn 上具有单个全球终端节点。对此终端节点的调用会记录为对全球服务的调用。不过,由于该终端节点实际位于 美国东部(弗吉尼亚北部) 区域中,因此,您的日志将 us-east-1 作为事件区域列出。CloudTrail 不会将这些日志写入到 区域中,除非您选择在该区域中包含全球服务日志。AWS STS 还会允许对区域终端节点的调用,例如 sts.eu-central-1.amazonaws.com.cn。CloudTrail 将对所有区域终端节点的调用写入到相应的区域中。例如,对 sts.us-west-2.amazonaws.com.cn 的调用发布到 区域。对 sts.eu-central-1.amazonaws.com.cn 的调用发布到 欧洲(法兰克福) 区域日志中。

有关多个区域和 AWS STS 的更多信息,请参阅在 AWS 区域中管理 AWS STS

下表列出了区域以及 CloudTrail 在每个区域中记录 AWS STS 请求的方式。“位置”列指示 CloudTrail 写入的日志。“全球”表示,在您选择包含全球服务日志的任何区域中记录事件。“区域”表示,仅在终端节点所在的区域中记录事件。最后一列指示如何在日志条目中标识请求的区域。

区域名称 CloudTrail 日志中的区域标识 终端节点 CloudTrail 日志的位置
无 - 全球 us-east-1 sts.amazonaws.com.cn 全球
us-west-2 sts.us-east-2.amazonaws.com Region
美国东部(弗吉尼亚北部) us-east-1 sts.us-east-1.amazonaws.com Region
美国西部(加利福尼亚北部) us-west-1 sts.us-west-1.amazonaws.com Region
美国西部(俄勒冈) us-west-2 sts.us-west-2.amazonaws.com Region
加拿大 (中部) ca-central-1 sts.ca-central-1.amazonaws.com Region
欧洲(法兰克福) eu-central-1 sts.eu-central-1.amazonaws.com Region
欧洲(爱尔兰) eu-west-1 sts.eu-west-1.amazonaws.com Region
欧洲(伦敦) eu-west-2 sts.eu-west-2.amazonaws.com Region
亚太区域(东京) ap-northeast-1 sts.ap-northeast-1.amazonaws.com Region
亚太区域(首尔) ap-northeast-2 sts.ap-northeast-2.amazonaws.com Region
亚太地区(孟买) ap-south-1 sts.ap-south-1.amazonaws.com Region
亚太区域(新加坡) ap-southeast-1 sts.ap-southeast-1.amazonaws.com Region
亚太区域(悉尼) ap-southeast-2 sts.ap-southeast-2.amazonaws.com Region
南美洲(圣保罗) sa-east-1 sts.sa-east-1.amazonaws.com 区域

如果配置 CloudTrail 以将您的账户中的多个区域的跟踪信息聚合到单个 Amazon S3 存储桶中,将在日志中具有重复的 IAM 事件。换句话说,每个区域的跟踪将相同的 IAM 事件写入到聚合的日志中。为了防止出现这种重复,您可以选择性地包括全球事件。典型的方法是在一个跟踪中启用全球事件。然后,禁用写入同一 Amazon S3 存储桶中的所有其他跟踪的全球事件。这样便仅写入一组全局事件。

有关更多信息,请参阅 AWS CloudTrail User Guide 中的聚合日志

记录用户登录事件

CloudTrail 将登录事件记录到 AWS 管理控制台、AWS 论坛和 AWS Marketplace。CloudTrail 记录 IAM 用户和联合身份用户的成功和失败登录尝试。

对于 AWS 账户根用户,只记录成功登录事件。CloudTrail 记录 根用户 执行的不成功登录事件。

作为最佳安全做法,当用户名称不正确 导致登录故障时,AWS 不记录输入的 IAM 用户名称文本。用户名称文本将用 HIDDEN_DUE_TO_SECURITY_REASONS 值代替。有关示例,请参阅本主题后面的用户名称不正确导致的登录失败事件示例。用户名称文本隐藏,因为此类错误可能是用户错误所导致。记录这些错误可能会泄露潜在的敏感信息。例如:

  • 您不小心在用户名框中键入了密码。

  • 您选择一个 AWS 账户的登录页面链接,但键入了另一账户的账号。

  • 您忘记了所登录的是哪个账户,不小心键入了个人电子邮件账户的账户名、银行登录标识符或某些其他私有 ID。

记录临时凭证的登录事件

当委托人请求临时凭证时,委托人类型将决定 CloudTrail 记录事件的方式。当委托人代入其他账户中的角色时,这会很复杂。有多个 API 调用执行与角色跨账户操作相关的操作。首先,委托人调用 AWS STS API 来检索临时凭证。该操作记录到调用账户中以及执行 AWS STS 操作的账户中。然后,委托人使用角色在代入角色的账户中执行其他 API 调用。

您可以使用 aws:RoleSessionName 条件键要求您的用户在代入角色时提供特定的会话名称。例如,您可以要求 IAM 用户指定自己的用户名作为其会话名称。这将使正在查看 AWS CloudTrail 日志的管理员能够更轻松地了解谁执行了操作。有关更多信息,请参阅 aws:RoleSessionName

下表说明 CloudTrail 如何为每个生成临时凭证的 API 调用记录不同的信息。

委托人类型 STS API 发起人账户的 CloudTrail 日志中的用户身份 所代入角色的账户的 CloudTrail 日志中的用户身份 角色后续 API 调用的 CloudTrail 日志中的用户身份
AWS 账户根用户 凭证 GetSessionToken 根用户身份 角色所有者账户与调用账户相同 根用户身份
IAM 用户 GetSessionToken IAM 用户身份 角色所有者账户与调用账户相同 IAM 用户身份
IAM 用户 GetFederationToken IAM 用户身份 角色所有者账户与调用账户相同 IAM 用户身份
IAM 用户 AssumeRole IAM 用户身份 账号和委托人 ID(如果是用户)或 AWS 服务委托人 仅角色身份(无用户)
外部验证的用户 AssumeRoleWithSAML SAML 用户身份 仅角色身份 (无用户)
外部验证的用户 AssumeRoleWithWebIdentity OIDC/Web 用户身份 仅角色身份 (无用户)

CloudTrail 日志中的 IAM API 事件示例

CloudTrail 日志文件包含的事件采用 JSON 格式。一个 API 事件表示一个 API 请求,并包括有关委托人、所请求的操作、任意参数以及该操作日期和时间的信息。

CloudTrail 日志文件中的 IAM API 事件示例

以下示例说明了为进行 IAM GetUserPolicy 操作而发出的请求的 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws-cn:iam::444455556666:user/JaneDoe", "accountId": "444455556666", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "JameDoe", "sessionContext": { "attributes": { "creationDate": "2014-07-15T21:39:40Z" } }, "invokedBy": "signin.amazonaws.com.cn" }, "eventTime": "2014-07-15T21:40:14Z", "eventSource": "iam.amazonaws.com.cn", "eventName": "GetUserPolicy", "awsRegion": "us-west-2", "sourceIPAddress": "signin.amazonaws.com.cn", "userAgent": "signin.amazonaws.com.cn", "requestParameters": { "userName": "JaneDoe", "policyName": "ReadOnlyAccess-JaneDoe-201407151307" }, "responseElements": null, "requestID": "9EXAMPLE-0c68-11e4-a24e-d5e16EXAMPLE", "eventID": "cEXAMPLE-127e-4632-980d-505a4EXAMPLE" }

通过此事件信息,您可以确定发出该请求的目的是为了获取用户 ReadOnlyAccess-JaneDoe-201407151307 的名为 JaneDoe 的用户策略,如 requestParameters 元素中所述。您还可以看到,该请求是由名为 JaneDoe 的 IAM 用户在 2014 年 7 月 15 日下午 9:40 (UTC) 发出的。在本示例中,请求源自 AWS 管理控制台,您可以从 userAgent 元素中判断出来。

CloudTrail 日志中的 AWS STS API 事件示例

CloudTrail 日志文件包含的事件采用 JSON 格式。一个 API 事件表示一个 API 请求,并包括有关委托人、所请求的操作、任意参数以及该操作日期和时间的信息。

CloudTrail 日志文件中跨账户 AWS STS API 事件的示例

账户 777788889999 中名为 JohnDoe 的 IAM 用户调用 AWS STS AssumeRole 操作来在账户 111122223333 中代入角色 EC2-dev

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "arn": "arn:aws-cn:iam::777788889999:user/JohnDoe", "accountId": "777788889999", "accessKeyId": "AKIAQRSTUVWXYZEXAMPLE", "userName": "JohnDoe" }, "eventTime": "2014-07-18T15:07:39Z", "eventSource": "sts.amazonaws.com.cn", "eventName": "AssumeRole", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67", "requestParameters": { "roleArn": "arn:aws-cn:iam::111122223333:role/EC2-dev", "roleSessionName": "JohnDoe-EC2-dev" }, "responseElements": { "credentials": { "sessionToken": "<encoded session token blob>", "accessKeyId": "AKIAQRSTUVWXYZEXAMPLE", "expiration": "Jul 18, 2014 4:07:39 PM" }, "assumedRoleUser": { "assumedRoleId": "AIDAQRSTUVWXYZEXAMPLE:JohnDoe-EC2-dev", "arn": "arn:aws-cn:sts::111122223333:assumed-role/EC2-dev/JohnDoe-EC2-dev" } }, "resources": [ { "ARN": "arn:aws:iam::111122223333:role/EC2-dev", "accountId": "111122223333", "type": "AWS::IAM::Role" } ], "requestID": "4EXAMPLE-0e8d-11e4-96e4-e55c0EXAMPLE", "sharedEventID": "bEXAMPLE-efea-4a70-b951-19a88EXAMPLE", "eventID": "dEXAMPLE-ac7f-466c-a608-4ac8dEXAMPLE" "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

第二个示例显示同一请求的代入角色账户 (111122223333) 的 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSAccount", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "accountId": "777788889999" }, "eventTime": "2014-07-18T15:07:39Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67", "requestParameters": { "roleArn": "arn:aws:iam:: 111122223333:role/EC2-dev", "roleSessionName": "JohnDoe-EC2-dev", }, "responseElements": { "credentials": { "sessionToken": "<encoded session token blob>", "accessKeyId": "AKIAQRSTUVWXYZEXAMPLE", "expiration": "Jul 18, 2014 4:07:39 PM" }, "assumedRoleUser": { "assumedRoleId": "AIDAQRSTUVWXYZEXAMPLE:JohnDoe-EC2-dev", "arn": "arn:aws:sts::111122223333:assumed-role/EC2-dev/JohnDoe-EC2-dev" } }, "requestID": "4EXAMPLE-0e8d-11e4-96e4-e55c0EXAMPLE", "sharedEventID": "bEXAMPLE-efea-4a70-b951-19a88EXAMPLE", "eventID": "dEXAMPLE-ac7f-466c-a608-4ac8dEXAMPLE" }

CloudTrail 日志文件中 AWS STS 角色链接 API 事件示例

以下示例演示账户 111111111111 中 John Doe 发出的请求的 CloudTrail 日志条目。John 之前使用自己的 JohnDoe 用户代入 JohnRole1 角色。对于此请求,他使用来自该角色的凭证代入 JonRole2 角色。这称为角色链。John 将两个会话标签传递到请求中。他将这两个标签设置为可传递。请求继承 Department 标签作为可传递标签,因为 John 在代入 JohnRole1 时将其设置为可传递。有关角色链中可传递键的更多信息,请参阅使用会话标签链接角色

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIN5ATK5U7KEXAMPLE:JohnRole1", "arn": "arn:aws:sts::111111111111:assumed-role/JohnDoe/JohnRole1", "accountId": "111111111111", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-10-02T21:50:54Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIN5ATK5U7KEXAMPLE", "arn": "arn:aws:iam::111111111111:role/JohnRole1", "accountId": "111111111111", "userName": "JohnDoe" } } }, "eventTime": "2019-10-02T22:12:29Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-east-2", "sourceIPAddress": "123.145.67.89", "userAgent": "aws-cli/1.16.248 Python/3.4.7 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 botocore/1.12.239", "requestParameters": { "incomingTransitiveTags": { "Department": "Engineering" }, "tags": [ { "value": "johndoe@example.com", "key": "Email" }, { "value": "12345", "key": "CostCenter" } ], "roleArn": "arn:aws:iam::111111111111:role/JohnRole2", "roleSessionName": "Role2WithTags", "transitiveTagKeys": [ "Email", "CostCenter" ], "durationSeconds": 3600 }, "responseElements": { "credentials": { "accessKeyId": "ASIAWHOJDLGPOEXAMPLE", "expiration": "Oct 2, 2019 11:12:29 PM", "sessionToken": "AgoJb3JpZ2luX2VjEB4aCXVzLXdlc3QtMSJHMEXAMPLETOKEN+//rJb8Lo30mFc5MlhFCEbubZvEj0wHB/mDMwIgSEe9gk/Zjr09tZV7F1HDTMhmEXAMPLETOKEN/iEJ/rkqngII9///////////ARABGgw0MjgzMDc4NjM5NjYiDLZjZFKwP4qxQG5sFCryASO4UPz5qE97wPPH1eLMvs7CgSDBSWfonmRTCfokm2FN1+hWUdQQH6adjbbrVLFL8c3jSsBhQ383AvxpwK5YRuDE1AI/+C+WKFZb701eiv9J5La2EXAMPLETOKEN/c7S5Iro1WUJ0q3Cxuo/8HUoSxVhQHM7zF7mWWLhXLEQ52ivL+F6q5dpXu4aTFedpMfnJa8JtkWwG9x1Axj0Ypy2ok8v5unpQGWych1vwdvj6ez1Dm8Xg1+qIzXILiEXAMPLETOKEN/vQGqu8H+nxp3kabcrtOvTFTvxX6vsc8OGwUfHhzAfYGEXAMPLETOKEN/L6v1yMM3B1OwFOrQBno1HEjf1oNI8RnQiMNFdUOtwYj7HUZIOCZmjfN8PPHq77N7GJl9lzvIZKQA0Owcjg+mc78zHCj8y0siY8C96paEXAMPLETOKEN/E3cpksxWdgs91HRzJWScjN2+r2LTGjYhyPqcmFzzo2mCE7mBNEXAMPLETOKEN/oJy+2o83YNW5tOiDmczgDzJZ4UKR84yGYOMfSnF4XcEJrDgAJ3OJFwmTcTQICAlSwLEXAMPLETOKEN" }, "assumedRoleUser": { "assumedRoleId": "AROAIFR7WHDTSOYQYHFUE:Role2WithTags", "arn": "arn:aws:sts::111111111111:assumed-role/test-role/Role2WithTags" } }, "requestID": "b96b0e4e-e561-11e9-8b3f-7b396EXAMPLE", "eventID": "1917948f-3042-46ec-98e2-62865EXAMPLE", "resources": [ { "ARN": "arn:aws:iam::111122223333:role/JohnRole2", "accountId": "111111111111", "type": "AWS::IAM::Role" } ], "eventType": "AwsApiCall", "recipientAccountId": "111111111111" }

CloudTrail 日志文件中 AWS 服务 AWS STS API 事件的示例

以下示例显示由 AWS 服务使用服务角色中的权限调用其他服务 API 发出的请求的 CloudTrail 日志条目。它显示了在 777788889999 账户中发出的请求的 CloudTrail 日志条目。

{ "eventVersion": "1.04", "userIdentity": { "type": "AssumedRole", "principalId": "AIDAQRSTUVWXYZEXAMPLE:devdsk", "arn": "arn:aws:sts::777788889999:assumed-role/AssumeNothing/devdsk", "accountId": "777788889999", "accessKeyId": "AKIAQRSTUVWXYZEXAMPLE", "sessionContext": { "attributes": { "creationDate": "2016-11-14T17:25:26Z" }, "sessionIssuer": { "type": "Role", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "arn": "arn:aws:iam::777788889999:role/AssumeNothing", "accountId": "777788889999", "userName": "AssumeNothing" } } }, "eventTime": "2016-11-14T17:25:45Z", "eventSource": "s3.amazonaws.com", "eventName": "DeleteBucket", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.1", "userAgent": "[aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67]", "requestParameters": { "bucketName": "my-test-bucket-cross-account" }, "responseElements": null, "requestID": "EXAMPLE463D56D4C", "eventID": "dEXAMPLE-265a-41e0-9352-4401bEXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "777788889999" }

CloudTrail 日志文件中的 SAML AWS STS API 事件示例

以下示例显示一个 CloudTrail 日志条目,用于记录对 AWS STS AssumeRoleWithSAML 操作发出的请求。请求包括 SAML 属性 CostCenterProject,这些属性作为会话标签通过 SAML 断言传递。这些标签被设置为可传递标签,因此在角色链场景中持续存在

{ "eventVersion": "1.05", "userIdentity": { "type": "SAMLUser", "principalId": "SampleUkh1i4+ExamplexL/jEvs=:SamlExample", "userName": "SamlExample", "identityProvider": "bdGOnTesti4+ExamplexL/jEvs=" }, "eventTime": "2019-11-01T19:14:36Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRoleWithSAML", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.16.263 Python/3.4.7 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 botocore/1.12.253", "requestParameters": { "sAMLAssertionID": "_c0046cEXAMPLEb9d4b8eEXAMPLE2619aEXAMPLE", "roleSessionName": "MyAssignedRoleSessionName", "principalTags": { "CostCenter": "987654", "Project": "Unicorn", "Department": "Engineering" }, "transitiveTagKeys": [ "CostCenter", "Project" ], "durationSeconds": 3600, "roleArn": "arn:aws:iam::444455556666:role/SAMLTestRoleShibboleth", "principalArn": "arn:aws:iam::444455556666:saml-provider/Shibboleth" }, "responseElements": { "subjectType": "transient", "issuer": "https://server.example.com/idp/shibboleth", "credentials": { "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "expiration": "Mar 23, 2016 2:39:57 AM", "sessionToken": "<encoded session token blob>" }, "nameQualifier": "bdGOnTesti4+ExamplexL/jEvs=", "assumedRoleUser": { "assumedRoleId": "AROAD35QRSTUVWEXAMPLE:MyAssignedRoleSessionName", "arn": "arn:aws:sts::444455556666:assumed-role/SAMLTestRoleShibboleth/MyAssignedRoleSessionName" }, "subject": "SamlExample", "audience": "https://signin.aws.amazon.com/saml" }, "resources": [ { "ARN": "arn:aws:iam::444455556666:role/SAMLTestRoleShibboleth", "accountId": "444455556666", "type": "AWS::IAM::Role" }, { "ARN": "arn:aws:iam::444455556666:saml-provider/test-saml-provider", "accountId": "444455556666", "type": "AWS::IAM::SAMLProvider" } ], "requestID": "6EXAMPLE-e595-11e5-b2c7-c974fEXAMPLE", "eventID": "dEXAMPLE-265a-41e0-9352-4401bEXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "444455556666" }

CloudTrail 日志文件中的 Web 身份 AWS STS API 事件示例

以下示例显示一个 CloudTrail 日志条目,用于记录对 AWS STS AssumeRoleWithWebIdentity 操作发出的请求。请求包括属性 CostCenterProject,这些属性作为会话标签通过身份提供商令牌传递。这些标签被设置为可传递标签,因此在角色链场景中持续存在

{ "eventVersion": "1.05", "userIdentity": { "type": "WebIdentityUser", "principalId": "accounts.google.com:<id-of-application>.apps.googleusercontent.com:<id-of-user>", "userName": "<id of user>", "identityProvider": "accounts.google.com" }, "eventTime": "2016-03-23T01:39:51Z", "eventSource": "sts.amazonaws.com.cn", "eventName": "AssumeRoleWithWebIdentity", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.3.23 Python/2.7.6 Linux/2.6.18-164.el5", "requestParameters": { "durationSeconds": 3600, "roleArn": "arn:aws-cn:iam::444455556666:role/FederatedWebIdentityRole", "roleSessionName": "MyAssignedRoleSessionName" "principalTags": { "CostCenter": "24680", "Project": "Pegasus" }, "transitiveTagKeys": [ "CostCenter", "Project" ], }, "responseElements": { "provider": "accounts.google.com", "subjectFromWebIdentityToken": "<id of user>", "audience": "<id of application>.apps.googleusercontent.com", "credentials": { "accessKeyId": "ASIACQRSTUVWRAOEXAMPLE", "expiration": "Mar 23, 2016 2:39:51 AM", "sessionToken": "<encoded session token blob>" }, "assumedRoleUser": { "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:MyAssignedRoleSessionName", "arn": "arn:aws-cn:sts::444455556666:assumed-role/FederatedWebIdentityRole/MyAssignedRoleSessionName" } }, "resources": [ { "ARN": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole", "accountId": "444455556666", "type": "AWS::IAM::Role" } ], "requestID": "6EXAMPLE-e595-11e5-b2c7-c974fEXAMPLE", "eventID": "bEXAMPLE-0b30-4246-b28c-e3da3EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "444455556666" }

CloudTrail 日志中的登录事件示例

CloudTrail 日志文件包含的事件采用 JSON 格式。登录事件表示单个登录请求,并包括有关登录委托人、区域以及操作的日期和事件的信息。

CloudTrail 日志文件中的登录成功事件示例

以下示例显示了一个成功的登录事件的 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws-cn:iam::111122223333:user/JohnDoe", "accountId": "111122223333", "userName": "JohnDoe" }, "eventTime": "2014-07-16T15:49:27Z", "eventSource": "signin.amazonaws.com.cn", "eventName": "ConsoleLogin", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.110", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": null, "responseElements": { "ConsoleLogin": "Success" }, "additionalEventData": { "MobileVersion": "No", "LoginTo": "https://console.amazonaws.cn/s3/" }, "eventID": "3fcfb182-98f8-4744-bd45-10a395ab61cb" }

若要详细了解 CloudTrail 日志文件中包含的信息,请参阅AWS CloudTrail User Guide中的 CloudTrail 事件参考

CloudTrail 日志文件中的登录失败事件示例

以下示例显示了一个失败的登录事件的 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws-cn:iam::111122223333:user/JaneDoe", "accountId": "111122223333", "userName": "JaneDoe" }, "eventTime": "2014-07-08T17:35:27Z", "eventSource": "signin.amazonaws.com.cn", "eventName": "ConsoleLogin", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.100", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "errorMessage": "Failed authentication", "requestParameters": null, "responseElements": { "ConsoleLogin": "Failure" }, "additionalEventData": { "MobileVersion": "No", "LoginTo": "https://console.amazonaws.cn/sns" }, "eventID": "11ea990b-4678-4bcd-8fbe-62509088b7cf" }

从此信息,您可以确定此次登录尝试源自名为 JaneDoe 的 IAM 用户,如 userIdentity 元素中所示。您还可以发现此次登录尝试失败,如 responseElements 元素中所示。可以看出 JaneDoe 是在 2014 年 7 月 8 日下午 5:35 (UTC) 尝试登录 Amazon SNS 控制台的。

用户名称不正确导致的登录失败事件示例

以下示例显示了一个失败登录事件的 CloudTrail 日志条目,该事件是由于用户输入错误用户名导致的。AWS 用 HIDDEN_DUE_TO_SECURITY_REASONS 代替了 userName 文本以帮助防止泄露可能的敏感信息。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "accountId": "123456789012", "accessKeyId": "", "userName": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "eventTime": "2015-03-31T22:20:42Z", "eventSource": "signin.amazonaws.com.cn", "eventName": "ConsoleLogin", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.101", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "errorMessage": "No username found in supplied account", "requestParameters": null, "responseElements": { "ConsoleLogin": "Failure" }, "additionalEventData": { "LoginTo": "https://console.amazonaws.cn/console/home?state=hashArgs%23&isauthcode=true", "MobileVersion": "No" }, "eventID": "a7654656-0417-45c6-9386-ea8231385051", "eventType": "AwsConsoleSignin", "recipientAccountId": "123456789012" }