IAM 的工作原理 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

IAM 的工作原理

IAM 提供了控制您 Amazon Web Services 账户 身份验证和授权所需的基础设施。IAM 基础设施如下图所示:


      IntroToIAM_Diagram

首先,人类用户或应用程序使用其登录凭证与 Amazon 进行身份验证。通过匹配登录凭证与受 Amazon Web Services 账户 信任的主体(IAM 用户、联合用户、IAM 角色或应用程序)来进行身份验证。

接下来,请求授予主体对资源的访问权限。访问权限是根据授权请求而授予的。例如,当您首次登录控制台并进入控制台主页时,您并未访问特定服务。当您选择一项服务时,授权请求将发送至该服务,并查看您的身份是否在授权用户列表中,正在执行哪些策略来控制授予的访问级别,以及任何其他可能生效的策略。授权请求可以由您 Amazon Web Services 账户 内的主体提出,也可以由您信任的其他 Amazon Web Services 账户 提出。

获得授权后,主体可以对您 Amazon Web Services 账户 里的资源采取行动或执行操作。例如,主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。

术语

通常在处理 Amazon 时使用这些 IAM 术语:

IAM 资源

IAM 资源存储在 IAM 中。您可以在 IAM 中添加、编辑和从中将其移除。

  • user

  • group

  • role

  • policy

  • 身份提供者对象

IAM 实体

Amazon 用于身份验证的 IAM 资源。在基于资源的策略中,可以将实体指定为一个主体。

  • user

  • role

IAM 身份

可以在策略中获得授权以执行操作和访问资源的 IAM 资源。身份包括用户、组及角色。


              资源、身份及实体
主体

使用 Amazon Web Services 账户根用户、IAM 用户或 IAM 角色登录并向 Amazon 发出请求的人员或应用程序。主体包括联合身份用户和代入的角色。

人类用户

也称为人类身份;是应用程序的人员、管理员、开发人员、操作员和使用者。

工作负载

一系列资源和代码,它们可提供商业价值,如应用程序或后端过程。可能包括应用程序、操作工具和组件。

主体

主体是可请求对 Amazon 资源执行操作的人类用户或工作负载。在身份验证后,可以向主体授予永久或临时凭证,以允许其向 Amazon 发出请求,具体取决于主体类型。IAM 用户和根用户将获得永久凭证,而角色获得临时凭证。作为最佳实践,我们建议您要求人类用户和工作负载使用临时凭证访问 Amazon 资源。

请求

在主体尝试使用 Amazon Web Services Management Console、Amazon API 或 Amazon CLI 时,该主体将向 Amazon 发送请求。请求包含以下信息:

  • 操作 – 主体希望执行的操作。这可以是 Amazon Web Services Management Console中的操作或者 Amazon CLI 或 Amazon API 中的操作。

  • 资源 – 对其执行操作的 Amazon 资源对象。

  • 主体 – 已使用实体(用户或角色)发送请求的人员或应用程序。有关主体的信息包括与主体用于登录的实体关联的策略。

  • 环境数据 – 有关 IP 地址、用户代理、SSL 启用状态或当天时间的信息。

  • 资源数据 – 与请求的资源相关的数据。这可能包括 DynamoDB 表名称或 Amazon EC2 实例上的标签等信息。

Amazon 将请求信息收集到请求上下文中,后者用于评估和授权请求。

身份验证

主体必须使用其凭证进行身份验证(登录到 Amazon)以向 Amazon 发送请求。某些服务(如 Amazon S3 和 Amazon STS)允许一些来自匿名用户的请求。不过,它们是该规则的例外情况。

要以 根用户 身份从控制台中进行身份验证,必须使用您的电子邮件地址和密码登录。作为联合用户,您的身份提供商会对您进行身份验证,并通过担任 IAM 角色向您授予对 Amazon 资源的访问权限。作为 IAM 用户,请提供您的账户 ID 或别名,然后提供您的用户名和密码。要对 API 或 Amazon CLI 中的工作负载进行身份验证,您可以通过承担角色使用临时凭证,也可以通过提供访问密钥和私密访问密钥来使用长期凭证。您还可能需要提供额外的安全信息。作为最佳实践,Amazon 建议您使用多重身份验证(MFA)和临时凭证来提高账户的安全性。要了解有关 Amazon 可验证的 IAM 实体的更多信息,请参阅 IAM 用户IAM 角色

Authorization

您还必须获得授权(允许)才能完成您的请求。在授权期间,Amazon 使用请求上下文中的值来检查应用于请求的策略。然后,它使用策略来确定是允许还是拒绝请求。大多数策略作为 JSON 文档存储在 Amazon 中,并指定主体实体的权限。有多种类型的策略可影响是否对请求进行授权。要向用户提供访问他们自己账户中的 Amazon 资源的权限,只需基于身份的策略。基于资源的策略常用于授予跨账户访问。其他策略类型是高级功能,应谨慎使用。

Amazon 检查应用于请求上下文的每个策略。如果一个权限策略包含拒绝的操作,Amazon 将拒绝整个请求并停止评估。这称为显式拒绝。由于请求是默认被拒绝的,因此,只有在适用的权限策略允许请求的每个部分时,Amazon 才会授权请求。单个账户中对于请求的评估逻辑遵循以下一般规则:

  • 默认情况下,所有请求都将被拒绝。(通常,始终允许使用 Amazon Web Services 账户根用户 凭证创建的访问该账户资源的请求。)

  • 任何权限策略(基于身份或基于资源)中的显式允许将覆盖此默认值。

  • 组织 SCP、IAM 权限边界或会话策略的存在将覆盖允许。如果存在其中一个或多个策略类型,它们必须都允许请求。否则,将隐式拒绝它。

  • 任何策略中的显式拒绝将覆盖任何允许。

要了解有关如何评估所有类型的策略的更多信息,请参阅策略评估逻辑。如果您需要在另一个账户中发出请求,此其他账户中的策略必须允许访问资源,并且 您用于发出请求的 IAM 实体必须具有允许该请求的基于身份的策略。

操作

在对您的请求进行身份验证和授权后,Amazon 将批准请求中的操作。操作是由服务定义的,包括可以对资源执行的操作,例如,查看、创建、编辑和删除该资源。例如,IAM 为用户资源支持大约 40 个操作,包括以下操作:

  • CreateUser

  • DeleteUser

  • GetUser

  • UpdateUser

要允许主体执行操作,您必须在应用于主体或受影响的资源的策略中包含所需的操作。要查看各个服务支持的操作、资源类型和条件键的列表,请参阅 Amazon 服务的操作、资源和条件键

资源

在 Amazon 批准请求中的操作后,可以对您的账户中的相关资源执行这些操作。资源是位于服务中的对象。示例包括 Amazon EC2 实例、IAM 用户和 Amazon S3 存储桶。服务定义了一组可对每个资源执行的操作。如果创建一个请求以对资源执行不相关的操作,则会拒绝该请求。例如,如果您请求删除一个 IAM 角色,但提供一个 IAM 组资源,请求将失败。要查看确定操作影响哪些资源的 Amazon 服务表,请参阅 Amazon 服务的操作、资源和条件键