

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

# 身份增强型 IAM 角色会话
<a name="trustedidentitypropagation-identity-enhanced-iam-role-sessions"></a>

[AWS Security Token Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html)（STS）使应用程序能够获得身份增强型 IAM 角色会话。身份增强型角色会话具有一个额外的身份上下文，该上下文将用户标识符带到它所调 AWS 服务 用的中。 AWS 服务 可以在 IAM Identity Center 中查找用户的群组成员资格和属性，并使用它们来授权用户访问资源。

AWS 应用程序通过向 AWS STS [AssumeRole](https://docs.aws.amazon.com//STS/latest/APIReference/API_AssumeRole.html)API 操作发出请求并在请求的`ProvidedContexts`参数中传递带有用户标识符 (`userId`) 的上下文断言来获取身份增强型角色会话。`AssumeRole`该上下文断言是从响应 [https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html) `SSO OIDC` 请求而收到的 `idToken` 声明中获取的。当 AWS 应用程序使用身份增强型角色会话访问资源时，会 CloudTrail 记录`userId`、启动会话和采取的操作。有关更多信息，请参阅 [身份增强型 IAM 角色会话记录](#trustedidentitypropagation-identity-enhanced-iam-role-session-logging)。

**Topics**
+ [身份增强型 IAM 角色会话的类型](#types-identity-enhanced-iam-role-sessions)
+ [身份增强型 IAM 角色会话记录](#trustedidentitypropagation-identity-enhanced-iam-role-session-logging)

## 身份增强型 IAM 角色会话的类型
<a name="types-identity-enhanced-iam-role-sessions"></a>

AWS STS 可以创建两种不同类型的身份增强型 IAM 角色会话，具体取决于为请求提供的上下文断言。`AssumeRole`已从 IAM Identity Center 获取身份令牌的应用程序，可向 IAM 角色会话添加 `sts:identiy_context`（推荐）或 `sts:audit_context`（为向后兼容提供支持）。身份增强型 IAM 角色会话只能采用这些上下文断言中的一个，不能同时采用两者。

### 通过 `sts:identity_context` 创建的身份增强型 IAM 角色会话
<a name="role_session_sts_identity_context"></a>

当身份增强型角色会话包含 `sts:identity_context` 时，被调用的 AWS 服务 会决定资源授权是基于角色会话中代表的用户，还是基于角色。支持基于用户的授权的 AWS 服务 ，可为应用程序管理员提供向用户或用户所属组分配访问权限的控制。

AWS 服务 不支持基于用户的授权的，请忽略。`sts:identity_context` CloudTrail 记录 IAM Identity Center 用户的用户 ID 以及该角色采取的所有操作。有关更多信息，请参阅 [身份增强型 IAM 角色会话记录](#trustedidentitypropagation-identity-enhanced-iam-role-session-logging)。

要从中获取此类身份增强型角色会话 AWS STS，应用程序使用[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)请求参数在请求中提供该`sts:identity_context`字段的`ProvidedContexts`值。使用 `arn:aws:iam::aws:contextProvider/IdentityCenter` 作为 `ProviderArn` 的值。

有关授权行为的更多信息，请参阅接收 AWS 服务文档。

### 通过 `sts:audit_context` 创建的身份增强型 IAM 角色会话
<a name="role_session_sts_audit_context"></a>

过去`sts:audit_context`，用于启用 AWS 服务 记录用户身份，而不用它来做出授权决定。 AWS 服务 现在能够使用单一上下文-`sts:identity_context`-来实现这一目标并做出授权决定。我们建议在所有新的可信身份传播部署中使用 `sts:identity_context`。

## 身份增强型 IAM 角色会话记录
<a name="trustedidentitypropagation-identity-enhanced-iam-role-session-logging"></a>

向 AWS 服务 使用身份增强型 IAM 角色会话的用户发出请求时，用户的 IAM 身份中心`userId`将登录到该`OnBehalfOf`元素 CloudTrail 中。事件的登录方式 CloudTrail 因而异 AWS 服务。并非所有 AWS 服务 都会记录 `onBehalfOf` 元素。

以下是向 AWS 服务 使用身份增强角色会话发出的请求如何登录的示例。 CloudTrail

```
"userIdentity": {
      "type": "AssumedRole",
      "principalId": "AROAEXAMPLE:MyRole",
      "arn": "arn:aws:sts::111111111111:assumed-role/MyRole/MySession",
      "accountId": "111111111111",
      "accessKeyId": "ASIAEXAMPLE",
      "sessionContext": {
        "sessionIssuer": {
            "type": "Role",
            "principalId": "AROAEXAMPLE",
            "arn": "arn:aws:iam::111111111111:role/MyRole",
            "accountId": "111111111111",
            "userName": "MyRole"
        },
        "attributes": {
            "creationDate": "2023-12-12T13:55:22Z",
            "mfaAuthenticated": "false"
        }
    },
    "onBehalfOf": {
        "userId": "11111111-1111-1111-1111-1111111111",
        "identityStoreArn": "arn:aws:identitystore::111111111111:identitystore/d-111111111"
    }
}
```