IAM 的工作原理 - AWS Identity and Access Management

IAM 的工作原理

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


      IntroToIAM_Diagram

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

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

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

术语

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

IAM 资源

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

  • user

  • group

  • role

  • policy

  • 身份提供者对象

IAM 实体

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

  • user

  • role

IAM 身份

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


              资源、身份及实体
主体

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

人类用户

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

工作负载

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

主体

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

请求

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

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

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

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

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

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

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

身份验证

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

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

Authorization

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

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

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

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

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

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

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

操作

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

  • CreateUser

  • DeleteUser

  • GetUser

  • UpdateUser

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

资源

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