

# IAM 的工作原理
<a name="intro-structure"></a>

AWS Identity and Access Management 提供了控制您 AWS 账户 身份验证和授权所需的基础设施。

首先，人类用户或应用程序使用其登录凭证与 AWS 进行身份验证。IAM 将登录凭证与受 AWS 账户 信任的主体（IAM 用户、AWS STS 联合用户主体、IAM 角色或应用程序）进行匹配，验证访问 AWS 的权限。

接下来，IAM 请求授予主体对资源的访问权限。IAM 根据授权请求授予或拒绝访问。例如，当您首次登录控制台并进入控制台主页时，您并未访问特定服务。选择一项服务后，将向 IAM 发送该服务的授权请求。IAM 将验证您的身份是否在授权用户列表中，确定哪些策略控制授予的访问权限级别，并评估任何其他可能生效的策略。您的 AWS 账户 或您信任的其他 AWS 账户 内的主体可以提出授权请求。

获得授权后，主体可以对您 AWS 账户 中的资源执行操作。例如，主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。下图通过 IAM 基础设施说明了这一过程：

![\[此图表显示了 IAM 服务如何对主体进行身份验证和授权，以对其他 AWS 服务或资源执行操作。\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/intro-diagram _policies_800.png)


## 请求的组成部分
<a name="intro-structure-request"></a>

在主体尝试使用 AWS 管理控制台、AWS API 或 AWS CLI 时，该主体将向 AWS 发送*请求*。请求包含以下信息：
+ **操作**：主体想要执行的操作，例如 AWS 管理控制台 中的操作，或者 AWS CLI 或 AWS API 中的操作。
+ **资源**：主体请求对其执行操作的 AWS 资源对象。
+ **主体** – 已使用实体（用户或角色）发送请求的人员或应用程序。有关主体的信息包括权限策略。
+ **环境数据**：有关 IP 地址、用户代理、SSL 启用状态和时间戳的信息。
+ **资源数据**：与请求的资源相关的数据，例如 DynamoDB 表名或 Amazon EC2 实例上的标签。

AWS 将请求信息收集到*请求上下文*中，IAM 会对其进行评估以授权该请求。

## 如何对主体进行身份验证
<a name="intro-structure-authentication"></a>

主体使用其凭证登录 AWS，IAM 会对其进行身份验证，以允许主体向 AWS 发送请求。某些服务（如 Amazon S3 和 AWS STS）允许来自匿名用户的特定请求。不过，它们是该规则的例外情况。每种类型的用户都要经过身份验证。
+ **根用户**：用于身份验证的登录凭证是您用于创建 AWS 账户 的电子邮件地址和当时指定的密码。
+ **联合主体**：您的身份提供者会对您进行身份验证并将您的凭证传递给 AWS，您无需直接登录 AWS。IAM Identity Center 和 IAM 都支持身份联合验证。
+ **AWS IAM Identity Center 目录 中的用户***（非联合用户）*：直接在 IAM Identity Center 默认目录中创建的用户使用 AWS 访问门户登录并提供您的用户名和密码。
+ **IAM 用户**：您可以通过提供账户 ID 或别名、用户名和密码进行登录。要对 API 或 AWS CLI 中的工作负载进行身份验证，您可以通过承担角色使用临时凭证，也可以通过提供访问密钥和私密访问密钥来使用长期凭证。

  要了解有关 IAM 实体的更多信息，请参阅 [IAM 用户](id_users.md) 和 [IAM 角色](id_roles.md)。

AWS 建议您对所有用户使用多重身份验证（MFA）以提高您账户的安全性。要了解有关 MFA 的更多信息，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

## 授权和权限策略基础知识
<a name="intro-structure-authorization"></a>

授权是指主体拥有完成其请求所需的权限。在授权期间，IAM 使用请求上下文中的值来识别适用于该请求的策略。然后，它使用策略来确定是允许还是拒绝请求。IAM 将大多数权限策略存储为指定主体实体权限的 [JSON 文档](access_policies.md#access_policies-json)。

有[多种类型的策略](access_policies.md)可以影响授权请求。要向用户提供访问您账户中 AWS 资源的权限，您可以使用基于身份的策略。基于资源的策略可以授予[跨账户访问权限](access_permissions-required.md#UserPermissionsAcrossAccounts)。要在另一个账户中发出请求，此其他账户中的策略必须允许访问资源，*并且*您用于发出请求的 IAM 实体必须具有允许该请求基于身份的策略。

IAM 检查应用于请求上下文的每个策略。IAM 策略评估使用*显式拒绝*，这意味着如果一个权限策略包含拒绝操作，则 IAM 将拒绝整个请求并停止评估。由于请求*默认被拒绝*，因此适用的权限策略必须允许请求的每个部分，IAM 才能授权您的请求。单个账户中对于请求的评估逻辑遵循以下基本规则：
+ 默认情况下，所有请求都将被拒绝。（通常，始终允许使用 AWS 账户根用户 凭证创建的访问该账户资源的请求。） 
+ 任何权限策略（基于身份或基于资源）中的显式允许将覆盖此默认值。
+ AWS Organizations 服务控制策略（SCP）或资源控制策略（RCP）、IAM 权限边界或会话策略的存在将覆盖允许。如果存在其中一个或多个策略类型，它们必须都允许请求。否则，将隐式拒绝它。有关 SCP 和 RCP 更多信息，请参阅《AWS Organizations 用户指南》**中的 [Authorization policies in AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_authorization_policies.html)。
+ 任何策略中的显式拒绝都会覆盖所有策略中的允许。

要了解更多信息，请参阅[策略评估逻辑](reference_policies_evaluation-logic.md)。<a name="intro-structure-actions"></a>

在 IAM 对主体进行身份验证和授权后，IAM 将通过评估适用于主体的权限策略来批准其请求中的操作。每项 AWS 服务都定义了其支持的操作，包括可以对资源执行的操作，例如，查看、创建、编辑和删除该资源。适用于主体的权限策略必须包含执行操作必需的操作。要了解有关 IAM 如何评估权限策略的更多信息，请参阅 [策略评估逻辑](reference_policies_evaluation-logic.md)。

服务定义了主体可以对每个资源执行的一组操作。创建权限策略时，请确保包含您希望用户能够执行的操作。例如，IAM 支持针对用户资源的 40 多种操作，包括以下基本操作：
+ `CreateUser`
+ `DeleteUser`
+ `GetUser`
+ `UpdateUser`

此外，您还可以在权限策略中指定条件，当请求满足指定条件时，允许访问资源。例如，您可能希望策略语句在特定日期之后生效，或者在 API 请求中存在特定值时控制访问。要指定条件，您可以使用策略语句的 [`Condition`](reference_policies_elements_condition_operators.md) 元素。

在 IAM 批准请求中的操作后，主体便可使用您账户中的相关资源。资源是位于服务中的对象。示例包括 Amazon EC2 实例、IAM 用户和 Amazon S3 存储桶。如果主体创建请求以对未包含在权限策略中的资源执行操作，则服务会拒绝该请求。例如，如果您有权删除 IAM 角色，但请求删除 IAM 组；您无权删除 IAM 组，因此请求失败。要了解不同 AWS 服务支持哪些操作、资源和条件键，请参阅 [AWS 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html)。