使用 AWS CloudTrail 记录 IAM 和 AWS STS API 调用 - AWS Identity and Access Management

使用 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 用户指南

CloudTrail 中的 IAM 和 AWS STS 信息

在您创建 AWS 账户时,将在该账户上启用 CloudTrail。当 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 参考中。

记录 IAM 和 AWS STS API 请求

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

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

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

重要

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

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

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

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

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

记录区域登录事件

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

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

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

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

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

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

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

  • 您还可以使用类似于 https://alias.signin.aws.amazon.com/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 上具有单个全球终端节点。对此终端节点的调用会记录为对全球服务的调用。但是,因为此端点在物理上位于美国东部(弗吉尼亚北部)区域,因此您的日志会将 us-east-1 列为事件区域。CloudTrail 不会将这些日志写入美国东部(俄亥俄)区域,除非您选择包括该区域的全球服务日志。AWS STS 还允许调用区域端点,例如 sts.eu-central-1.amazonaws.com。CloudTrail 将对所有区域端点的调用写入到各自的区域。例如,对 sts.us-east-2.amazonaws.com 的调用发布到美国东部(俄亥俄)区域。对 sts.eu-central-1.amazonaws.com 的调用发布到欧洲(法兰克福)区域日志中。

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

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

区域名称 CloudTrail 日志中的区域身份 Endpoint CloudTrail 日志的位置
无 - 全球 us-east-1 sts.amazonaws.com 服务全球
US East (Ohio) us-east-2 sts.us-east-2.amazonaws.com 区域
US East (N. Virginia) us-east-1 sts.us-east-1.amazonaws.com 区域
US West (N. California) us-west-1 sts.us-west-1.amazonaws.com 区域
US West (Oregon) us-west-2 sts.us-west-2.amazonaws.com 区域
Canada (Central) ca-central-1 sts.ca-central-1.amazonaws.com 区域
欧洲(法兰克福) eu-central-1 sts.eu-central-1.amazonaws.com 区域
Europe (Ireland) eu-west-1 sts.eu-west-1.amazonaws.com 区域
欧洲(伦敦) eu-west-2 sts.eu-west-2.amazonaws.com 区域
Asia Pacific (Tokyo) ap-northeast-1 sts.ap-northeast-1.amazonaws.com 区域
Asia Pacific (Seoul) ap-northeast-2 sts.ap-northeast-2.amazonaws.com 区域
Asia Pacific (Mumbai) ap-south-1 sts.ap-south-1.amazonaws.com 区域
Asia Pacific (Singapore) ap-southeast-1 sts.ap-southeast-1.amazonaws.com 区域
Asia Pacific (Sydney) ap-southeast-2 sts.ap-southeast-2.amazonaws.com 区域
South America (São Paulo) sa-east-1 sts.sa-east-1.amazonaws.com 区域

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

有关更多信息,请参阅 AWS CloudTrail 用户指南中的聚合日志

记录用户登录事件

CloudTrail 会将登录事件记录到 AWS Management Console、AWS 论坛 和 AWS Marketplace 中。CloudTrail 将为 IAM 用户和联合身份用户记录成功和失败的登录尝试。

要查看成功和不成功的根用户登录的 CloudTrail 事件示例,请参阅 AWS CloudTrail 用户指南中的根用户的事件记录示例

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

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

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

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

记录临时凭证的登录事件

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

您可以在角色信任策略中使用 sts:SourceIdentity 条件键,以要求用户在代入角色时指定身份。例如,您可以要求 IAM 用户指定自己的用户名作为其源身份。这可以帮助您确定哪个用户在 AWS 中执行了具体的操作。有关更多信息,请参阅 sts:SourceIdentity。) 您可以使用 sts:RoleSessionName,以要求用户在代入角色时指定会话名称。这可以在您查看 AWS CloudTrail 日志时帮助您区分不同主体对角色使用的角色会话。

下表说明 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:iam::444455556666:user/JaneDoe", "accountId": "444455556666", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "JaneDoe", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-07-15T21:39:40Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-07-15T21:40:14Z", "eventSource": "iam.amazonaws.com", "eventName": "GetUserPolicy", "awsRegion": "us-east-2", "sourceIPAddress": "signin.amazonaws.com", "userAgent": "signin.amazonaws.com", "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 Management Console,您可以从 userAgent 元素中判断出来。

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

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

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

账户 777788889999 中名为 JohnDoe 的 IAM 用户调用 AWS STS AssumeRole 操作来在账户 111122223333 中担任角色 EC2-dev。账户管理员要求用户在担任角色时设置与其用户名相同的源身份。用户传入 JohnDoe 的源身份值。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "arn": "arn:aws:iam::777788889999:user/JohnDoe", "accountId": "777788889999", "accessKeyId": "AKIAQRSTUVWXYZEXAMPLE", "userName": "JohnDoe" }, "eventTime": "2014-07-18T15:07:39Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-east-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", "sourceIdentity": "JohnDoe", "serialNumber": "arn:aws:iam::777788889999:mfa" }, "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" }, "sourceIdentity": "JohnDoe" }, "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-east-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", "sourceIdentity": "JohnDoe", "serialNumber": "arn:aws:iam::777788889999:mfa" }, "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" }, "sourceIdentity": "JohnDoe" }, "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 角色。对于此请求,他使用来自该角色的凭证代入 JohnRole2 角色。这称为角色链。当他担任 JohnDoe1 角色时设置的源身份将在担任 JohnRole2 的请求中继续存在。如果 John 尝试在担任角色时设置不同的源身份,请求将被拒绝。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" }, "sourceIdentity": "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", "sourceIdentity": "JohnDoe", "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" }, "sourceIdentity": "JohnDoe" }, "requestID": "b96b0e4e-e561-11e9-8b3f-7b396EXAMPLE", "eventID": "1917948f-3042-46ec-98e2-62865EXAMPLE", "resources": [ { "ARN": "arn:aws:iam::111111111111: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": { "mfaAuthenticated": "false", "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-east-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 事件的示例

以下示例说明了为进行 AWS STS AssumeRoleWithSAML 操作而发出的请求的 CloudTrail 日志条目。请求包括 SAML 属性 CostCenterProject,这些属性作为会话标签通过 SAML 断言传递。这些标签被设置为可传递标签,因此在角色链场景中持续存在。请求包含 SAML 属性 sourceIdentity,该属性在 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", "sourceIdentity": "MySAMLUser", "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", "sourceIdentity": "MySAMLUser" "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 事件示例

以下示例说明了为进行 AWS STS AssumeRoleWithWebIdentity 操作而发出的请求的 CloudTrail 日志条目。请求包括属性 CostCenterProject,这些属性作为会话标签通过身份提供程序令牌传递。这些标签被设置为可传递标签,因此在角色链中持续存在。请求包含身份提供程序令牌中的 sourceIdentity 属性。如果某人使用生成的角色会话凭证担任另一个角色,则此源身份将仍然存在。

{ "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", "eventName": "AssumeRoleWithWebIdentity", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.3.23 Python/2.7.6 Linux/2.6.18-164.el5", "requestParameters": { "sourceIdentity": "MyWebIdentityUser", "durationSeconds": 3600, "roleArn": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole", "roleSessionName": "MyAssignedRoleSessionName" "principalTags": { "CostCenter": "24680", "Project": "Pegasus" }, "transitiveTagKeys": [ "CostCenter", "Project" ], }, "responseElements": { "provider": "accounts.google.com", "subjectFromWebIdentityToken": "<id of user>", "sourceIdentity": "MyWebIdentityUser", "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: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:iam::111122223333:user/JohnDoe", "accountId": "111122223333", "userName": "JohnDoe" }, "eventTime": "2014-07-16T15:49:27Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-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.aws.amazon.com/s3/", "MFAUsed": "No" }, "eventID": "3fcfb182-98f8-4744-bd45-10a395ab61cb" }

有关 CloudTrail 日志文件中所包含信息的更多详细信息,请参阅 AWS CloudTrail 用户指南中的 CloudTrail 事件参考

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

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

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws:iam::111122223333:user/JaneDoe", "accountId": "111122223333", "userName": "JaneDoe" }, "eventTime": "2014-07-08T17:35:27Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-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.aws.amazon.com/sns", "MFAUsed": "No" }, "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", "eventName": "ConsoleLogin", "awsRegion": "us-east-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.aws.amazon.com/console/home?state=hashArgs%23&isauthcode=true", "MobileVersion": "No", "MFAUsed": "No" }, "eventID": "a7654656-0417-45c6-9386-ea8231385051", "eventType": "AwsConsoleSignin", "recipientAccountId": "123456789012" }