如何定位RAM角色调用事件的真实用户身份?

当您发现一个RAM角色调用事件时(即userIdentity.type为assumed-role),可以参考本文的指导,快速定位真实用户身份(RAM用户或阿里云账号)。

背景信息

某企业发现阿里云账号159498693826****中有一个身份类型为assumed-role的角色扮演事件,需要定位该事件的调用者,事件详情如下:

{
  "eventId": "8DC8A000-6E74-59BD-8EB9-DDF64E45****",
  "eventVersion": 1,
  "eventSource": "ecs-openapi-share.cn-hangzhou.aliyuncs.com",
  "requestParameters": {
    "stsTokenPrincipalName": "role-for-user-identity/Alice",
    "SourceRegionId": "cn-hangzhou",
    "AcsProduct": "ECS",
    "RegionId": "cn-hangzhou",
    "stsTokenPlayerUid": 159498693826****
  },
  "sourceIpAddress": "42.120.XX.XX",
  "userAgent": "AlibabaCloud (darwin; x64) Node.js/v17.1.0 Core/1.7.11",
  "eventType": "ApiCall",
  "userIdentity": {
    "accessKeyId": "STS.NTxwELwTuZr6XtdjqjsbT****",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2022-06-08T01:58:23Z"
      }
    },
    "accountId": "159498693826****",
    "principalId": "35443786793104****:Alice",
    "type": "assumed-role",
    "userName": "role-for-user-identity:Alice"
  },
  "serviceName": "Ecs",
  "additionalEventData": {
    "CallerBid": "26842"
  },
  "apiVersion": "2014-05-26",
  "requestId": "8DC8A000-6E74-59BD-8EB9-DDF64E454B2A",
  "eventTime": "2022-06-08T01:58:26Z",
  "isGlobal": false,
  "acsRegion": "cn-hangzhou",
  "eventName": "DescribeInstances"
}

分析事件

您可以根据事件结构定义文档解析事件代码含义。更多信息,请参见管控事件结构定义

本文代码示例的关键字段含义如下:

  • userIdentity.accountId:角色所属的阿里云账号是159498693826****

  • userIdentity.type:调用事件的用户类型是RAM角色(assumed-role)。

  • userIdentity.userName:被扮演的RAM角色名称是role-for-user-identity

  • userIdentity.accessKeyId:角色扮演事件生成的临时STS Token(资源)是STS.NTxwELwTuZr6XtdjqjsbT****

  • requestParameters.stsTokenPlayerUid:扮演者所属的阿里云账号是159498693826****

经过分析,stsTokenPlayerUid与accountId相同,表示扮演者和角色属于同一个阿里云账号。

说明

如果stsTokenPlayerUid与accountId不同,表示扮演者和角色不属于同一个阿里云账号。

后续您可以登录stsTokenPlayerUid账号(159498693826****),进入操作审计控制台,使用事件查询功能定位扮演者身份。

定位事件

您可以使用事件查询功能搜索资源名称(STS.NTxwELwTuZr6XtdjqjsbT****),查找AssumeRole事件。

说明

资源名称(STS.NTxwELwTuZr6XtdjqjsbT****)为上述事件中的临时STS Token,即userIdentity.accessKeyId

  1. 使用stsTokenPlayerUid账号登录操作审计控制台

  2. 在左侧菜单栏,选择事件 > 事件查询

  3. 事件查询页面,先选择关联资源名称,输入资源名称(STS.NTxwELwTuZr6XtdjqjsbT****),然后单击搜索图标。

  4. 单击目标事件对应操作列的查看事件详情

    {
      "eventId": "961F78D5-0F8F-52B9-851D-000C5199****",
      "eventVersion": 1,
      "responseElements": {
        "RequestId": "961F78D5-0F8F-52B9-851D-000C51996F0C",
        "AssumedRoleUser": {
          "Arn": "acs:ram::159498693826****:role/role-for-user-identity/Alice",
          "AssumedRoleId": "35443786793104****:Alice"
        },
        "Credentials": {
          "AccessKeyId": "STS.NTxwELwTuZr6XtdjqjsbT****",
          "AccessKeySecret": "dylEiakiwLFB1CufDyxyCwlCxZ****",
          "Expiration": "2022-06-08T02:58:25Z"
        }
      },
      "eventSource": "sts.cn-hangzhou.aliyuncs.com",
      "requestParameters": {
        "AcsProduct": "Sts",
        "RoleSessionName": "Alice",
        "Region": "cn-hangzhou",
        "DurationSeconds": 3600,
        "RoleArn": "acs:ram::159498693826****:role/role-for-user-identity"
      },
      "sourceIpAddress": "42.120.XX.XX",
      "userAgent": "AlibabaCloud (darwin; x64) Node.js/v17.1.0 Core/1.7.11",
      "eventType": "ApiCall",
      "referencedResources": {
        "ACS::RAM::AccessKey": [
          "STS.NTxwELwTuZr6XtdjqjsbT****"
        ]
      },
      "userIdentity": {
        "accessKeyId": "LTAI5tPvdUTowp2tDHsg****",
        "sessionContext": {
          "attributes": {
            "mfaAuthenticated": "false",
            "creationDate": "2022-06-08T01:58:22Z"
          }
        },
        "accountId": "159498693826****",
        "principalId": "29577185456911****",
        "type": "ram-user",
        "userName": "Alice"
      },
      "serviceName": "Sts",
      "additionalEventData": {
        "CallerBid": "26842"
      },
      "apiVersion": "2015-04-01",
      "requestId": "961F78D5-0F8F-52B9-851D-000C51996F0C",
      "eventTime": "2022-06-08T01:58:25Z",
      "isGlobal": false,
      "acsRegion": "cn-hangzhou",
      "eventName": "AssumeRole"
    }
  5. 分析事件。

    事件代码中关键字段含义如下:

    • eventName:角色扮演事件(AssumeRole)。

    • userIdentity.responseElements.CredentialsAccessKeyId:进行角色扮演后得到的临时AccessKey ID为STS.NTxwELwTuZr6XtdjqjsbT****

    • userIdentity.type:进行角色扮演的用户类型是RAM用户(ram-user)。

    • userIdentity.userName:进行角色扮演的用户名是Alice

    • userIdentity.accessKeyId:进行角色扮演的AccessKey ID是LTAI5tPvdUTowp2tDHsg****

    因此可以得出结论:RAM用户Alice(29577185456911****)扮演了RAM角色role-for-user-identity,且使用该角色调用了事件DescribeInstances。