IAM 的工作原理
IAM 提供了控制您 AWS 账户 身份验证和授权所需的基础设施。IAM 基础设施如下图所示:
首先,人类用户或应用程序使用其登录凭证与 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 服务的操作、资源和条件键。